如何设置datagrid列以填充数据网格集以填充和布局自动调整的网格?

时间:2014-11-14 06:41:16

标签: wpf xaml datagrid

我在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宽度(减去那里固定宽度的列)。

1 个答案:

答案 0 :(得分:0)

如果可能对BrokenGrid使用Width =“*”。

第二个解决方案是为第二个DataGrid设置固定宽度


“*”和“自动”之间的区别:

  • “*” - 占据所有左侧的位置(无论列需要多少元素)
  • “自动” - 占据所有左侧或更少的位置(与列中需要的元素一样多)

在你的情况下,DataGrid告诉BrokenGrid,它需要42.0px(我想我可能是一些DataGrid bug,它应该至少需要100px)