您必须使用System.Windows.Forms中的NotifyIcon控件,或者可以使用Windows API提供的Notify Icon API。WPF不提供这样的等效项,并且已在Microsoft Connect上多次提出要求。
我在GitHub上有代码System.Windows.Forms
,该代码在WPF应用程序中使用NotifyIcon组件,可以在https://github.com/wilson0x4d/Mubox/blob/master/Mubox.QuickLaunch/AppWindow.xaml.cs中查看代码
以下是摘要位:
使用ShowInTaskbar = False创建一个WPF窗口,并以不可见状态加载该窗口。
在课程级别:
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应用程序的最便捷方法(因为Window通常是通过App.xaml定义的默认入口点),同样,您也不需要不需要WPF包装程序或第三方控件,因为可以保证任何.NET Framework安装中都存在SWF组件,该安装程序也支持WPF,因为它是.NET Framework的一部分(所有当前和将来的.NET Framework版本均基于此框架。)迄今为止,Microsoft没有迹象表明SWF支持将很快从.NET Framework中删除。
希望有帮助。
您必须使用3.0之前的框架组件来获得任务栏图标,这有点困难,但是可以理解,正如Microsoft所解释的那样,在WPF范围内没有系统托盘的概念。WPF是一种演示技术,“通知图标”是一种操作系统(不是“演示”)概念。