我正在尝试为项目中的每个列标题添加个性化和单独的ContextMenus,以便当用户右键单击标题时,会出现与该标题相关的复选框菜单,允许他们过滤数据。
有几个问题:我正在开发的项目需要为.NET 4.0开发,因此我无法访问引入的DataGridColumnHeader
类。 .NET 4.5。此外,所有这些都需要以编程方式完成,不允许XML,因为所有列数据都是在运行时确定的。
我找到了一个使用XML完成的similar Stack question,并且我已经成功地用XML格式复制了它,但我是WPF的新手并且还没有能够重现以编程方式。
我已经在下面粘贴了一些C#代码,我认为应该进行设置。
/// <summary>
/// Function that adds all of the columns for the default setup
/// </summary>
public void MakeAllColumns()
{
for (int i = 0; i < AllColumnDisplayNames.Length; i++)
{
DataGridTextColumn col = new DataGridTextColumn();
col.Header = AllColumnDisplayNames[i];
col.Binding = new Binding(AllColumnBindings[i]);
canGrid.Columns.Add(col);
// code for addding context menus will most likely go here
}
}
答案 0 :(得分:0)
DataGridColumns不是FrameworkElements,因此它们没有ContextMenu。既然你想要在代码中为代码指定一个数据模板,那么所有这一切都很痛苦(恕我直言)。您可以尝试传入FrameworkElement作为列的Header对象,并在该框架元素上设置上下文菜单。
示例:
//...
DataGridTextColumn col = new DataGridTextColumn();
//...
TextBlock txt = new TextBlock() { Text = AllColumnDisplayNames[i] };
txt.ContextMenu = new ContextMenu(); // Build your context menu here.
col.Header = txt;
//...