我正在开发一个应用程序,从SQL数据库中检索数据并在用户界面中呈现。我已经成功地实现了整个功能,但现在卡在了GUI部分。我希望UI能够适应窗口大小。元素(img、labels、textboxes)具有最小高度和最小宽度,但也可以根据可用空间增长到最大值。如果窗口变得太小,我希望UI像响应式网站一样进行调整。
最大化的窗口会像这样: 最大化的窗口 窗口变得太小时,元素会相应地调整: 较小的窗口 我的最佳方法是:
这个解决方案的问题在于当窗口缩小时,内容会缩小以适应窗口,变得不可读。如果图像可以移到人员数据之上,就可以节省很多空间,而且人员数据也可以被读取。
我尝试过使用wrappanel、viewbox、grid、uniformgrid等方式,但无法以我想要的方式实现它。
非常感谢任何帮助。
提前致谢!
最大化的窗口会像这样: 最大化的窗口 窗口变得太小时,元素会相应地调整: 较小的窗口 我的最佳方法是:
<Grid DataContext="{Binding CurrentPerson}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1*"/>
<ColumnDefinition Width="5*"/>
</Grid.ColumnDefinitions>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<Image Grid.Row="0" Source="{Binding Person.Photo}"/>
</Grid>
<Viewbox Grid.Column="1" StretchDirection="Both" Stretch="Uniform" HorizontalAlignment="Left" VerticalAlignment="Top">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Label Grid.Column="0" Grid.Row="0" VerticalAlignment="Center">Title:</Label>
<Label Grid.Column="0" Grid.Row="1" VerticalAlignment="Center">Name:</Label>
<Label Grid.Column="0" Grid.Row="2" VerticalAlignment="Center">Street:</Label>
<Label Grid.Column="0" Grid.Row="3" VerticalAlignment="Center">City:</Label>
<Label Grid.Column="0" Grid.Row="4" VerticalAlignment="Center">Number:</Label>
<TextBox Grid.Column="1" Grid.Row="0" HorizontalAlignment="Left" IsReadOnly="True" MinWidth="80"Text="{Binding Person.Title}"/>
<TextBox Grid.Column="1" Grid.Row="1" HorizontalAlignment="Left" IsReadOnly="True" MinWidth="300">
<TextBox.Text>
<MultiBinding StringFormat="{}{0} {1}">
<Binding Path="Person.LastName"/>
<Binding Path="Person.FirstName"/>
</MultiBinding>
</TextBox.Text>
</TextBox>
<TextBox Grid.Column="1" Grid.Row="2" HorizontalAlignment="Left" IsReadOnly="True" MinWidth="300" Text="{Binding Person.Street}"/>
<TextBox Grid.Column="1" Grid.Row="3" HorizontalAlignment="Left" IsReadOnly="True" MinWidth="300" Text="{Binding Person.City}"/>
<TextBox Grid.Column="1" Grid.Row="4" HorizontalAlignment="Left" IsReadOnly="True" MinWidth="30" Text="{Binding Person.Number}"/>
</Grid>
</Viewbox>
</Grid>
这个解决方案的问题在于当窗口缩小时,内容会缩小以适应窗口,变得不可读。如果图像可以移到人员数据之上,就可以节省很多空间,而且人员数据也可以被读取。
我尝试过使用wrappanel、viewbox、grid、uniformgrid等方式,但无法以我想要的方式实现它。
非常感谢任何帮助。
提前致谢!
ViewBox
包裹在一个Grid
中,它就会自动缩放。但我想补充一点,根据窗口大小自动缩放字体和控件是一个用户界面的想法,我最后一次见到这种做法是在90年代早期的Windows API文档中。实际上,这并不是一个非常好的想法。 - 15ee8f99-57ff-4f92-890c-b56153private void Window_SizeChanged.....
?你有MainWindows.xaml.cs的完整示例吗?我已经将它放在了public MainWindow() {.....
下面,但它没有任何作用。谢谢。 - EPurpl3