У меня есть WPF DataGrid
, который содержит некоторые данные. Я хотел бы установить ширину столбцов таким образом, чтобы содержимое помещалось и никогда не обрезалось (вместо этого должна появиться горизонтальная полоса прокрутки). Кроме того, я хочу, чтобы DataGrid
заполнил все доступное место (я работаю с DockPanel
). Я использую следующий код (упрощенно):
<DataGrid ItemsSource="{Binding Table}">
<DataGrid.Columns>
<DataGridTextColumn MinWidth="100" Width="Auto" Header="Column 1" Binding="{Binding Property1}" />
<DataGridTextColumn MinWidth="200" Width="Auto" Header="Column 2" Binding="{Binding Property2}" />
</DataGrid.Columns>
</DataGrid>
Это явно не работает из коробки с Width="Auto"
, так как всегда выглядит примерно так:
Это, очевидно, выглядит безобразно. Я хотел бы выбрать целую строку или, что было бы намного лучше, столбцы, чтобы заполнить всю ширину, но, как видно, это не работает.
Если я вместо этого использую Width="*"
, содержимое столбцов обрезается, что для меня даже хуже.
Я нашел подобный вопрос здесь , и там был опубликован обходной путь. Это может работать, но я работаю с шаблоном MVVM, поэтому ItemsSource обновляется в ViewModel , и я не могу думать о способе сделать это оттуда, потому что я не могу получить доступ к свойству ActualWidth
DataGridColumn
. Кроме того, я хотел бы сделать это только в XAML, если это возможно.
Буду признателен за любую помощь. Спасибо!
Редактировать: Поскольку я до сих пор не знаю, что с этим делать, я начинаю маленькую награду. Я был бы очень рад предложению, что можно сделать с моей проблемой. Еще раз спасибо!
Редактировать 2: После ответа Сауса я снова подумал о вариантах. Проблема в том, что мне нужно обновлять свойства Width
и MinWidth
также во время работы приложения, а не только после загрузки окна. Я уже пытался сделать что-то вроде
column.Width = new DataGridLength(1, DataGridLengthUnitType.Auto);
column.MinWidth = column.ActualWidth;
column.Width = new DataGridLength(1, DataGridLengthUnitType.Star);
в некоторых случаях, которые запускаются при обновлении базового ItemsSource
DataGrid
. Однако это не работает, так как свойство ActualWidth
, похоже, не меняется после установки Width
на Auto
. Есть ли возможность как-то «перекрасить» его для обновления свойства ActualWidth
? Спасибо!