在.NET CORE\.NET 5 下WPF如何实现托盘图标功能

编程开发
1299
托盘图标
.NET 5
WPF托盘图标功能
Hardcodet
WPF

Hardcodet.NotifyIcon.Wpf.NetCore

最近折腾.NET 5方面的东西,实现wpf托盘功能上却犯了难,原来的开发套路在这里用不上。 开发过程中并不能像.NET farmework 那样直接引用winform的 System.Windows.Forms .dll 来实现功能,最后找到了一个开源库 Hardcodet.NotifyIcon.Wpf.NetCore最终实现了我想要的效果。

在.NET core.NET 5 下WPF实现托盘图标功能

在.NET core.NET 5 下WPF利用三方控件“Hardcodet.NotifyIcon.Wpf.NetCore”实现托盘图标功能

nuget引用开源程序包 Hardcodet.NotifyIcon.Wpf.NetCore

在.NET core.NET 5 下WPF利用三方控件“Hardcodet.NotifyIcon.Wpf.NetCore”实现托盘图标功能

创建托盘图标核心代码

我这里将代码封装成了静态方法 方便外部调用

public static class WindowsTaskbarIcon
{
    static TaskbarIcon WindowsNotifyIcon { get; set; }
    public static void Open()
    {
        if (WindowsNotifyIcon is null)
        {
             InitNotifyIcon();
    	}
    }
    public static void Exit()
    {
        if (WindowsNotifyIcon is null) return;
        WindowsNotifyIcon.Visibility = System.Windows.Visibility.Collapsed;
        WindowsNotifyIcon.Dispose();
    }
    ///初始化托盘控件
    static void InitNotifyIcon()
    {
        WindowsNotifyIcon = new TaskbarIcon();
        WindowsNotifyIcon.Icon = new System.Drawing.Icon("yuantk.ico");
        ContextMenu context = new ContextMenu();
        MenuItem show = new MenuItem();
        show.Header = "主页";
        show.Click += delegate (object sender, RoutedEventArgs e)
        {
            Application.Current.MainWindow.Show();
            Application.Current.MainWindow.Topmost = true;
            Application.Current.MainWindow.Topmost = false;
        };
        context.Items.Add(show);
        MenuItem exit = new MenuItem();
        exit.Header = "退出";
        exit.Click += delegate (object sender, RoutedEventArgs e)
        {
            Environment.Exit(0);
        };
        context.Items.Add(exit);
         WindowsNotifyIcon.ContextMenu = context;
    }
}

程序启动函数里启用

使用起来也很简单 直接在App.Xaml.cs 启动函数方法内 执行 WindowsTaskbarIcon.Open() 即可**

运行后托盘图标效果

在.NET core.NET 5 下WPF利用三方控件“Hardcodet.NotifyIcon.Wpf.NetCore”实现托盘图标功能

WPF实现窗体接收鼠标拖拽的文件例子
一次使用AutoResetEvent的经历:在Task并发环境下导致UI线程卡死 内存一直上涨
WPF桌面程序开发怎么实现鼠标窗体穿透点击桌面
WPF中某一个控件绑定其他指定UI控件的属性值
.NET 5 WPF 如何开启控制台界面用于实时输出日志
.NET程序系统托盘运行出现多个同样的托盘图标的解决方法
Windows桌面开发优秀的WPF界面开源UI组件 MahApps.Metro
WPF 设置程序不允许同一类程序多开进程
WPF引用CommunityToolkit.Mvvm实现属性变动双向绑定的简单例子
WPF使用popup控件实现弹出式提示
WPF文本框控件RichTextBox实现MVVM绑定数据源
WPF去除标题栏 实现窗体的缩放及拖动效果
暂无相关内容...
C#+WPF实现模仿实现的网易云音乐客户端源码
WPF实现的自定义工作大日历排班Calendar控件模板的例子源码
wpf实现大屏幕弹幕播放效果特效源码新手可参考下.rar
[人脸检测]基于C#OpenCvSharp+haarcascade人脸、人眼模型实现人脸检测源码
WPF实现读取USB摄像头实时视频展示以及导出实时截图的C#源码例子
免责声明 部分转载分享内容若侵犯您的权益,还请 邮件联系 侵删