以编程方式将datagrid列宽度更改为最长的单元素内容



我正在寻找示例如何编程方式将datagrid列宽度更改为自动,而忽略了列标题的文本(如果标头内容比列单元格中最长的内容更长)。

尝试使用属性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";
}

然后,列的宽度仅基于单元格内容,但不基于标题的长度。

最新更新