我在WPF数据网格中遇到列大小调整问题。
下面我有一个包含2个相同数据网格的示例。两者都有1个固定列(代码)和1个列设置填充*大小(描述)。它们都包含在布局网格中。
第一个数据网格包含在布局网格中的固定大小的列(WorkingGrid)中。它工作正常。固定的#34; Code" column是正确的宽度和* size"描述"一个填补剩余的空间。
第二个数据网格包含在布局网格中的自动调整大小的列(BrokenGrid)中。它具有与其他数据网格完全相同的设置,但忽略指定的所有datagrid列宽。它们似乎成为默认的最小大小,我认为它是20.奇怪的是,实际的数据网格本身会扩展以填充剩余的空间,所以其他所有控件和布局网格都位于BrokenGrid列中。 Datagrid列仍然被压缩到20px,包括固定的" Code"指定宽度为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>
在现实世界的例子中,网格中实际上有一个大的网格层次结构,但如果任何一个网格(直接或间接包含数据网格)在任何这些网格中,层次结构链的整个方向的宽度为auto,它只打破datagrid列。如果我修复或*这些列的宽度,datagrid列的行为正确。
我需要这个才能工作,所以我可以在网格中包含一组控件/数据网格,这些控件/数据网格都会自动扩展到最宽内容的宽度,但是集合中的所有数据网格都有一个填充数据网格的列。 s宽度(减去那里固定宽度的列)。
答案 0 :(得分:0)
第二个解决方案是为第二个DataGrid设置固定宽度
“*”和“自动”之间的区别:
在你的情况下,DataGrid告诉BrokenGrid,它需要42.0px(我想我可能是一些DataGrid bug,它应该至少需要100px)