如何从C#代码中扩展DataGrid列?

时间:2012-01-24 14:45:11

标签: c# wpf datagrid

我在C#代码中创建了WPF DataGrid的列。我希望其中一列自动拉伸到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。我会先进行一些进一步的测试......

编辑3
好吧,DataGridScrollViewer内的内容不起作用...当我删除ScrollViewer时,就像 user24601 那样工作了。

2 个答案:

答案 0 :(得分:11)

你实际上在那里使用了一个名为DataGridLength的东西。

尝试这样的事情:

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

这将在这两列之间将剩余空间分成80%/ 20%。

答案 1 :(得分:0)

试试这个

DataGrid1.Width = double.NaN;