正文
添加工具类
代码语言:javascript复制using 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
代码语言:javascript复制<Application.Resources>
<ContextMenu x:Key="NotifyIconMenu" StaysOpen="False">
<MenuItem
Name="MenuExit"
Click="MenuExit_Click"
Header="退出" />
</ContextMenu>
</Application.Resources>
App.xaml.cs
代码语言:javascript复制public 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;
}
}