using System.Windows; using Hardcodet.Wpf.TaskbarNotification; using System.Windows.Controls; using MaterialDesignThemes.Wpf; using System.Windows.Input; using System.Drawing; using System.Diagnostics; namespace chatclient.Data { public class TrayIconManager { private readonly TaskbarIcon _trayIcon; private readonly Window _mainWindow; public TrayIconManager(Window mainWindow) { _mainWindow = mainWindow; // 创建托盘图标 _trayIcon = new TaskbarIcon { Icon = new System.Drawing.Icon("resource/chat.ico"), ToolTipText = "Material Design Application", ContextMenu = CreateContextMenu() }; // 注册事件 _trayIcon.TrayMouseDoubleClick += TrayIcon_TrayMouseDoubleClick; _mainWindow.Closing += MainWindow_ClosingHandler; } private void MainWindow_ClosingHandler(object? sender, System.ComponentModel.CancelEventArgs e) { // 取消关闭操作,改为最小化到托盘 e.Cancel = true; _mainWindow.Hide(); } private ContextMenu CreateContextMenu() { // 创建Material Design风格的上下文菜单 var contextMenu = new ContextMenu { Style = (Style)Application.Current.Resources["MaterialTrayMenu"] }; // 添加菜单项 contextMenu.Items.Add(CreateMenuItem("打开程序", PackIconKind.WindowRestore, OpenApp_Click)); contextMenu.Items.Add(CreateMenuItem("设置", PackIconKind.Cog, Settings_Click)); contextMenu.Items.Add(new Separator { Style = (Style)Application.Current.Resources["Separator"] }); //contextMenu.Items.Add(CreateMenuItem("Check for Updates", PackIconKind.Update, Updates_Click)); //contextMenu.Items.Add(CreateMenuItem("Help", PackIconKind.HelpCircle, Help_Click)); //contextMenu.Items.Add(new Separator { Style = (Style)Application.Current.Resources["MaterialDesignLightSeparator"] }); contextMenu.Items.Add(CreateMenuItem("退出", PackIconKind.Power, Exit_Click)); return contextMenu; } private MenuItem CreateMenuItem(string header, PackIconKind iconKind, RoutedEventHandler clickHandler) { var menuItem = new MenuItem { Header = header, Style = (Style)Application.Current.Resources["MaterialTrayMenuItem"], Icon = new PackIcon { Kind = iconKind, Width = 20, Height = 20 } }; menuItem.Click += clickHandler; return menuItem; } private void TrayIcon_TrayMouseDoubleClick(object sender, RoutedEventArgs e) { RestoreApplication(); } private void OpenApp_Click(object sender, RoutedEventArgs e) { RestoreApplication(); } private void RestoreApplication() { _mainWindow.Show(); _mainWindow.WindowState = WindowState.Normal; _mainWindow.Activate(); } private void Settings_Click(object sender, RoutedEventArgs e) { RestoreApplication(); Application.Current.Dispatcher.Invoke(() => { var mainWindow = Application.Current.Windows.OfType().FirstOrDefault(); if (mainWindow != null) { mainWindow.TabControl.SelectedItem = mainWindow.Settings; } }); } private void Updates_Click(object sender, RoutedEventArgs e) { // 实现更新检查逻辑 } private void Help_Click(object sender, RoutedEventArgs e) { // 实现帮助逻辑 } private void Exit_Click(object sender, RoutedEventArgs e) { Dispose(); Application.Current.Shutdown(); } public void Dispose() { _trayIcon.Dispose(); } } }