2011-04-04 89 views
9

İlk olarak, standart bilgi:Kullanıcı menü dışına çıktığında WPF Context Menu'mi nasıl kapatabilirim?

VS2010 Ultimate
Win7 Ultimate x64
WPF uygulaması

WPF bağlam menüsü:

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

kod göstermek için:

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; 
     } 
    } 

Bağlam menüsü WPF ContextMenu'dur XAML'de yerleşik. Sistem tepsisindeki bildirim simgesi bir Form bildirimi simgesidir (Yerel bir WPF bildirimi simgesini bilmiyorum). Bu nedenle, notifyicon.ContextMenu özelliği kullanılmaz. Yukarıdaki kod iyi çalışıyor. Kullanıcı bildirim simgesini sağ tıklattığında, bağlam menüsü olması gerektiği gibi gösterilir.

Yapmakta olduğum sorun, ContextMenu'nun istediğimde gitmesini sağlamaktır. WPF uygulamasında bir yere tıkladığınız sürece iyice gider. Bu davranış otomatik. Ancak kullanıcı görev çubuğu gibi başka bir yere tıklarsa menü kaybolmaz. "LostFocus" olayları tetiklenmez çünkü bu tür olaylar yalnızca bir öğe aynı uygulama içindeki başka bir öğeye odaklanınca tetiklenir. Uygulamaya gelince, ContextMenu asla odağı kaybetmez. "Devre Dışı Bırakıldı", kullanmaya çalıştığım başka bir etkinlikti. Bu noktada, uygulamanın "tepsiye yakın" seçeneğine sahip olduğunu açıklığa kavuşturmalıyım, bu nedenle uygulama, kullanıcının sağ tıklayıp menüyü gösterme şansı olmadan devre dışı bırakılan etkinliği kapatabilir ve ateşleyebilir. Menü görüntülendiğinde uygulama yeniden etkinleştirilmez, bu yüzden görev çubuğunu tıklattığımda devre dışı bırakılmayacaktır bile.

Son olarak, soru. Bağlam menüsünü, kullanıcı tıklattığında, kullanıcının tıkladığı yer, bağlam menüsünü oluşturan uygulamada olmasa bile, kaybolmasını nasıl sağlayabilirim?

cevap

0

bu uygun bir seçenek olup olmadığını bilmiyorum ama this library geçtiyseniz böyle sorunlar olmadan WPF için iyi entegre tepsi-simgesi yer alacaktır

+0

(örnek kod yanı contextmenus orada var) İşte Sadece iyi çalışacağım. Çok teşekkürler. – John