У меня есть 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: После ответа saus я снова подумал о вариантах. Проблема в том, что мне нужно обновить свойства 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
? Спасибо!