2016-04-28 8 views
0

グリッドに4行2のデータグリッドがあります。 ShowPackagesチェックボックスに基づいて、1つのDataGridを表示/非表示したい。コードはすべて正しく動作し、データグリッドを表示/非表示しています。しかし、問題は、2行目の他のデータグリッドが利用可能な領域に拡張されていないことです。グリッド/データグリッドが空白に展開していません

これは、潜在的には、4行とこれらすべてのレンダリングを指定されたスペースに定義することであると理解しています。どのように機能を達成するには?

<Grid> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition/> 
      <RowDefinition/> 
      <RowDefinition Height="Auto"/> 
     </Grid.RowDefinitions> 
     <StackPanel Orientation="Horizontal"> 
      <CheckBox Content="Show Completed" IsChecked="{Binding ShowCompletedCommand}" Margin="3"/> 
      <CheckBox Content="Show Packages" IsChecked="{Binding ShowPackages}" Margin="3"/> 
     </StackPanel>  
     <DataGrid Grid.Row="1" ItemsSource="{Binding WorkOrders}" SelectedValue="{Binding SelectedWorkOrder}" AutoGenerateColumns="True"/>   
     <DataGrid Grid.Row="2" Visibility="{Binding ShowPackages, Converter={StaticResource BoolToVis}}" ItemsSource="{Binding Packages}" /> 
     <Grid Grid.Row="3"> 
      <StackPanel Orientation="Horizontal"> 
       <Button Command="{Binding RefreshCommand}" Content="Refresh"/> 
       <Button Command="{Binding CancelCommand}" Content="Cancel"/> 
      </StackPanel> 
    </Grid> 

答えて

1

は、第二のRowDefinitionの高さは自動でなければなりません。このアプローチはうまくいくはずです

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="*"/> 
     <RowDefinition> 
      <RowDefinition.Style> 
       <Style TargetType="RowDefinition"> 
        <Setter Property="Height" Value="*"></Setter> 
        <Style.Triggers> 
         <DataTrigger Binding="{Binding ElementName=PackagesCB, Path=IsChecked}" Value="False"> 
          <Setter Property="Height" Value="0" /> 
         </DataTrigger> 
        </Style.Triggers> 
       </Style> 
      </RowDefinition.Style> 
     </RowDefinition> 
     <RowDefinition Height="Auto"/> 
    </Grid.RowDefinitions> 
    <StackPanel Orientation="Horizontal"> 
     <CheckBox Content="Show Completed" IsChecked="{Binding ShowCompletedCommand}" Margin="3"/> 
     <CheckBox x:Name="PackagesCB" Content="Show Packages" IsChecked="{Binding ShowPackages}" Margin="3"/> 
    </StackPanel> 
    <DataGrid Grid.Row="1" ItemsSource="{Binding WorkOrders}" SelectedValue="{Binding SelectedWorkOrder}" AutoGenerateColumns="True"/> 
    <DataGrid Grid.Row="2" ItemsSource="{Binding Packages}"/> 
    <Grid Grid.Row="3"> 
     <StackPanel Orientation="Horizontal"> 
      <Button Command="{Binding RefreshCommand}" Content="Refresh"/> 
      <Button Command="{Binding CancelCommand}" Content="Cancel"/> 
     </StackPanel> 
    </Grid> 
</Grid> 
+0

これは、データグリッドのコンテンツとともに増加します。私は基本的に、各データグリッドがチェックされたら1 *にすることを望んでいました。折りたたみに設定されている場合、もう一方のグリッドは2 *になり、スペースを埋めるはずです。 –

+1

答えを更新しました。コンバータは必要ありません。 – Amine

+0

夢のように動作しますが、高さをVMにバインドする作業がありましたが、これはビューにすべて含まれているため、はるかに優れたオプションです。ありがとう! –

0

に変更:

<Grid.RowDefinitions> 
    <RowDefinition Height="Auto"/> 
    <RowDefinition Height="*"/> 
    <RowDefinition Height="auto"/> 
    <RowDefinition Height="Auto"/> 
</Grid.RowDefinitions> 

編集:

<Grid.RowDefinitions> 
     <RowDefinition Height="Auto"/> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="*"/> 
     <RowDefinition Height="Auto"/> 
</Grid.RowDefinitions> 
+0

残念ながら違いはありません。 –

関連する問題