2016-04-19 4 views
3

У меня есть ContextMenu экземпляра WPF, объявленные в моем XAML как этогоМой WPF ContextMenu не отвергая, когда я нажимаю в другом месте

<Window.ContextMenu> 
    <ContextMenu> 
     <MenuItem Header="Do Nothing"/> 
     <Separator/> 
     <MenuItem Header="{x:Static p:Resources.MenuExit}" Click="IconMenu_Exit"/> 
    </ContextMenu> 
</Window.ContextMenu> 

Я использую WinForms NotifyIcon, чтобы отобразить иконку в трее, как этот

_notifyIcon = new System.Windows.Forms.NotifyIcon(); 
_notifyIcon.Icon = Properties.Resources.mainicon; 
_notifyIcon.Visible = true; 
_notifyIcon.MouseClick += new System.Windows.Forms.MouseEventHandler(OnTrayIconMouseClick); 

реализация обработчика щелчка мыши этот

private void OnTrayIconMouseClick(object sender, System.Windows.Forms.MouseEventArgs e) 
{ 
    if (e.Button == System.Windows.Forms.MouseButtons.Right) 
    { 
     ContextMenu.IsOpen = true; 
    } 
} 

Это отображает контекстное меню, и щелчок по пунктам меню отклоняет его, но если я просто перейду в другое окно, контекстное меню останется видимым. Это похоже на странное поведение по умолчанию. Есть ли другой способ отобразить контекстное меню, отличное от IsOpen, или мне нужно явно скрыть контекстное меню?

Редактировать: Не знаю, имеет ли значение, но в окне DataContext установлено значение this в коде.

Редактирование 2: контекстное меню правильно отменяется, если оно вызывается щелчком правой кнопки мыши по фактическому главному окну, но не с иконки в трее.

ответ

0

Убедитесь, что свойство StaysOpen не определено.

+0

Я никогда не устанавливал его в true. Даже явно устанавливая его в false в XAML, я получаю те же результаты – cppguy

+0

IsHitTestVisible = true? Если элемент является дочерним элементом элемента, который не является hittestvisible, ребенок остается ложным – cjsmith

+0

@cjsmith Устанавливая его явно в True, это не имеет никакого значения. – cppguy