3

在调试我的 WPF 程序时,我注意到当窗口设置为设置大小时,控件看起来很好。但是当窗口最大化时,内容定位在同一个位置,就好像窗口没有调整大小一样。我想要它使内容和窗口按比例调整大小。我怎样才能做到这一点?对不起,如果这是一个愚蠢的问题,但我在 WPF 时代有点新。


XAML 代码尚未完全准备好,但这里有一些元素:

<DockPanel>
    <StackPanel DockPanel.Dock="Left">
    ...
    </StackPanel>

    <TabControl DockPanel.Dock="Right">
    ...
    </TabControl>

    <ListView>
    ...
    </ListView>
</DockPanel>
4

6 回答 6

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,它不能缩放。请改用网格,因为它确实可以缩放。

于 2010-01-20T02:35:36.713 回答
3

通常这是因为内容托管在具有明确设置的宽度和高度的容器中 - 例如 Grid。

发布您的 Xaml,否则您将得到最好的答案!

于 2010-01-20T01:29:43.313 回答
2

避免使用不能正确动态调整大小的 StackPanel。

理想情况下,如果您希望按比例调整大小,您应该使用网格并指定百分比。

于 2010-01-20T02:00:54.640 回答
1

不知道为什么每个人都说堆栈面板不会动态调整大小。他们像网格一样处理调整大小。只需确保设置了 Horizo​​ntalAlignment="Stretch" (和/或 VerticalAlignment),内容就会扩展以填充堆栈面板的大小。我目前正在使用由许多嵌套堆栈面板组成的 UI,水平和垂直调整窗口大小会在窗口内平等地展开/收缩所有控件。

于 2011-09-19T20:32:49.147 回答
0

好吧,您必须为控件提供某种容器,对吗?如果您使用的是 Canvas 并且只是将控件绝对放置在其中,那么您将非常不走运;这对于扩展接口不是很好。

但是,有各种容器控件会以某种方式对您放入其中的任何内容进行布局。如果使用得当,它们也可以通过调整大小窗口进行缩放。Grid 非常灵活,但 StackPanel 和 DockPanel 有时也非常方便。

如果需要,您可以嵌套它们。

于 2010-01-20T01:31:24.257 回答
0

将 WPF 网格与设置有“数字*”概念的宽度和高度属性一起使用。例如Width="0.6*",这不是绝对高度,而是与容器的比例关系。一般来说,如果您想要调整大小的内容,请尽可能避免使用固定大小的属性。

  <Grid.RowDefinitions>
       <RowDefinition Height="10*"></RowDefinition>                       
       <RowDefinition Height="*" ></RowDefinition>
  </Grid.RowDefinitions>

祝你好运。

于 2010-01-20T08:45:10.483 回答