以编程方式将 DataGrid 列宽更改为单元格内容的最长大小

Programmatically change DataGrid column width to longest size of cell content

我正在寻找如何以编程方式将 DataGrid 列宽更改为自动同时忽略列 header 中的文本的示例(如果 header 内容长于列中最长的内容细胞)。

尝试使用 属性 sizeToCells(来自 MSDN)

单列像这样:

grid.Columns[0].Width = new DataGridLength(1, DataGridLengthUnitType.SizeToCells); 

而不是像这样在 XAML 标记中设置列的 Header 属性:

<DataGrid x:Name="dg">
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding}" Header="some very long header some very long header  some very long header" />
        <DataGridTextColumn Binding="{Binding}" Header="short" />
    </DataGrid.Columns>
</DataGrid>

..您可以在 DataGrid 加载后以编程方式设置它:

<DataGrid x:Name="dg" Loaded="dg_Loaded">
    <DataGrid.Columns>
        <DataGridTextColumn Binding="{Binding}" />
        <DataGridTextColumn Binding="{Binding}" Header="short" />
    </DataGrid.Columns>
</DataGrid>

private void dg_Loaded(object sender, RoutedEventArgs e)
{
    dg.Columns[0].Width = new DataGridLength(dg.Columns[0].ActualWidth);
    dg.Columns[0].Header = "some very long header some very long header  some very long header";
}

然后列的宽度将仅基于单元格内容而不是基于header的长度。