【问题标题】:Open next ContextMenu in VisualTree when current Element has no focus当前元素没有焦点时在 VisualTree 中打开下一个 ContextMenu
【发布时间】:2011-12-07 21:48:08
【问题描述】:

我必须承认我找不到更好的标题。

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

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

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

        base.OnMouseDown(aArgs);
    }

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

我希望有人有一个想法。

【问题讨论】:

  • 如果你使用PreviewMouseDown而不是MouseDown会发生同样的事情吗?
  • @Rachel hm,没试过,但我会说不,因为我不处理鼠标事件。我希望,从这个鼠标处理返回会将事件传递给它下面的下一个控件。但我会试一试。

标签: c# wpf contextmenu


【解决方案1】:

对我有用的解决方案是如此简单,我想知道为什么我以前没有考虑过。 当控件被加载或元素失去焦点时,我只是将元素ContextMenu 存储在一个临时变量中,并将实际的ContextMenu 设为空,如果元素获得焦点,我从临时存储的 ContextMenu 中恢复它。这工作得非常好,并且可以很好地包装到附加的行为中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-27
    • 2022-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多