2017-02-16 15 views
0

私は以下のwpfコードを持っています。スプリッタ移動後にWpfグリッドのサイズ変更が機能しない

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

    <Grid Grid.Row="0"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="*"/> 
      <ColumnDefinition Width="5"/> 
      <ColumnDefinition Width="Auto"/> 
     </Grid.ColumnDefinitions> 

     <Grid Grid.Column="0"> 
      <Grid.Style> 
       <Style TargetType="Grid"> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding ElementName=toggleButtonShowGeneratedCode, Path=IsChecked}" Value="false"> 
          <Setter Property="Width" Value="Auto"/> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </Grid.Style> 

      <Button Content="Button 1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/> 
     </Grid> 

     <GridSplitter Grid.Column="1" VerticalAlignment="Stretch" Width="5" ResizeDirection="Columns" ResizeBehavior="PreviousAndNext"/> 

     <Grid Grid.Column="2"> 
      <Grid.Style> 
       <Style TargetType="Grid"> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding ElementName=toggleButtonShowGeneratedCode, Path=IsChecked}" Value="false"> 
          <Setter Property="Visibility" Value="Collapsed"/> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </Grid.Style> 

      <Button Content="Button 2" VerticalAlignment="Stretch" HorizontalAlignment="Stretch"/> 
     </Grid> 
    </Grid> 

    <ToggleButton Grid.Row="1" Name="toggleButtonShowGeneratedCode" Width="50" Content="Toggle"/> 
</Grid> 

トグルボタンは、ボタン2を折りたたんで展開すると想定されています。ボタン2が折りたたまれているときは、ボタン1のスペースが必要です。

これは起動時に機能しますが、スプリッタを移動した後は動作を停止します。

答えて

0

GridSplitterを移動すると、前と次の列の幅が強制的に変更されます。それらはもはや*およびAutoと宣言されていませんが、*およびN(Nはいくつかの数字です)になります。そのため、コンテンツ#2が折りたたまれても列#2は折りたたまれません。

提案ソリューション:私はからそれにアクセスするために、グリッドの名前を追加して、いくつかのコードビハインドでAuto

<Grid Grid.Row="0" Name="ResizableGrid"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="*"/> 
     <ColumnDefinition Width="5"/> 
     <ColumnDefinition Width="Auto"/> 
    </Grid.ColumnDefinitions> 
    <!--...--> 
    <ToggleButton Grid.Row="1" Name="toggleButtonShowGeneratedCode" 
       Width="50" Content="Toggle" 
       Unchecked="toggleButtonShowGeneratedCode_Unchecked"/> 
private void toggleButtonShowGeneratedCode_Unchecked(object sender, RoutedEventArgs e) 
{ 
    ResizableGrid.ColumnDefinitions[2].Width = new GridLength(1, GridUnitType.Auto); 
} 

を(ビュービューの相互作用のための罰金)を、カラム#2の幅を復元ノートコード

+0

ありがとうございます! – Praboda

関連する問題