2010-01-20 140 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,水平和垂直調整窗口的大小,使窗口內的所有控件均勻展開/收縮。