[英]Sizing problem with WPF's grid layout
這是我的問題。 我連續有三個控件(它們捕獲了人們的名字)。 控件本身將自身調整為適當的大小。 我想將這三個控件水平間隔以沿直線均勻間隔。 這一點很簡單:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
</Grid.RowDefinitions>
<Border Grid.Row="0" Grid.Column="0" BorderThickness="2" Height="50" Width="50" />
<Border Grid.Row="0" Grid.Column="1" BorderThickness="2" Height="50" Width="50" />
<Border Grid.Row="0" Grid.Column="2" BorderThickness="2" Height="50" Width="50" />
</Grid>
當我想隱藏第二個條目時,問題就來了。 如果將其可見性設置為“折疊”,則我希望其余兩個項目等距分布。 不會發生這種情況,中間列保持在網格寬度的1/3。
我嘗試了網格和堆棧面板的各種組合,但是找不到解決方法。 我正在嘗試找到一種相當通用的解決方案,因為這種情況可能會再次出現。
從外觀上看,它應該像:
+----------------------------------------------+
| +------------+ +------------+ +------------+ |
| |aardvark | |beatle | |cat | |
| +------------+ +------------+ +------------+ |
+----------------------------------------------+
請注意,內部框使用width = *將其大小設置為1/3,但框內的控件未拉伸。
如果全部更改3,您是否仍然遇到相同的問題:
<ColumnDefinition Width="Auto" />
供參考: http : //msdn.microsoft.com/zh-cn/library/system.windows.controls.columndefinition.width%28VS.96%29.aspx
而不是設置可見性,而是將ColumnDefinition
的Width設置為0
假設網格的名稱是grid1,則
grid1.ColumnDefinitions[1].Width = new GridLength(0);
這就是我最終解決問題的方式。
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="{Binding IsVisible, Converter={StaticResource collapsed2auto}}"/>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition />
</Grid.RowDefinitions>
<Border Grid.Row="0" Grid.Column="0" BorderThickness="2" Height="50" Width="50" />
<Border Grid.Row="0" Grid.Column="1" BorderThickness="2" Height="50" Width="50" Visibility="{Binding Path=IsVisible}"/>
<Border Grid.Row="0" Grid.Column="2" BorderThickness="2" Height="50" Width="50" />
</Grid>
感覺像是最少的解決方案。 基本上,它具有與禁用控件相同的屬性,通過轉換器將其轉換為“ *”或“ auto”,並將其分配給列定義。 似乎可以工作。
我還考慮過要創建一個觸發器來執行此操作,但這聽起來更干凈。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.