本文使用MainWindow.xaml和MainWindow.xaml.cs作为示例 来实现这个放入托盘中
1. 安装NuGet包
首先,在你的项目中安装这个库
Hardcodet.NotifyIcon.Wpf 这个库

2修改页面中的 XAML 代码
XML
<Window x:Class="EquipmentInformation.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:EquipmentInformation"
xmlns:tb="http://www.hardcodet.net/taskbar" <!-- 1. 引入命名空间 -->
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800"
StateChanged="Window_StateChanged"> <!-- 2. 监听窗口状态变化 -->
<Grid>
<!-- 你的界面内容保持不变 -->
<!-- 3. 添加托盘图标控件 -->
<tb:TaskbarIcon x:Name="TrayIcon"
IconSource="/app.ico" <!-- 图标路径,需添加到项目中 -->
ToolTipText="Equipment Information" <!-- 鼠标悬停文本 -->
TrayLeftMouseDown="TrayIcon_TrayLeftMouseDown"> <!-- 左键点击事件 -->
<!-- 右键菜单 -->
<tb:TaskbarIcon.ContextMenu>
<ContextMenu>
<MenuItem Header="打开主窗口" Click="ShowWindow_Click"/>
<Separator/>
<MenuItem Header="退出" Click="ExitApp_Click"/>
</ContextMenu>
</tb:TaskbarIcon.ContextMenu>
</tb:TaskbarIcon>
</Grid>
</Window>
将 IconSource 改为标准的 WPF Pack URI 语法:
XML
<tb:TaskbarIcon x:Name="TrayIcon"
IconSource="pack://application:,,,/app.ico"
ToolTipText="Equipment Information">
3. 编写后台代码 (MainWindow.xaml.cs)
XML
using System.Windows;
namespace EquipmentInformation
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
// 初始化时,托盘图标默认是隐藏的,等最小化时再显示
TrayIcon.Visibility = Visibility.Collapsed;
}
/// <summary>
/// 当窗口状态改变时触发(如最小化)
/// </summary>
private void Window_StateChanged(object sender, System.EventArgs e)
{
if (WindowState == WindowState.Minimized)
{
// 1. 隐藏主窗口
this.Hide();
// 2. 显示托盘图标
TrayIcon.Visibility = Visibility.Visible;
// 3. 可选:显示一个气泡提示,告知用户程序已最小化到托盘
TrayIcon.ShowBalloonTip("提示", "应用程序已最小化到托盘", BalloonIcon.Info);
}
}
/// <summary>
/// 鼠标左键点击托盘图标时,恢复显示主窗口
/// </summary>
private void TrayIcon_TrayLeftMouseDown(object sender, RoutedEventArgs e)
{
ShowMainWindow();
}
/// <summary>
/// 右键菜单"打开主窗口"的点击事件
/// </summary>
private void ShowWindow_Click(object sender, RoutedEventArgs e)
{
ShowMainWindow();
}
/// <summary>
/// 右键菜单"退出"的点击事件
/// </summary>
private void ExitApp_Click(object sender, RoutedEventArgs e)
{
// 彻底退出应用程序
TrayIcon.Dispose(); // 清理托盘图标资源
Application.Current.Shutdown();
}
/// <summary>
/// 辅助方法:显示窗口并隐藏托盘图标
/// </summary>
private void ShowMainWindow()
{
this.Show();
this.WindowState = WindowState.Normal; // 确保窗口是正常状态
this.Activate(); // 激活窗口,使其置于最前
TrayIcon.Visibility = Visibility.Collapsed; // 再次隐藏托盘图标
}
/// <summary>
/// 重写OnClosing方法:阻止直接关闭,改为最小化
/// </summary>
protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
{
// 如果不是通过"退出"菜单关闭的,就取消关闭并最小化
e.Cancel = true;
this.WindowState = WindowState.Minimized;
}
}
}
效果如下:

