2011-01-15 8 views
5

У меня есть приложение WPF, которое работает в системном трее. Я пытаюсь создать контекстное меню, которое появляется, когда вы щелкаете правой кнопкой мыши по значку в лотке. Вот XAML:Контекстное меню с правой кнопкой мыши в системном лотке

<Window.Resources> 
     <ContextMenu x:Key="NotifierContextMenu" Placement="MousePoint"> 
      <MenuItem Header="Exit" Click="Menu_Exit"/> 
     </ContextMenu> 
    </Window.Resources> 

А вот код-за:

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

     protected void Menu_Exit(object sender, RoutedEventArgs e) 
     { 
      NotifyIcon.Visible = false; 
      Application.Current.Shutdown(); 
     } 

Проблема, что у меня в том, что при нажатии правой кнопкой мыши на значок, он выдает ошибку, NotifierContextMenu не может быть найден. Что мне не хватает?

ответ

2

Я пробовал это сам без проблем. Ваш обработчик событий для MouseDown на самом деле является частью того же класса, что и NotifierContextMenu?

Возможно, попробуйте сделать небольшой код, чтобы перечислять ресурсы, чтобы узнать, можете ли вы сопоставить тот набор ресурсов, на который он ссылается.

+0

Да, они в одном классе. Я запускаю Parallel.Foreach код в этом приложении, когда я прокомментирую, что это работает нормально. Любая идея, как заставить его работать? – Justin

+0

Любая вероятность того, что ForEach вызывает проблемы в этом потоке? Можете ли вы попытаться создать BackgroundWorker и поместить в него материал Parallel.ForEach, чтобы переместить его на другой поток? Я никогда не использовал Parallel.ForEach, но это связано с связью потоков в MSDN. Просто мысль. – CodeWarrior

+0

Это исправлено, спасибо! – Justin

Смежные вопросы