C# 将整个WPF应用程序最小化到C中的系统托盘#

C# 将整个WPF应用程序最小化到C中的系统托盘#,c#,wpf,global,system-tray,notifyicon,C#,Wpf,Global,System Tray,Notifyicon,在我的wpf应用程序中,我有4个视图窗口。我已经编写了以下代码,当最小化主窗口到系统托盘时,它会最小化该窗口。但是,我希望我的应用程序中的所有窗口(即整个wpf应用程序)都具有这种效果。当我从一个窗口移动到另一个窗口时,它也应该在系统托盘中显示该窗口的图标。我是否需要为所有其他窗口编写相同的代码?或者其他方法来实现这个结果 为最小化主窗口到系统托盘而编写的代码 public partial class MonthView : MetroWindow { public DateTime

在我的wpf应用程序中,我有4个视图窗口。我已经编写了以下代码,当最小化主窗口到系统托盘时,它会最小化该窗口。但是,我希望我的应用程序中的所有窗口(即整个wpf应用程序)都具有这种效果。当我从一个窗口移动到另一个窗口时,它也应该在系统托盘中显示该窗口的图标。我是否需要为所有其他窗口编写相同的代码?或者其他方法来实现这个结果

为最小化主窗口到系统托盘而编写的代码

public partial class MonthView : MetroWindow
{

    public DateTime SelectedDate { get; set; }

    public MonthView()
    {

            InitializeComponent();
            calMain.DisplayDate = DateTime.Today;
            Globals._globalController = new AppController();
            Globals._globalController.appTaskManager.setupLocal();
            Globals._globalController.setMonthViewWindow(this);

            Globals.ni = new NotifyIcon();
            Globals.ni.Icon = new System.Drawing.Icon(@"D:\TimeSheetIcon.ico");
            Globals.ni.Visible = true;
            Globals.ni.Click +=
                delegate(object sender, EventArgs args)
                {
                    this.Show();
                    this.WindowState = WindowState.Normal;
                };

    }

    protected override void OnStateChanged(EventArgs e)
    {
        if (WindowState == System.Windows.WindowState.Minimized)
        {
            this.Hide();
            Globals.ni.BalloonTipTitle = "MonthView";
            Globals.ni.BalloonTipText = "This is main window";
            Globals.ni.Visible = true;
            Globals.ni.ShowBalloonTip(500);
            base.OnStateChanged(e);
        }
    }
}
在Globals.cs中全局声明的NotifyIcon

public static class Globals
{
    public static NotifyIcon ni;
}

您应该创建一个继承Window类的类(比如WindowBase),然后在这个新的WindowBase类中应用上述功能,然后从这个WindowBase类继承所有新窗口。我希望这会给你一个想法。

是的。值得一试。