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

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

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

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

какие-то намеки?

3 ответов


для WPF нет NotifyIcon.

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

http://www.hardcodet.net/uploads/2009/04/image13.png


вы должны использовать элемент управления NotifyIcon из системы.Окна.Формы или можно использовать API значков уведомлений, предоставляемый Windows API. WPF не предоставляет такого эквивалента, и он был запрошен в Microsoft Connect несколько раз.

у меня есть код на GitHub, который использует System.Windows.Forms компонент NotifyIcon из приложения 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.Нажмите и DoubleClick выше):

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

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

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

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

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


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

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

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

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