Я новичок в WPF, и мне интересно, кто-нибудь может дать мне несколько советов, как написать приложение, которое будет свернуто в трей. Идея состоит в том, что он периодически выбирает RSS-канал и создает всплывающее окно с тостером при появлении новых каналов.
Приложение должно по-прежнему иметь главное окно (по сути, просто список, содержащий все записи фида), но оно должно быть скрыто по умолчанию.
Я начал читать о XAML и WPF и знаю, что StartupUri в App.xaml должен указывать на мое главное окно, но я понятия не имею, как правильно сделать значок SysTray и скрыть главное окно (это также означает, что когда пользователь сворачивает окно, оно должно быть свернуто в трей, а не в панель задач).
Есть намеки?
Ответы:
Там нет NotifyIcon для WPF.
Мой коллега использовал эту свободно доступную библиотеку для хорошего эффекта:
источник
Вы должны использовать элемент управления NotifyIcon из System.Windows.Forms или, в качестве альтернативы, вы можете использовать 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, которое загружается в невидимом состоянии.
На уровне класса:
Во время OnInitialize ():
Во время OnLoaded ():
И для взаимодействия (показано как notifyIcon.Click и DoubleClick выше):
Отсюда вы можете возобновить использование элементов управления 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 - это технология презентации, а значки уведомлений - это концепция операционной системы (а не «презентация»).
источник
У меня недавно была такая же проблема. К сожалению, на данный момент NotifyIcon является только элементом управления Windows.Forms, и если вы хотите его использовать, вам придется включить эту часть платформы. Я полагаю, это зависит от того, насколько вы пурист WPF.
Если вы хотите быстро и легко начать работу, проверьте этот элемент управления WPF NotifyIcon в проекте кода, который вообще не использует WinForms NotifyIcon. Более свежая версия, кажется, доступна на веб-сайте автора и в виде пакета NuGet . Это кажется лучшим и самым чистым способом для меня до сих пор.
Проверьте это. Он также поставляется с удивительным примером приложения, очень простым в использовании, и вы можете иметь великолепно выглядящие всплывающие окна, всплывающие подсказки и контекстные меню в стиле Windows Live Messenger. Идеально подходит для отображения RSS-канала, я использую его для аналогичных целей.
источник