【发布时间】:2015-01-11 12:18:10
【问题描述】:
我遇到了 WPF 数据网格中的列大小问题。
下面我有一个包含 2 个相等数据网格的示例。两者都有 1 个固定列(代码)和 1 个用 * 大小(描述)设置填充的列。它们都包含在布局网格中。
第一个数据网格包含在布局网格中固定大小的列 (WorkingGrid) 中。它工作正常。固定的“代码”列是正确的宽度,而 * 大小的“描述”列填充了剩余空间。
第二个数据网格包含在布局网格中自动调整大小的列 (BrokenGrid) 中。它具有与其他数据网格完全相同的设置,但忽略指定的所有数据网格列宽。它们似乎变成了默认的最小尺寸,我认为是 20。奇怪的是,实际的数据网格本身会扩展以填充剩余空间,位于 BrokenGrid 列中的所有其他控件和布局网格也是如此。 Datagrid 列仍然被压缩到 20 像素,包括指定宽度为 100 的固定“代码”列。
这是一个例子,大大简化了:
<Grid Attached:ReadOnlyOptions.IsReadOnly="{Binding IsReadOnly}">
<Grid.ColumnDefinitions>
<ColumnDefinition x:Name="WorkingGrid" Width="500"/>
<ColumnDefinition x:Name="BrokenGrid" Width="Auto"/>
</Grid.ColumnDefinitions>
<DataGrid Grid.Column="0" VerticalAlignment="Top" ItemsSource="{Binding AllResults}">
<DataGrid.Columns>
<DataGridTextColumn Header="code" Width="100" Binding="{Binding Path=Code}"/>
<DataGridTextColumn Header="description" Width="*" Binding="{Binding Path=Description}"/>
</DataGrid.Columns>
</DataGrid>
<DataGrid Grid.Column="1" VerticalAlignment="Top" ItemsSource="{Binding AllResults}">
<DataGrid.Columns>
<DataGridTextColumn Header="code" Width="100" Binding="{Binding Path=Code}"/>
<DataGridTextColumn Header="description" Width="*" Binding="{Binding Path=Description}"/>
</DataGrid.Columns>
</DataGrid>
</Grid>
在现实世界的示例中,网格中实际上存在很大的网格层次结构,但如果任何这些网格中的任何列(直接或间接包含数据网格)在层次结构链的整个过程中的宽度为自动,它只破坏数据网格列。如果我修复或 * 这些列的宽度,则数据网格列的行为正确。
我需要它来工作,这样我才能在一个网格中包含一组控件/数据网格,这些控件/数据网格都会自动扩展到最宽内容的宽度,但是该集中的所有数据网格都有一个填充该数据网格宽度的列(减去任何固定宽度的列都在那里)。
【问题讨论】: