Wpf 如何在要填充的datagrid集合中设置要填充的datagrid列,以及自动调整大小的布局网格?

Wpf 如何在要填充的datagrid集合中设置要填充的datagrid列,以及自动调整大小的布局网格?,wpf,xaml,datagrid,Wpf,Xaml,Datagrid,我对WPF datagrid中的列大小有问题 下面我有一个例子,其中有两个相等的数据网格。两者都有1个固定列代码和1个列设置填充*大小说明。它们都包含在布置格线中 第一个数据网格包含在布局网格中固定大小的列工作网格中。它很好用。fixed Code列的宽度正确,而*Size Description one填充了剩余的空间 第二个datagrid包含在布局网格中自动调整大小的列BrokenGrid中。它的设置与另一个datagrid完全相同,但会忽略指定的所有datagrid列宽。它们似乎成为默认

我对WPF datagrid中的列大小有问题

下面我有一个例子,其中有两个相等的数据网格。两者都有1个固定列代码和1个列设置填充*大小说明。它们都包含在布置格线中

第一个数据网格包含在布局网格中固定大小的列工作网格中。它很好用。fixed Code列的宽度正确,而*Size Description one填充了剩余的空间

第二个datagrid包含在布局网格中自动调整大小的列BrokenGrid中。它的设置与另一个datagrid完全相同,但会忽略指定的所有datagrid列宽。它们似乎成为默认的最小尺寸,我认为是20。奇怪的是,实际的datagrid本身会扩展以填充剩余空间,BrokenGrid列中的所有其他控件和布局网格也是如此。Datagrid列仍然压缩到20px,包括指定宽度为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>
在现实世界的示例中,网格中实际上有一个很大的网格层次结构,但是如果在层次结构链的整个过程中,直接或间接包含datagrid的任何列的宽度为auto,则只会断开datagrid列。如果我固定或*这些列的宽度,则datagrid列的行为正确

我需要这样做,这样我就可以在一个网格中包含一组控件/数据网格,所有控件/数据网格都自动扩展到最宽内容的宽度,但该集合中的所有数据网格都有一个列填充该数据网格的宽度减去其中任何固定宽度的列。

如果可能,请为BrokenGrid使用width=*。 第二个解决方案是为第二个DataGrid设置固定宽度

*和自动之间的区别:

*-无论列中需要多少元素,都将全部保留 自动-根据列中元素的需要,将所有位置保留或减少
在你的情况下,DataGrid告诉BrokenGrid,它需要42.0px,我想我可能是DataGrid的一些bug,它应该需要至少100px,谢谢Tomasz。不幸的是,将BrokenGrid的宽度设置为*会导致列崩溃。然而,网格按照预期的所有其他内容正确地调整自身大小。如果我固定网格的宽度,它的大小将不再与内容的宽度一致。不过,这是我目前采用的方法。