【问题标题】:Grid/Datagrid not expanding into space网格/数据网格未扩展到空间
【发布时间】:2016-08-22 22:05:11
【问题描述】:

我有一个 4 行 2 包含数据网格的网格。我想根据 ShowPackages 复选框显示/隐藏一个数据网格。代码一切正常,并显示/隐藏数据网格。但是,问题在于第二行中的其他数据网格没有扩展到可用空间。

我了解这可能与定义 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>

【问题讨论】:

    标签: wpf layout visibility


    【解决方案1】:

    改为:

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

    【讨论】:

    • 不幸的是没有什么不同。
    【解决方案2】:

    第二个 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>
    

    【讨论】:

    • 这将随着数据网格的内容而增长。我基本上希望每个数据网格在检查时都是 1*。当设置为折叠时,另一个网格应变为 2* 并填充空间。
    • 像梦一样工作,我有一个工作是将高度绑定到虚拟机,但这在视图中是自包含的,因此是一个更好的选择。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-29
    • 2012-04-19
    相关资源
    最近更新 更多