Перейдите в App.xaml.cs и реализуйте его, как показано ниже.Хитрость заключается в том, чтобы никогда не закрывать главное окно, так как закрытое окно не может быть показано снова.Вместо этого отмените закрытие и просто скройте его.
using System.ComponentModel;
using System.Windows;
namespace BackgroundApplication
{
public partial class App : Application
{
private System.Windows.Forms.NotifyIcon _notifyIcon;
private bool _isExit;
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
MainWindow = new MainWindow();
MainWindow.Closing += MainWindow_Closing;
_notifyIcon = new System.Windows.Forms.NotifyIcon();
_notifyIcon.DoubleClick += (s, args) => ShowMainWindow();
_notifyIcon.Icon = BackgroundApplication.Properties.Resources.MyIcon;
_notifyIcon.Visible = true;
CreateContextMenu();
}
private void CreateContextMenu()
{
_notifyIcon.ContextMenuStrip =
new System.Windows.Forms.ContextMenuStrip();
_notifyIcon.ContextMenuStrip.Items.Add("MainWindow...").Click += (s, e) => ShowMainWindow();
_notifyIcon.ContextMenuStrip.Items.Add("Exit").Click += (s, e) => ExitApplication();
}
private void ExitApplication()
{
_isExit = true;
MainWindow.Close();
_notifyIcon.Dispose();
_notifyIcon = null;
}
private void ShowMainWindow()
{
if (MainWindow.IsVisible)
{
if (MainWindow.WindowState == WindowState.Minimized)
{
MainWindow.WindowState = WindowState.Normal;
}
MainWindow.Activate();
}
else
{
MainWindow.Show();
}
}
private void MainWindow_Closing(object sender, CancelEventArgs e)
{
if (!_isExit)
{
e.Cancel = true;
MainWindow.Hide(); // A hidden window can be shown again, a closed one not
}
}
}
}
Перейдите в дополнение к App.xaml и удалите Startup-Uri, чтобы при запуске приложения в область уведомлений добавлялся только NotifyIcon.
<Application x:Class="BackgroundApplication.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:BackgroundApplication">
<Application.Resources>
</Application.Resources>
</Application>
Взято из:
https://www.thomasclaudiushuber.com/2015/08/22/creating-a-background-application-with-wpf/
Примечание. Если вы хотите получить доступ к переменной, вы должны создать публичное свойство только для чтения в App.xaml.cs.:
public System.Windows.Forms.NotifyIcon NotifyIcon { get { return _notifyIcon; } }
Затем вы можете использовать его в главном окне следующим образом:
((App)App.Current).NotifyIcon