2017-03-02 100 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

相關問題