【问题标题】:MouseLeave triggers when ContextMenu opens当 ContextMenu 打开时触发 MouseLeave
【发布时间】:2017-03-02 08:44:50
【问题描述】:

我的应用程序具有AlwaysOnTop 行为,我希望它在鼠标离开时失去焦点。有一些带有上下文菜单的按钮。问题是ContextMenu 打开MouseLeave 事件自动触发的那一刻,即使鼠标仍在我的窗口的子窗口上,它也会立即关闭,因为我将焦点设置到其他外部应用程序

private void This_MouseLeave(object sender, MouseEventArgs e)
{
    if (!this.IsMouseOver)
    {
        OtherExternalWindow.Focus();
    }
}

我已尝试添加检查鼠标是否未结束,但似乎上下文菜单不被视为我的窗口的子项 (?)。我认为这可以通过命名我所有的 ContextMenus 并检查它们是否打开来实现,但我想避免这种方法,除非其他方式不可能。

如何在鼠标离开时切换焦点但不破坏上下文菜单行为?

【问题讨论】:

  • ContextMenu 不是您窗口的子窗口。它本身就是一个窗口。因此,当鼠标移到 ContextMenu 上时,它实际上会离开您的窗口。

标签: wpf window mouseleave


【解决方案1】:

如果您不希望 ContextMenu 获得焦点,请设置其(及其内部元素,例如 MenuItems)Focusable="false"

<Button Content="BBBB">
    <Button.ContextMenu>
        <ContextMenu Focusable="False">
            <MenuItem Header="AAAA" Focusable="False"/>
        </ContextMenu>
    </Button.ContextMenu>
</Button>

【讨论】:

  • 这对我不起作用。 MouseLeave 事件仍在触发并将焦点移出上下文元素。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-28
  • 2012-11-15
  • 1970-01-01
  • 2018-08-09
相关资源
最近更新 更多