簡體   English   中英

WPF的網格布局的大小問題

[英]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.

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