您必须使用 System.Windows.Forms 中的 NotifyIcon 控件,或者您可以使用 Windows API 提供的 Notify Icon API。 WPF 不提供此类等效项,并且已在 Microsoft Connect 上多次请求。
我在 GitHub 上有代码,它使用 WPF 应用程序中的 System.Windows.FormsNotifyIcon 组件,可以在 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 Window 来托管组件,它只是将其引入 WPF 应用程序的最方便的方法(因为 Window 通常是通过 App.xaml 定义的默认入口点),同样,您不需要不需要 WPF Wrapper 或第 3 方控件,因为 SWF 组件保证存在于任何也具有 WPF 支持的 .NET Framework 安装中,因为它是 .NET Framework 的一部分(所有当前和未来的 .NET Framework 版本都基于它构建。)迄今为止,Microsoft 没有任何迹象表明 SWF 支持将很快从 .NET Framework 中删除。
希望对您有所帮助。
您必须使用 3.0 之前的框架组件来获取托盘图标有点麻烦,但可以理解的是,正如 Microsoft 所解释的那样,在 WPF 范围内没有系统托盘的概念。 WPF 是一种演示技术,而通知图标是一种操作系统(不是“演示”)概念。