当前Element没有焦点时,在VisualTree中打开下一个ContextMenu

时间:2011-10-14 16:23:27

标签: c# wpf contextmenu

我必须承认我找不到更好的头衔。

我有一个Control,它在下半部分包含一个TextBox。这个控件有一个ContextMenu,当然TextBox有正常的文本编辑ContextMenu。 当我右键单击外部控件时,它的ContextMenu会打开,这就是我想要的。如果我右键单击文本框,它将获得焦点并打开文本编辑上下文菜单。但是当我右键单击文本框并且它没有键盘焦点时我不想设置焦点并且不想打开文本框上下文菜单,而是应该打开外部控件上下文菜单。

我唯一能做的就是在右键单击文本框时忽略文本框的上下文菜单。 (用于测试我创建了一个从TextBox派生的控件)

protected override void OnMouseDown(MouseButtonEventArgs aArgs)
    {
        if(aArgs.ChangedButton == MouseButton.Right)
        {
              return;
        }

        base.OnMouseDown(aArgs);
    }

即使这样做,文本框OnContextMenuOpening也会被触发,但无论处理是真还是假,都没有打开上下文菜单。

我希望有人有个主意。

1 个答案:

答案 0 :(得分:0)

对我有用的解决方案很简单,我想知道为什么我之前没想过。 当加载控件或元素失去焦点时,我只将元素ContextMenu存储在临时变量中,并将实际ContextMenu置空,如果元素获得焦点,我将从临时存储中恢复它上下文菜单。这非常好用,可以很好地包装成附加行为。