更改字体大小后WPF数据网格自动

本文关键字:数据网 数据 网格 WPF 字体 | 更新日期: 2023-09-27 18:06:26

我有一个DataGrid与一些列的宽度设置为"auto"。现在我要改变字体大小。当我把FontSize调大时,列会变宽,但当我把FontSize调小时,列的宽度不会根据FontSize缩小。

<DataGridTextColumn ....
                    Width="auto" 
                    ....

是否有一种方法可以强制DataGrid重新计算所有的"auto"answers"*"值?

更改字体大小后WPF数据网格自动

重新设置列的宽度:

 foreach (var dataGridColumn in dg.Columns)
            {
                dataGridColumn.Width = new DataGridLength(20);
                dataGridColumn.Width = new DataGridLength();
            }

最简单的方法是将ItemsSource设置为null,然后重新分配。例如,

// This method works for AutoGenerateColumns = true
   Dgrd.FontSize = 8;
   Dgrd.ItemsSource = null;
   Dgrd.ItemsSource = ...;

一般的方法是存储列的旧宽度值,然后使用它们来恢复。例如,

    Dictionary<DataGridColumn, double> columns = new Dictionary<DataGridColumn, double>();
    private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        Dgrd.FontSize = 20;
        columns.Clear();
        foreach (DataGridColumn col in Dgrd.Columns)
        {
            columns.Add(col, col.ActualWidth);
        }
    }
    private void Button_Click_2(object sender, RoutedEventArgs e)
    {
        Dgrd.FontSize = 8;            
        foreach (DataGridColumn col in Dgrd.Columns)
        {
            col.Width = columns[col];
        }
    }