0

私の Wpf アプリケーションには、4 つのウィンドウがあります。すべてのウィンドウに対して、次のコードを記述して、システム トレイに最小化できるようにしました。しかし問題は、あるウィンドウから別のウィンドウに移動するときに、最初のウィンドウのアイコンがまだシステム トレイに表示されることです。別のウィンドウに移動するときにそのアイコンを非表示にしたいだけですか? 続行する方法を提案してください。

私のメインウィンドウのコードは -

public partial class MonthView : MetroWindow
{

    public DateTime SelectedDate { get; set; }
    private System.Windows.Forms.ContextMenu contextMenu1;
    private System.Windows.Forms.MenuItem menuItem1;
    private System.Windows.Forms.MenuItem menuItem2;

    public MonthView()
    {

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

            Globals.ni = new NotifyIcon();
            this.contextMenu1 = new System.Windows.Forms.ContextMenu();
            this.menuItem1 = new System.Windows.Forms.MenuItem();
            this.menuItem2 = new System.Windows.Forms.MenuItem();
            Globals.ni.Icon = TimeSheet.Properties.Resources.MonthViewIcon;
            Globals.ni.Visible = true;
            Globals.ni.Click +=
            delegate(object sender, EventArgs args)
            {
                this.Show();
                this.WindowState = WindowState.Normal;

            };

            this.contextMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { this.menuItem1 });

            this.contextMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] { this.menuItem2 });

            this.menuItem1.Text = "Start";
            this.menuItem2.Text = "Exit";
            Globals.ni.ContextMenu = this.contextMenu1;
    }

    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);
        }
    }

    public void calItemSelectedDate(object sender, SelectionChangedEventArgs e)
    {
        DateTime d;
        if (sender is DateTime)
        {
            d = (DateTime)sender;
        }
        else
        {
            DateTime.TryParse(sender.ToString(), out d);
        }

        SelectedDate = d;

        ShowActivity(d);
     }

    public void ShowActivity(DateTime date)
    {
        DayView Activity = new DayView(date);
        Activity.Show();
        this.Hide();

    }

    private void SetButton_Click(object sender, RoutedEventArgs e)
    {
        SettingsView set = new SettingsView();
        set.Show();
        this.Hide();
    }

 }
4

2 に答える 2

0

WPFWindowにはShowInTaskbarプロパティがあります。これを に設定しfalseます。

この投稿にも興味があるかもしれません:

C# WPF - アプリケーション アイコン + ShowInTaskbar = False

于 2013-07-31T14:33:03.360 に答える
0

Windows で 1 つの NotifyIcon を共有しないのはなぜですか? ビューを切り替えると、NotifyIcon のアイコンを切り替えることができます。あなたはすでにそれを保持しているグローバルな「シングルトン」を持っています。

画面ごとに新しいアイコンを作成するということは、そこに 4 つのアイコンがあることを意味し、静的参照をたどるので、NotifyIcon にアクセスできなくなります。

于 2013-07-31T14:33:10.937 に答える