2010-01-20 137 views
3

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


的XAML代码是没有完全准备好了,但这里是一些要素:

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

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

    <ListView> 
    ... 
    </ListView> 
</DockPanel> 
+12

所有WPF问题的第一条规则“Post your XAML” – keithwarren7 2010-01-20 01:28:20

回答

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,它不能缩放。使用网格来代替,因为它可以缩放。

3

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

发布您的Xaml或答案是最好的,你会得到!

0

那么,你必须有一些容器来控制你的控件,对吧?如果你使用的是Canvas,并且只是将你的控件定位在那里,那么你几乎不会运气。这对于缩放接口并不是很好。

但是,有各种各样的容器控件,它们会以某种方式布置您放入它们的任何东西。如果使用得当,它们也可以通过调整窗口进行缩放。网格非常灵活,但StackPanel和DockPanel有时也非常方便。

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

2

避免使用StackPanels,它们不能动态调整大小。

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

0

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

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

祝你好运。

1

不确定为什么每个人都在说stackpanels不会动态调整大小。他们像网格一样处理大小调整。只要确保设置了Horizo​​ntalAlignment =“Stretch”(和/或VerticalAlignment)并且内容将展开以填充堆栈面板大小。我目前正在使用一个包含许多嵌套堆叠面板的UI,水平和垂直调整窗口的大小,使窗口内的所有控件均匀展开/收缩。