Вы должны использовать элемент управления 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), аналогично, t требуется WPF Wrapper или сторонний элемент управления, поскольку SWF-компонент гарантированно присутствует в любой установке .NET Framework, которая также поддерживает WPF, так как она является частью .NET Framework (на которой основаны все текущие и будущие версии .NET Framework). На сегодняшний день Microsoft не указывает, что поддержка SWF будет удалена из .NET Framework в ближайшее время.
Надеюсь, что это поможет.
Это немного сыра, который вы должны использовать Компонент pre-3.0 Framework для получения значка в трее, но, как объяснил Microsoft, в рамках WPF нет концепции системного лотка. WPF - это технология презентации, а значки уведомлений - это концепция операционной системы (не концепция «презентация»).
У меня есть решение: поместите элемент «StreetOverlayView extends SurfaceView» в новый FrameLayout, а после setContentView я удалим свой элемент из этого FrameLayout и добавлю снова.
frame1.removeView( markerView );
frame1.addView ( markerView );