前言&问题背景
Windows平台上很多需要持续后台运行的程序,都有显示任务栏图标的需求,主要来显示状态信息、提供功能菜单栏。但UWP或Windows App SDK并没有提供对应的API,相反可能是在有意的抑制此项功能,我有理由怀疑是微软的战略布局。
但很显然,这项功能目前并不能有其它完美的替代解决方案,所以需要借助其它手段调用Win32 API实现。确实如此,GitHub中H.NotifyIcon库就帮助我们在WPF和WinUI平台上实现了。我们只需使用其NuGet包即可显示自己的任务栏图标。
但请注意,UWP程序强调生命周期管理,在后台期间会自动挂起。在官方的文档中,UWP确实有“在后台无限期运行”的解决方案,但一经使用则不能发布到Microsoft Store。为了响应其设计理念、也因为作者确实此方面涉足不深,本篇文章不探讨UWP平台的任务栏图标功能或后台运行功能。
解决方案
在NuGet源中,找到H.NotifyIcon
包,根据你的需要选择H.NotifyIcon.WinUI
或H.NotifyIcon.Uno
等包并安装。
注意,根据项目实例和自述文件,可以有多种声明与使用方法:
- 直接全部在
MainWindow
内声明
<Window
...
xmlns:tb="using:H.NotifyIcon"
>
<Grid>
<Grid.Resources>
<MenuFlyout x:Key="TrayContextFlyout">
<MenuFlyoutItem Command="{StaticResource XamlUICommand类指令}" />
<MenuFlyoutSeparator />
<MenuFlyoutItem Command=