我有一个带有一些列的DataGrid'宽度设置为" auto"。现在我正在更改FontSize。当我使FontSize变大时,列会变宽,但是当我使FontSize变小时,列宽不会根据FontSize缩小。
<DataGridTextColumn ....
Width="auto"
....
有没有办法强制DataGrid重新计算所有&#34; auto&#34;和&#34; *&#34;值?
答案 0 :(得分:1)
将最简单的方法设置为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];
}
}
答案 1 :(得分:1)
重新设定列的宽度:
foreach (var dataGridColumn in dg.Columns)
{
dataGridColumn.Width = new DataGridLength(20);
dataGridColumn.Width = new DataGridLength();
}