簡體   English   中英

自動調整WPF中的窗口內容

[英]Auto resize window content in WPF

在調試我的WPF程序時,我注意到當窗口是設置大小時,控制看起來很好。 但是當窗口最大化時,內容位於相同的位置,就好像窗口沒有調整大小一樣。 我想要它,以便內容和窗口按比例調整大小。 我怎樣才能做到這一點? 對不起,如果這是一個noobish問題,但我在WPF時代有點新。


XAML代碼還沒有完全准備好,但這里有一些元素:

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

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

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

通常,這是因為維度值是靜態設置的,而不是動態設置的。 這是靜態方法:

<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,它不能擴展。 改為使用網格,因為它可以縮放。

通常這是因為內容托管在一個容器中,該容器具有明確設置的寬度和高度 - 例如Grid。

發布您的Xaml或答案是您將獲得的最佳答案!

避免使用StackPanel,它們不能動態調整大小。

理想情況下,如果您希望按比例調整大小,則應使用網格並指定百分比。

不知道為什么每個人都說堆棧面板沒有動態調整大小。 他們像網格一樣處理調整大小。 只需確保設置Horizo​​ntalAlignment =“Stretch”(和/或VerticalAlignment),內容將展開以填充stackpanel大小。 我目前正在使用由許多嵌套堆棧面板組成的UI,水平和垂直調整窗口可以在窗口內同等地擴展/收縮所有控件。

好吧,你必須為你的控件裝一些容器,對嗎? 如果你正在使用Canvas並且只是把你的控件放在那里,那你幾乎沒有運氣; 這對縮放界面來說不是很好。

但是,有各種容器控件可以以某種方式布置您放入其中的任何內容。 如果使用得當,它們也可以通過調整大小窗口進行縮放。 Grid非常靈活,但StackPanel和DockPanel也非常方便。

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

使用具有“Number *”概念設置的Widht和Height屬性的WPF網格。 例如, 寬度=“0.6 *” ,其不是絕對高度,而是與容器成比例關系。 通常,如果您想要可調整大小的內容,請盡可能避免使用固定大小的屬性。

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

祝好運。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM