WPF:当第二列内容折叠时,DataGrid 不会扩展以占据 Grid 的两列

Posted

技术标签:

【中文标题】WPF:当第二列内容折叠时,DataGrid 不会扩展以占据 Grid 的两列【英文标题】:WPF: DataGrid not expanding to occupy both columns of Grid when second column content is collapsed 【发布时间】:2020-06-28 09:07:10 【问题描述】:

我有一个有两列的网格,第一列有一个 DataGrid,第二列有另一个网格。当第二个网格的可见性设置为“折叠”时,我希望 DataGrid 能够扩展以占据全部空间。 以下是代码sn-p:

<Grid Grid.Row="1" HorizontalAlignment="Left" Width="344">
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*"/>
        <ColumnDefinition Width="24"/>
    </Grid.ColumnDefinitions>
    <DataGrid MaxWidth="344" Grid.Column="0" SelectedItem="Binding Dummy, Mode=TwoWay" Background="DarkGray"
              ItemsSource="Binding DummyList" SelectionMode="Single" AutoGenerateColumns="False" RowHeaderWidth="0" GridLinesVisibility="All">

        <DataGrid.Columns>
            <DataGridTemplateColumn Header="" Width="35">
                <DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTemplateColumn Header="" Width="*" MinWidth="85">
                <DataGridTemplateColumn.CellTemplate>

                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTemplateColumn Header="" Width="*" MinWidth="90" >
                <DataGridTemplateColumn.CellTemplate>

                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTemplateColumn Header="" Width="*" MinWidth="80">
                <DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
            <DataGridTemplateColumn Header="" Width="*" MaxWidth="25" Visibility="Collapsed">
                <DataGridTemplateColumn.CellTemplate>

                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>

    <Grid Grid.Column="1" Margin="0,1,0,0" Background="DarkGray" Visibility="Collpased">
        <Grid.RowDefinitions>
            <RowDefinition Height="25"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
    </Grid>
</Grid>

即使我将第二列中 Grid 的可见性设置为折叠,DataGrid 也不会占用整个空间,第二列仍然为空。我是否有错误的期望,如果是/否,我该如何实现这种行为?

【问题讨论】:

【参考方案1】:

第二列具有固定宽度&lt;ColumnDefinition Width="24"/&gt;,即使它不包含子元素(如果它们被折叠)。

将宽度更改为自动&lt;ColumnDefinition Width="Auto"/&gt; 并为子网格提供必要的宽度:&lt;Grid Grid.Column="1" Width="24"。然后列将对内容可见性做出反应

【讨论】:

它成功了,我错过了 Auto 的概念......非常感谢!

以上是关于WPF:当第二列内容折叠时,DataGrid 不会扩展以占据 Grid 的两列的主要内容,如果未能解决你的问题,请参考以下文章

WPF DataGrid在同一列中的不同控件 - 不正确的绑定

当第二列和第三列与数字模式匹配时打印整行

wpf 我已经把datagrid 分组了 如何 实现折叠 和 展开

WPF DataGrid:滚动时减小列宽以适合其内容

MapReduce自定义分组Group

Wpf DataGrid 绑定Dynamic (二维数据表)