2013-05-14 8 views
3

У меня есть приложение WPF, которое я могу свести к минимуму. Когда я нормально щелкнул его, окно снова отобразится.WPF ContextMenu для значка в лотке

Теперь мне интересно, как создать простой ContextMenu?

ContextMenu должен заполнить x опциями, в которых onclick будет запускать функцию. На данный момент мне просто нужен элемент «Exit», связанный с методом «Exit_Click».

Что-то я попытался это:

ContextMenu menu = (ContextMenu)this.FindResource("NotifierContextMenu"); 
menu.IsOpen = true; 

menu не знает какого-либо IsOpen значения.

Другие примеры, как использовать много разных вещей. One of them requires me to create a HostManager for some reason.

Мне просто нужен простой ContextMenu. Как я могу это достичь?

+1

[This] (http://www.hardcodet.net/projects/wpf-notifyicon) может делать почти что угодно. –

+0

Но я не хочу ничего делать ... – Joetjah

+2

«Ничего» в этом контексте означает «все, что вы когда-либо хотели бы, включая контекстные меню» ... –

ответ

6

As @ H.B. Hardcodet's NotifyIcon довольно хорошо подходит для значков панели задач WPF. Увы, вы не получите это из коробки с WPF, но вы можете использовать его и решить вашу проблему, чем ждать, пока Microsoft ее исправит (они действительно должны просто добавить эту библиотеку в стандарты).

Теперь, чтобы решить вашу проблему выпуск (Использование выше решения):

  • Скачать решение
  • построить библиотеку
  • Добавьте его в систему управления версиями, если у вас есть один и добавить ссылку на него (Hardcodet.Wpf.TaskbarNotification.dll) в проекте

Теперь в вашем MainWindow.xaml вы могли бы просто иметь что-то вроде:

<Window ... 
     xmlns:tb="http://www.hardcodet.net/taskbar" 
     ...> 
    ... 
    <Grid> 
    <tb:TaskbarIcon> 
     <tb:TaskbarIcon.ContextMenu> 
     <ContextMenu> 
      <MenuItem Click="Exit_Click" 
        Header="Exit" /> 
     </ContextMenu> 
     </tb:TaskbarIcon.ContextMenu> 
    </tb:TaskbarIcon> 
    ... 
    </Grid> 
</Window> 

и MainWindow.xaml.cs с обработчик щелчка, как вам необходимо:

private void Exit_Click(object sender, RoutedEventArgs e) { 
    Application.Current.Shutdown(); 
} 

Я рекомендую потратить некоторое время на поиск в примерах, поступающих с исходным кодом библиотеки, чтобы ознакомиться с вашими доступными параметрами. Доверяйте мне, что wpf слишком упрощается, когда дело доходит до вспомогательных библиотек. Попробуйте некоторые из вспомогательных библиотек qt, и вы будете знать, что «где-то там похоронено» буквально означает в помощниках с открытым исходным кодом.

+0

Хорошо, это сработало. Теперь меню показывает, когда я правильно нажимаю на значок. Для этого мне пришлось удалить исходный код (иначе будет создано 2 значка). Вы знаете, как я могу атаковать мой левый клик на этот значок (чтобы восстановить окно, если оно закрыто или минимально)? – Joetjah

+1

@Joetjah Я использую MVVM и, следовательно, не использую обработчики событий. '' имеет такие команды, как 'LeftClickCommand' и нравится, что я использую.Если вы хотите использовать обработчики событий, вы можете нажать на событие «TrayLeftMouseDown», а затем в обработчике событий проверить состояние окна и действие соответственно. – Viv

+0

Я также нашел 'LeftClickCommand', хотя, похоже, я не могу использовать там метод (с именем' Icon_Onclick() '). «TrayLeftMouseDown» был именно тем, что я искал. Спасибо! – Joetjah