我找到一个非常简单实用的静态类,可以让我们使用非常轻松地实现系统托盘。
话不多说直接贴代码:
public class NotifyIconBar { public static NotifyIconBar Instance; public static event MouseEventHandler DoubleClick; public NotifyIcon Notify { get; set; } static NotifyIconBar() { Instance = new NotifyIconBar(); } private NotifyIconBar() { Notify = new NotifyIcon(); Notify.Icon = new Icon(System.Windows.Application.GetResourceStream(new Uri("Resources/favicon.ico", UriKind.Relative)).Stream); Notify.MouseDoubleClick += Nofity_MouseDoubleClick; Notify.MouseClick += Nofity_MouseClick; Notify.Visible = true; } private void Nofity_MouseDoubleClick(object sender, MouseEventArgs e) { if (DoubleClick != null) { DoubleClick(sender, e); } } private void Nofity_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; } } public void DisposeNotifyIcon() { Notify?.Dispose(); } }
App.xaml
<Application x:Class="SmallTool.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:SmallTool" StartupUri="SyncTime.xaml"> <Application.Resources> <ResourceDictionary> <ContextMenu x:Key="NotifyIconMenu" StaysOpen="False"> <MenuItem Name="MenuOpen" Click="MenuOpen_Click" Header="打开" /> <MenuItem Name="MenuExit" Click="MenuExit_Click" Header="退出" /> </ContextMenu> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="/Resources/Styles.xaml"/> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Application.Resources> </Application>
App.xaml