自动调整WPF中的窗口内容

时间:2010-01-20 01:26:36

标签: c# wpf autosize

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


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

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

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

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

6 个答案:

答案 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)

不确定为什么每个人都说堆栈面板不会动态调整大小。他们像网格一样处理调整大小。只需确保设置Horizo​​ntalAlignment =“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>

祝你好运。