FontSize更改后自动WPF DataGrid

时间:2016-09-10 22:16:24

标签: c# .net wpf datagrid

我有一个带有一些列的DataGrid'宽度设置为" auto"。现在我正在更改FontSize。当我使FontSize变大时,列会变宽,但是当我使FontSize变小时,列宽不会根据FontSize缩小。

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

有没有办法强制DataGrid重新计算所有&#34; auto&#34;和&#34; *&#34;值?

2 个答案:

答案 0 :(得分:1)

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

// 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];
        }
    }

答案 1 :(得分:1)

重新设定列的宽度:

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