Как сделать столбец 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% между этими двумя столбцами.