2011-04-04 77 views
9

首先,標準的信息:當用戶在菜單外單擊時,如何讓我的WPF上下文菜單消失?

VS2010終極
Win7旗艦版64位
WPF應用程序

的WPF上下文菜單:

<ContextMenu x:Key="RightClickSystemTray" Placement="MousePoint"> 
     <MenuItem Header="Exit" Click="Menu_Exit"></MenuItem> 
    </ContextMenu> 

的代碼來顯示它:

void _notifyIcon_MouseClick(object sender, System.Windows.Forms.MouseEventArgs e) 
    { 
     if (e.Button == System.Windows.Forms.MouseButtons.Right) 
     { 
      ContextMenu menu = (ContextMenu)this.FindResource("RightClickSystemTray"); 
      menu.IsOpen = true; 
     } 
    } 

上下文菜單是一個WPF ContextMenu內置在XAML中。系統托盤中的通知圖標是一個表單通知圖標(我不知道本機WPF通知圖標)。因此,不會使用notifyicon.ContextMenu屬性。上面的代碼工作正常。當用戶右鍵單擊通知圖標時,上下文菜單顯示爲應該顯示。

我遇到的問題是讓ContextMenu在我需要的時候離開。只要你點擊WPF應用程序中的某個地方,它就會消失。這種行爲是自動的。但是,如果用戶點擊其他任何地方,如任務欄,菜單不會消失。 「LostFocus」事件不會觸發,因爲這些類型的事件僅在元素失去焦點時纔會觸發相同應用中的其他元素。就應用而言,ContextMenu永遠不會失去焦點。 「Deactivated」是我嘗試使用的另一個事件。我現在應該澄清,該應用程序具有「接近托盤」選項,因此應用程序可以在用戶有機會右鍵單擊並顯示菜單之前關閉並觸發停用的事件。當菜單出現時,應用程序不會重新激活,因此當我單擊任務欄時,停用的功能甚至不會啓動。

所以最後,這個問題。即使用戶點擊的位置不在創建上下文菜單的應用程序中,但我的上下文菜單如何在用戶點擊時消失?

回答

0

我不知道這是否是一個可行的選擇,但如果你切換到this library你有沒有這樣的問題,一個很好的集成托盤圖標WPF(有示例代碼那裏ContextMenus以及)

+0

那工作得很好。謝謝一堆。 – John 2011-04-05 12:33:38