2017-03-02 96 views
0

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

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

我曾尝试添加一个检查,如果鼠标没有结束,但似乎上下文菜单不被视为我的窗口(?)的孩子。我认为这可以通过命名我的所有ContextMenus并检查它们中的任何一个是否打开来实现,但是我希望避免这种方法,除非这是不可能的。

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

+0

ContextMenu不是您的窗口的子项。它本身就是一种窗户。所以当鼠标移过ContextMenu时,它实际上会离开你的窗口。 – mm8

回答

0

我不想让ContextMenu获得焦点,请设置其(及其内部元素,如MenuItems)Focusable="false"

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

这对我不起作用。 MouseLeave事件仍然触发并将焦点从上下文元素中移出。 – dotnetzen

相关问题