当当前元素没有焦点时,在VisualTree中打开下一个上下文菜单
本文关键字:下一个 菜单 上下文 VisualTree 元素 焦点 | 更新日期: 2023-09-27 18:11:29
我必须承认我找不到更好的标题了。
我有一个控件,它的下部包含一个文本框。这个控件有一个上下文菜单,当然,文本框也有它的常规文本编辑ContextMenu。当我右键单击外部控件时,它的ContextMenu打开,这就是我想要的。如果我右键单击文本框,它得到焦点,并打开它的文本编辑上下文菜单。但是当我右键单击文本框时,它没有键盘焦点,我不想要焦点设置,也不想打开文本框上下文菜单,相反,它应该打开外部控制上下文菜单。
我唯一管理的是忽略文本框的上下文菜单,当右键单击文本框。(为了测试,我创建了一个控件派生自TextBox)
protected override void OnMouseDown(MouseButtonEventArgs aArgs)
{
if(aArgs.ChangedButton == MouseButton.Right)
{
return;
}
base.OnMouseDown(aArgs);
}
即使这样做,文本框OnContextMenuOpening
被触发,但无论处理是真还是假,都不会打开上下文菜单。
我希望有人有主意。
适合我的解决方案是如此简单,我想知道为什么我之前没有想到它。当控件加载或元素失去焦点时,我只是将元素ContextMenu
存储在临时变量中,并为实际的ContextMenu
null,如果元素获得焦点,我将从临时存储的ContextMenu中恢复它。这工作得非常好,可以很好地包装到附加的行为中。