自动生成时WPF DataGrid自定义标题宽度

时间:2018-02-14 11:56:01

标签: .net wpf datagrid

我是WPF新手但是我有一些开发方面的东西。我已经尝试了很多选项让它工作但是我很难过......

我想要一个包含两列的简单DataGrid; "名称"和"伯爵"。

我想"姓名"宽度*(剩余可用)和"计数"将宽度50锁定在右边缘。

我希望这个,因为这个DataGrid控件所在的Grid单元格是可调整大小的(DataGrid将Horizo​​ntal和Vertical Alignment都设置为" Stretch")。在网格单元格调整大小,我想要"名称"左侧的列展开或收缩以填充50宽的剩余可用空间" Count"右栏。

通过ItemSource使用自定义SortableBindingList< MyListObj>填充DataGrid。列表MyListObj有两个字符串道具"名称"和"伯爵"。

如果我尝试在XAML中定义列(< Grid.ColumnDefinitions>),那么当我设置ItemSource时,我最终会得到四列。

我在XAML中尝试过资源,样式和模板(这里找到类似问题的各种答案和示例,代码项目和MSDN),并在代码中明确设置值。

我最接近的是在加载DataGrid时设置代码:

MyDataGrid.Loaded += (s, o) =>
{
  if (MyDataGrid.Columns.Count() == 2)
  {
    MyDataGrid.Columns[0].Width = new DataGridLength(1,DataGridLengthUnitType.Star);
    MyDataGrid.Columns[1].Width = 50;
  }
};

在这种情况下,我左手调整大小"姓名"专栏和我的权利"伯爵"列已锁定并已修复,但我在两列之间获得了50px的空间(虚拟第3列?我不知道来自哪里!)。

如果我在XAML中设置标题和数据,这非常简单,但当然,数据是动态的并通过ItemSource设置,因此在这种情况下不是一个选项。还是以某种方式?

这个让我疯了!有什么想法吗?

1 个答案:

答案 0 :(得分:2)

处理AutoGeneratedColumns事件:

private void dg_AutoGeneratedColumns(object sender, EventArgs e)
{
    dg.Columns[0].Width = new DataGridLength(1, DataGridLengthUnitType.Star);
    dg.Columns[1].Width = new DataGridLength(50, DataGridLengthUnitType.Pixel);
}

<强> XAML:

<DataGrid x:Name="dg" AutoGeneratedColumns="dg_AutoGeneratedColumns" />

或者将AutoGenerateColumns的{​​{1}}属性设置为DataGrid,并在XAML标记中明确定义列。

false