上次做wpf时想把程序运行的图标显示在任务栏,结果发现wpf的系统托盘和winform的不一样,以前的方法不管用了。
网上搜的好多都是winform的资料,wpf的很少。
最后我把我现在做好的整理分享下,方便别人,也方便自己。
文章难免有些错误,欢迎指正,下面代码
class="brush:csharp;gutter:true;">using System; using System.Collections.Generic; using System.ComponentModel; using System.Windows; using System.Windows.Input; using System.Windows.Markup; using System.Windows.Media; using System.Windows.Threading; using Drawing = System.Drawing; using System.Windows.Forms; namespace WpfWin { public class GWindow : Window { //托盘 NotifyIcon notifyIcon; //注册AreaIcon属性,用于托盘的图标 public static readonly DependencyProperty AreaIconProperty = DependencyProperty.Register("AreaIcon", typeof(ImageSource), typeof(GWindow)); //注册AreaText属性,用于鼠标滑到托盘图标时显示的文字 public static readonly DependencyProperty AreaTextProperty = DependencyProperty.Register("AreaText", typeof(string), typeof(GWindow)); //注册AreaVisibility属性,用于显示隐藏托盘图标 public static readonly DependencyProperty AreaVisibilityProperty = DependencyProperty.Register("AreaVisibility", typeof(bool), typeof(GWindow)); //注册AreaMenuItems属性,用于托盘右键在单的列表 public static readonly DependencyProperty AreaMenuItemsProperty = DependencyProperty.Register("AreaMenuItems", typeof(List<MenuItem>), typeof(GWindow), new PropertyMetadata(new List<MenuItem>())); protected override void OnInitialized(EventArgs e) { base.OnInitialized(e); notifyIcon = new NotifyIcon(); notifyIcon.Text = AreaText; if (!DesignerProperties.GetIsInDesignMode(this)) { notifyIcon.Icon = GetImageSource(AreaIcon); } notifyIcon.Visible = AreaVisibility; if (this.AreaMenuItems != null && this.AreaMenuItems.Count > 0) { notifyIcon.ContextMenu = new ContextMenu(this.AreaMenuItems.ToArray()); } } public List<MenuItem> AreaMenuItems { get { return (List<MenuItem>)GetValue(AreaMenuItemsProperty); } set { SetValue(AreaMenuItemsProperty, value); } } public ImageSource AreaIcon { get { return (ImageSource)GetValue(AreaIconProperty); } set { SetValue(IconProperty, value); } } public string AreaText { get { return (string)GetValue(AreaTextProperty); } set { SetValue(AreaTextProperty, value); } } public bool AreaVisibility { get { return (bool)GetValue(AreaVisibilityProperty); } set { SetValue(AreaVisibilityProperty, value); } } protected override void OnClosing(CancelEventArgs e) { base.OnClosing(e); notifyIcon.Visible = false; notifyIcon.Dispose(); AreaMenuItems.Clear(); } private static Drawing.Icon GetImageSource(ImageSource icon) { if (icon == null) { return null; } Uri iconUri = new Uri(icon.ToString()); return new Drawing.Icon(System.Windows.Application.GetResourceStream(iconUri).Stream); } } }
前台调用时的代码,直接将Window 换成 GWindow,在后面就可以设置属性了
AreaMenuItems 中设置托盘图标右键菜单,自己设定
<loacl:GWindow x:Class="WpfWin.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:loacl="clr-namespace:WpfWin" xmlns:forms="clr-namespace:System.Windows.Forms;assembly=System.Windows.Forms" Title="MainWindow" Height="350" Width="525" AreaText="MainWindow" ShowInTaskbar="False" AreaVisibility="True" AreaIcon="Image/clock.ico" Icon="Image/clock.ico"> <loacl:GWindow.AreaMenuItems> <forms:MenuItem Text="Open" DefaultItem="True" /> <forms:MenuItem Text="Exit" /> </loacl:GWindow.AreaMenuItems> <Grid/> </loacl:GWindow>
程序运行图片
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" alt="" />
源码已全部贴出,就不另设下载地址了