it-swarm.com.ru

Приложение WPF, которое имеет только иконку в трее

Я новичок в WPF, и мне интересно, кто-нибудь может дать мне несколько советов, как написать приложение, которое будет свернуто в трей. Идея заключается в том, что он периодически выбирает RSS-канал и создает всплывающее окно с тостером при появлении новых каналов.

Приложение должно по-прежнему иметь главное окно (по сути, просто список, содержащий все записи фида), но оно должно быть скрыто по умолчанию.

Я начал читать о XAML и WPF и знаю, что StartupUri в App.xaml должен указывать на мое главное окно, но я понятия не имею, как правильно сделать значок SysTray и скрыть главное окно (это также означает, что когда пользователь сворачивает окно, оно должно быть свернуто в трей, а не в панель задач).

Есть намеки?

137
Michael Stum

Там нет NotifyIcon для WPF.

Мой коллега использовал эту свободно доступную библиотеку для хорошего эффекта:

106
Drew Noakes

Вы должны использовать элемент управления NotifyIcon из System.Windows.Forms или, в качестве альтернативы, вы можете использовать API-интерфейс Notify Icon, предоставляемый Windows API. WPF не предоставляет такого эквивалента, и его несколько раз запрашивали в Microsoft Connect.

У меня есть код на GitHub, который использует System.Windows.Forms NotifyIcon Component из приложения WPF, код можно посмотреть по адресу https://github.com/wilson0x4d/Mubox/blob/master/Mubox.QuickLaunch/AppWindow.xaml. CS

Вот сводные биты:

Создайте окно WPF с ShowInTaskbar = False, которое загружается в невидимом состоянии.

На уровне класса:

private System.Windows.Forms.NotifyIcon notifyIcon = null;

Во время OnInitialize ():

notifyIcon = new System.Windows.Forms.NotifyIcon();
notifyIcon.Click += new EventHandler(notifyIcon_Click);
notifyIcon.DoubleClick += new EventHandler(notifyIcon_DoubleClick);
notifyIcon.Icon = IconHandles["QuickLaunch"];

Во время OnLoaded ():

notifyIcon.Visible = true;

И для взаимодействия (показано как notifyIcon.Click и DoubleClick выше):

void notifyIcon_Click(object sender, EventArgs e)
{
    ShowQuickLaunchMenu();
}

Отсюда вы можете возобновить использование элементов управления WPF и API, таких как контекстные меню, всплывающие окна и т.д.

Это так просто. Вам точно не нужно окно WPF для размещения компонента, это просто наиболее удобный способ ввести его в приложение WPF (поскольку окно, как правило, является точкой входа по умолчанию, определенной через App.xaml), аналогично, вы не не требуется WPF Wrapper или сторонний элемент управления, так как компонент SWF гарантированно присутствует в любой установке .NET Framework, которая также имеет поддержку WPF, поскольку он является частью .NET Framework (на котором основаны все текущие и будущие версии .NET Framework.) На сегодняшний день от Microsoft нет никаких указаний на то, что поддержка SWF будет прекращена в .NET Framework в ближайшее время.

Надеюсь, это поможет.

Немного сыра, что для получения иконки в трее необходимо использовать компонент Framework до версии 3.0, но, как объяснила Microsoft, концепция System Tray в рамках WPF отсутствует. WPF - это технология представления, а значки уведомлений - это концепция операционной системы (а не "презентация").

96
Shaun Wilson

У меня недавно была такая же проблема. К сожалению, на данный момент NotifyIcon является только элементом управления Windows.Forms, и если вы хотите его использовать, вам придется включить эту часть платформы. Я полагаю, это зависит от того, насколько вы пурист WPF.

Если вы хотите быстро и легко начать работу, проверьте этот элемент управления WPF NotifyIcon в проекте кода , который не зависит на WinForms NotifyIcon вообще. Более свежая версия, по-видимому, доступна на сайте автора и в виде пакет NuGet . Это кажется лучшим и самым чистым способом для меня до сих пор.

  • Богатые подсказки, а не текст
  • WPF контекстные меню и всплывающие окна
  • Поддержка команд и перенаправленные события
  • Гибкая привязка данных
  • Богатые всплывающие сообщения, а не сообщения по умолчанию, предоставляемые ОС

Проверьте это. Он также поставляется с удивительным примером приложения, очень простым в использовании, и вы можете иметь великолепно выглядящие всплывающие окна, всплывающие подсказки и контекстные меню в стиле Windows Live Messenger. Идеально подходит для отображения RSS-канала, я использую его для аналогичных целей.

48
Dale