DevExpress GridControl问题:右键GridColumn时主Popup菜单与列菜单同时弹出
解决右键GridColumn时同时弹出两个菜单的问题
这种情况一般是GridColumn(如WPF DataGrid列头)自身配置了右键菜单,同时其父容器(比如DataGrid)也设置了全局右键菜单,右键触发时两个菜单都被激活导致的。
解决方案:
移除父容器全局右键菜单
如果不需要父容器的全局右键菜单,直接删除其ContextMenu配置即可,以WPF DataGrid为例:<!-- 移除DataGrid上的ContextMenu属性 --> <DataGrid ... > <!-- 删除原有的<ContextMenu>节点 --> </DataGrid>阻止事件冒泡
在GridColumn列头的右键事件中,标记事件已处理,避免触发父容器的菜单:private void ColumnHeader_RightClick(object sender, MouseButtonEventArgs e) { var header = sender as DataGridColumnHeader; header.ContextMenu.IsOpen = true; // 阻止事件向上传递,避免触发父容器菜单 e.Handled = true; }对应XAML绑定事件:
<DataGridColumnHeader MouseRightButtonDown="ColumnHeader_RightClick"> <DataGridColumnHeader.ContextMenu> <!-- 列头菜单内容 --> </DataGridColumnHeader.ContextMenu> </DataGridColumnHeader>样式统一控制
通过Style为列头单独配置菜单并拦截右键事件:<Style TargetType="DataGridColumnHeader"> <Setter Property="ContextMenu"> <Setter.Value> <ContextMenu> <!-- 列头菜单选项 --> </ContextMenu> </Setter.Value> </Setter> <EventSetter Event="MouseRightButtonDown" Handler="ColumnHeader_RightClick"/> </Style>
问题说明
右键点击GridColumn列头时,该列头的专属菜单会与主Popup菜单一同弹出,两个菜单在界面上重叠显示。
内容的提问来源于stack exchange,提问作者SALMAN ABOHOLIQAH
相关产品推荐
相关产品推荐

