2016-04-28 35 views
0

我有一個4行2的網格包含datagrids。我想顯示/隱藏一個基於ShowPackages複選框的數據網格。代碼全部正常工作,顯示/隱藏數據網格。但是,問題在於第二行中的其他數據網格沒有擴展到可用空間中。Grid/Datagrid沒有擴展到空間

我明白這可能會與定義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.RowDefinitions> 
    <RowDefinition Height="Auto"/> 
    <RowDefinition Height="*"/> 
    <RowDefinition Height="auto"/> 
    <RowDefinition Height="Auto"/> 
</Grid.RowDefinitions> 

編輯。這種方法應該可行

<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

像夢一樣工作,我有圍繞高度綁定到虛擬機的工作,但這是自包含在視圖中,所以這是一個更好的選擇。謝謝! –

0

更改爲:

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

不幸的是沒有什麼不同。 –