используйте это для любого столбца, который вы хотите вписать в его содержимое: Width = "SizeToCells"
я есть WPFDataGrid
который содержит некоторые данные. Я хотел бы установить ширину столбцов таким образом, чтобы содержимое помещалось и никогда не обрезалось (вместо этого должна появиться горизонтальная полоса прокрутки). Кроме того, я хочу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
свойство обновлено? Спасибо!