我是WPF新手但是我有一些开发方面的东西。我已经尝试了很多选项让它工作但是我很难过......
我想要一个包含两列的简单DataGrid; "名称"和"伯爵"。
我想"姓名"宽度*(剩余可用)和"计数"将宽度50锁定在右边缘。
我希望这个,因为这个DataGrid控件所在的Grid单元格是可调整大小的(DataGrid将Horizontal和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设置,因此在这种情况下不是一个选项。还是以某种方式?
这个让我疯了!有什么想法吗?
答案 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