调试我的WPF程序时,我注意到当窗口是设置大小时,控件看起来很好。但是当窗口最大化时,内容位于相同的位置,就好像窗口没有调整大小一样。我想要它,以便内容和窗口按比例调整大小。我怎样才能做到这一点?对不起,如果这是一个愚蠢的问题,但我在WPF时代有点新鲜。
XAML代码还没有完全准备好,但这里有一些元素:
<DockPanel>
<StackPanel DockPanel.Dock="Left">
...
</StackPanel>
<TabControl DockPanel.Dock="Right">
...
</TabControl>
<ListView>
...
</ListView>
</DockPanel>
答案 0 :(得分:5)
通常,这是因为维度值是静态设置的,而不是动态设置的。这是静态方法:
<RowDefinition x:Name="NavigatorRow" Height="120"/>
<RowDefinition x:Name="TaskPanelRow" Height="80"/>
两行都有固定的高度,它们不会随窗口大小调整。
以下是动态方法:
<RowDefinition x:Name="NavigatorRow" Height="1*"/>
<RowDefinition x:Name="TaskPanelRow" Height="80"/>
底行的固定高度仍为80,但顶行将展开以填充任何可用空间。换句话说,行将随窗口调整大小。列的工作方式相同。
如果我有三行,我可以这样做:
<RowDefinition x:Name="NavigatorRow" Height="1*"/>
<RowDefinition x:Name="CalendarRow" Height="2*"/>
<RowDefinition x:Name="TaskPanelRow" Height="80"/>
导航器行和日历行将共享可用空间,日历行占用导航器行高度的两倍。你明白了。
因此,它不是您使用的容器,而是您如何调整容器的大小。如上所述,一个例外是StackPanel,它不能扩展。改为使用网格,因为它可以缩放。
答案 1 :(得分:3)
通常这是因为内容托管在一个容器中,该容器具有明确设置的宽度和高度 - 例如Grid。
发布您的Xaml或答案是您将获得的最佳答案!
答案 2 :(得分:2)
避免使用StackPanel,它们不能动态调整大小。
理想情况下,如果您希望按比例调整大小,则应使用网格并指定百分比。
答案 3 :(得分:1)
不确定为什么每个人都说堆栈面板不会动态调整大小。他们像网格一样处理调整大小。只需确保设置HorizontalAlignment =“Stretch”(和/或VerticalAlignment),内容将展开以填充stackpanel大小。我目前正在使用由许多嵌套堆栈面板组成的UI,水平和垂直调整窗口可以在窗口内同等地扩展/收缩所有控件。
答案 4 :(得分:0)
嗯,你的控件必须有某种容器,对吧?如果你正在使用Canvas并且只是把你的控件放在那里,那你几乎没有运气;这对缩放界面来说不是很好。
但是,有各种容器控件可以以某种方式布置您放入其中的任何内容。如果使用得当,它们也可以通过调整大小窗口进行缩放。 Grid非常灵活,但StackPanel和DockPanel也非常方便。
如果需要,您可以将它们嵌套。
答案 5 :(得分:0)
使用带有“Number *”概念设置的Widht和Height属性的WPF网格。 例如宽度=“0.6 *”,它不是绝对高度,而是与容器成比例关系。通常,如果您想要可调整大小的内容,请尽可能避免使用固定大小的属性。
<Grid.RowDefinitions>
<RowDefinition Height="10*"></RowDefinition>
<RowDefinition Height="*" ></RowDefinition>
</Grid.RowDefinitions>
祝你好运。