我在Loaded事件上附加事件“DataGridColumnHeader_MouseRightButtonDown”以打开上下文菜单以显示列名。它工作正常。
private void dtaGrd_Loaded(object sender, RoutedEventArgs e)
{
columnHeaders = TreeHelper.GetVisualChildCollection<DataGridColumnHeader>(this);
foreach (DataGridColumnHeader columnHeader in columnHeaders)
{
columnHeader.MouseRightButtonDown += DataGridColumnHeader_MouseRightButtonDown;
}
}
但是当我取消选中列时,“名称”列的可见性将被折叠。再次,我检查了该列,将Visibility设置为“Visible”,然后“DataGridColumnHeader_MouseRightButtonDown”事件无效。
我的实施是错误的还是DataGridColumnHeader会在可见性发生变化时创建新实例?
是的,我发现当DataGridColumnHeader的visilbity被更改时,它的Loaded事件也会被触发。因此,我们必须在DataGridColumnHeader的加载事件上绑定处理程序。
我在Datagrid的哪个事件中知道DataGridColumnHeader已加载? 或者我必须附加DataGridColumnHeader Loaded Event?
答案 0 :(得分:1)
首先,您应该知道每次更改任何控件的可见性时,都会执行“Loaded”事件。
在您的情况下,您通过从DataGrid的可视集合中查找,为数据网格的列标题提供处理程序。
因此,一旦您将Visibility
列从Visible
翻转到Collapsed
,它就会从数据网格中卸载列,然后再次将其添加到Visible
时,它会加载提供给标题的默认样式。
以下是主要问题,即绑定到列标题的处理程序将无法找到列Reset
我的意见是尝试自定义命令,或者在管理可见性时管理附加/分离处理程序。
谢谢:)