2009-01-30 100 views
0

我將兩個控件放在網格列中,並使第一個或第二個控件可見。由於網格列的寬度設置爲auto,因此它將根據可見子節點的寬度調整自身的大小......除非使用網格分隔符更改列的寬度。
現在,如果我切換子控件的可見性,該列不會再將其自身重新調整爲其內容。我如何建立原始行爲?網格不再調整大小

謝謝!

編輯:
列的寬度屬性綁定到被設置爲GridLength.Auto再次(學分馬丁莫澤)的屬性數據,但史努比告訴我,這將被忽略。所以(新)問題是我可以如何設置列的寬度回到自動。

編輯:
一個例子

  • 啓動應用
  • 使用複選框來切換紅色面板的能見度
  • 第一列
  • 調整大小的
  • =>正確調整大小帶分離器的列
  • 選中/取消選中複選框
  • =>第一列的任何大小調整了

XAML:

<Window x:Class="WpfApplication1.Window1" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Window1" Height="300" 
     Width="300"> 
    <Window.Resources> 
     <BooleanToVisibilityConverter x:Key="CONV_KEY"></BooleanToVisibilityConverter> 
    </Window.Resources> 
    <Grid ShowGridLines="True"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="Auto"></ColumnDefinition> 
      <ColumnDefinition Width="Auto"></ColumnDefinition> 
      <ColumnDefinition Width="Auto"></ColumnDefinition> 
     </Grid.ColumnDefinitions> 
     <DockPanel Grid.Column="0" Width="100" Background="Red" 
       Visibility="{Binding ElementName=_checkBox,Path=IsChecked,Converter={StaticResource CONV_KEY}}"> 
     </DockPanel> 
     <DockPanel Grid.Column="0" Width="10" Background="Green" HorizontalAlignment="Left"></DockPanel> 
     <GridSplitter Grid.Column="1" Width="10" ResizeBehavior="PreviousAndNext"></GridSplitter> 
     <CheckBox x:Name="_checkBox" Grid.Column="3" VerticalAlignment="Top">Toggle</CheckBox> 
    </Grid> 
</Window> 

回答

1

沒有你嘗試重新設置columndefinition到GridLength.Auto的寬度,當你需要做的呢?

0

這是一個相當黑客,但嘗試將寬度設置爲一些固定值,然後回到自動,這應該引發一個變化,這個值不應該被忽略,也許它的工作...