Как сделать столбец DataGrid растянутым из кода C#?

Я создаю столбцы WPF DataGrid в моем коде C#. Я хочу, чтобы один из столбцов растянулся до ширины DataGrid автоматически. В XAML я бы установил Width="*". Как это сделать в коде?

редактировать
Некоторые из ответов, похоже, приводят меня к правильному решению, но я чувствую, что мне нужно немного подробнее рассказать о том, что я пытаюсь сделать:

Я на самом деле получаю новый класс из DataGrid. В своем конструкторе я добавляю четыре столбца типа что:

this.IsReadOnly = true;
this.AutoGenerateColumns = false;
this.ItemsSource = m_dataSource;

DataGridTextColumn anColumn = new DataGridTextColumn() { Header = "Col1", Binding = new Binding("B1") };
DataGridTextColumn tpColumn = new DataGridTextColumn() { Header = "Col2", Binding = new Binding("B2") };
DataGridTextColumn txColumn = new DataGridTextColumn() { Header = "Col3", Binding = new Binding("B3") };
DataGridTextColumn mdColumn = new DataGridTextColumn() { Header = "Col4", Binding = new Binding("B4") };

this.Columns.Add(anColumn);
this.Columns.Add(tpColumn);
this.Columns.Add(txColumn);
this.Columns.Add(mdColumn);

Я попытался установить ширину последнего столбца как user24601 предлагается:

mdColumn.Width = new DataGridLength(0.5, DataGridLengthUnitType.Star);

но это создает столбец, который настолько широк, что я могу прокручивать и прокручивать на очень долгое время... Та же проблема, когда я использую 0.1 или даже меньших значений.

мне кажется, что я делаю это не в том месте?

Изменить 2
Хорошо, у меня может быть проблема, потому что я на самом деле добавляю это ScrollViewer. Сначала я проведу еще несколько тестов...

EDIT 3
Ну, вещи не работают, когда есть DataGrid внутри ScrollViewer... Когда я удаляю ScrollViewer, все работает как user24601 сказал.

2 ответов


вы на самом деле используете что-то под названием DataGridLength там.

попробуйте что-то вроде этого:

Grid.ColumnDefinitions[0].Width = new DataGridLength(0.2, DataGridLengthUnitType.Star);
Grid.ColumnDefinitions[1].Width = new DataGridLength(0.8, DataGridLengthUnitType.Star);

это разделит оставшееся пространство 80% / 20% между этими двумя столбцами.


попробуй такое

DataGrid1.Width = double.NaN;