Приложение WPF, в котором есть только значок в трее

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

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

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

Любые подсказки?

Ответ 1

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

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

Ответ 2

Вы должны использовать элемент управления NotifyIcon из System.Windows.Forms или, в качестве альтернативы, вы можете использовать API значка уведомлений, предоставляемый 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 - это технология представления, а значки уведомлений - это концепция операционной системы (а не "презентация").

Ответ 3

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

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

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

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