WPF设置托盘图标 发表于 2022-03-11 | 分类于 wpf WPF设置托盘图标 正文添加工具类 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657using System;using System.Drawing;using System.Windows.Forms;namespace ColorPicker.Utils{ public class SystemTray { public static SystemTray Instance; /// <summary> /// 静态构造函数,在类第一次被创建或者静态成员被调用的时候调用 /// </summary> static SystemTray() { Instance = new SystemTray(); } public NotifyIcon Ni { get; set; } private SystemTray() { Ni = new System.Windows.Forms.NotifyIcon(); Ni.Icon = new Icon( System.Windows.Application.GetResourceStream( new Uri( "app.ico", UriKind.Relative) ).Stream ); //Ni.Icon = SystemIcons.Question; Ni.Visible = true; Ni.MouseClick += Ni_MouseClick; } private void Ni_MouseClick(object sender, MouseEventArgs e) { System.Windows.Controls.ContextMenu NotifyIconMenu = (System.Windows.Controls.ContextMenu)App.Current.FindResource("NotifyIconMenu"); if (e.Button == MouseButtons.Right) { NotifyIconMenu.IsOpen = true; } else { NotifyIconMenu.IsOpen = false; } } /// <summary> /// 销毁系统托盘图标的资源 /// </summary> public void DisposeNotifyIcon() { Ni?.Dispose(); } }} App.xaml 12345678<Application.Resources> <ContextMenu x:Key="NotifyIconMenu" StaysOpen="False"> <MenuItem Name="MenuExit" Click="MenuExit_Click" Header="退出" /> </ContextMenu></Application.Resources> App.xaml.cs 12345678910111213public partial class App : Application{ private void MenuExit_Click(object sender, RoutedEventArgs e) { SystemTray.Instance.DisposeNotifyIcon(); App.Current.Shutdown(); } private void Application_Startup(object sender, StartupEventArgs e) { _ = SystemTray.Instance; }}