У меня есть WPF DataGrid (из пакета WPFToolkit), как показано ниже в моем приложении.
<Controls:DataGrid>
<Controls:DataGrid.Columns>
<Controls:DataGridTextColumn Width="1*" Binding="{Binding Path=Column1}" Header="Column 1" />
<Controls:DataGridTextColumn Width="1*" Binding="{Binding Path=Column2}" Header="Column 2" />
<Controls:DataGridTextColumn Width="1*" Binding="{Binding Path=Column3}" Header="Column 3" />
</Controls:DataGrid.Columns>
</Controls:DataGrid>
Ширина столбца должна автоматически настраиваться таким образом, чтобы все три столбца заполняли ширину сетки, поэтому я устанавливаю Width="1*"
для каждого столбца. С этим подходом я столкнулся с двумя проблемами.
- Когда
ItemsSource
DataGrid равен null
или пустой список, столбцы не будут иметь размер, соответствующий ширине сетки, но будут иметь фиксированную ширину около 20 пикселей. Пожалуйста, смотрите следующую картинку: http://img169.imageshack.us/img169/3139/initialcolumnwidth.png
- Когда я максимизирую окно приложения, столбцы не меняют свой размер, но сохраняют свой первоначальный размер. Смотрите следующую картинку:
http://img88.imageshack.us/img88/9362/columnwidthaftermaximiz.png
- При изменении размера окна приложения с помощью мыши размеры столбцов не изменяются.
Мне удалось решить проблему # 3, выведя подкласс из DataGrid и переопределив метод DataGrid OnRenderSizeChanged
следующим образом.
protected override void OnRenderSizeChanged(SizeChangedInfo sizeInfo)
{
base.OnRenderSizeChanged(sizeInfo);
foreach (var column in Columns)
{
var tmp = column.GetValue(DataGridColumn.WidthProperty);
column.ClearValue(DataGridColumn.WidthProperty);
column.SetValue(DataGridColumn.WidthProperty, tmp);
}
}
К сожалению, это не решает проблемы № 1 и № 2. Как мне от них избавиться?