1、在项目中用nuget引入Hardcodet.NotifyIcon.Wpf。如下图所示。
2、在App.xaml中创建托盘界面,代码是写在 App.xaml 里面
注意在application中一定要加入这一行代码: xmlns:tb="http://www.hardcodet.net/taskbar"
然后在
-
-
"false" x:Key="SysTrayMenu"> -
-
-
-
-
-
-
-
-
"Taskbar" ToolTipText="" - DoubleClickCommand="{Binding NotifyCommand}" DoubleClickCommandParameter="1"
- ContextMenu="{StaticResource SysTrayMenu}" IconSource="/jqsw.ico">
-
-
"LightYellow" CornerRadius="5" Opacity="0.8" Padding="10"> -
"Vertical"> -
"温湿度数据采集服务网口版" Foreground="Red"/> -
-
-
-
-
-
3、创建ViewModelBase类。再创建TaskbarIconViewModel类继承ViewModelBase类
- internal class ViewModelBase : INotifyPropertyChanged
- {
- public event PropertyChangedEventHandler PropertyChanged ;
- protected void RaisePropertyChanged(string property)
- {
- PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(property));
- }
- }
-
-
-
-
-
- internal class TaskbarIconViewModel : ViewModelBase
- {
- private string systemTime;
- public string SystemTime
- {
- get { return systemTime; }
- set { systemTime = value; RaisePropertyChanged("SystemTime"); }
- }
- public DelegateCommand NotifyCommand
- {
- get
- {
- return new DelegateCommand((type) =>
- {
- if (type.ToString() == "0")
- Application.Current.MainWindow.Hide();
- if (type.ToString() == "1")
- {
- Application.Current.MainWindow.Show();
- Application.Current.MainWindow.Activate();
- }
- if (type.ToString() == "99")
- Application.Current.Shutdown();
- });
- }
- }
- }
、在App.xaml.cs中写入如下代码:
- private static System.Threading.Mutex mutex;
- protected override void OnStartup(StartupEventArgs e)
- {
- mutex = new System.Threading.Mutex(true, "TemCollSrvTwo");
- if (mutex.WaitOne(0, false))
- {
- base.OnStartup(e);
- }
- else
- {
- MessageBox.Show("程序已经在运行!", "提示");
- this.Shutdown();
- }
-
- mTaskbarIcon = (TaskbarIcon)FindResource("Taskbar");
- mTaskbarIcon.DataContext = new TaskbarIconViewModel();
- }
- public static TaskbarIcon mTaskbarIcon;
- 4031
5、效果展示