Най-лесният начин да накарате програма да се минимизира в системната област с помощта на .NET 4

Създавам ново WPF приложение и трябва да мога да минимизирам приложението и да имам хубаво и удобно в системната област, точно до часовника (или в тази обща област).

Това трябва да работи на Windows XP, Vista и 7. Не е необходимо да поддържам по-стари версии на Windows.

Какъв е най-лесният начин да постигна това, ако използвам .NET 4?


person Only Bolivian Here    schedule 19.04.2012    source източник


Отговори (3)


Пример във форума на MSDN

Ето бърз пример, който показва как да минимизирате до областта за уведомяване. Трябва да добавите препратки към сборките System.Window.Forms и System.Drawing.

public partial class Window1 : System.Windows.Window
{

    public Window1()
    {
        InitializeComponent();

        System.Windows.Forms.NotifyIcon ni = new System.Windows.Forms.NotifyIcon();
        ni.Icon = new System.Drawing.Icon("Main.ico");
        ni.Visible = true;
        ni.DoubleClick += 
            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();

        base.OnStateChanged(e);
    }
}
person LaGrandMere    schedule 19.04.2012
comment
Така че трябва да имам икона, наречена Main.ico в моята ApplicationDirectory? - person Felix D.; 04.07.2016
comment
LeGrandMere - благодаря за отличната кратка корекция. Felix D: Можете да добавите икона, като използвате: var iconStream = Application.GetResourceStream(new Uri( pack://application:,,,/LaunchPad.UI;component/Images/Launch.ico))?.Stream; след това направете var ni = new NotifyIcon { Icon = new Icon(iconStream), Visible = true }; - person yonsk; 16.12.2016
comment
добавете икона към вашето решение и след това отворете свойствата на проекта и променете събитията за публикуване на компилация по следния начин: copy /Y $(SolutionDir)Utility\Main.ico $(SolutionDir)Utility\bin\Debug\Main.ico - person Barış Akkurt; 05.06.2019
comment
Имах трудности с достъпа до файла с иконите. Моето решение сега беше: Добавете файла в директорията на приложението. В Solution Explorer променете настройката за изграждане на embedded resource. След това иконата може да бъде достъпна чрез: Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("YOUR_NAMESPACE.ICON_FILENAME")) и да бъде зададена върху NotificationIcon, както в отговора ni.Icon = new System.Drawing.Icon(stream); - person Matthias Tylkowski; 05.05.2020
comment
Работи добре. От 2020 г. във VS 2019 16.7.3 присъствието на base.OnStateChanged(e) причинява препълване на стека. - person Emil Mocan; 21.09.2020
comment
Освен това не забравяйте да изхвърлите иконата за известяване, след като прозорецът бъде затворен. Тогава е по-добре да го направите член. - person Emil Mocan; 21.09.2020

Имах успех с помощта на тази безплатна реализация на икона за известяване в WPF.

http://www.hardcodet.net/projects/wpf-notifyicon

Настройването е доста лесно и изходният код е предоставен. Не разчита на Windows Forms, така че е „чист“ WPF и много персонализиран.

Можете да намерите урок как да го използвате в CodeProject.
А ето и пакета Nuget

person Alex McBride    schedule 19.04.2012

Добавете notifyIcon към вашето приложение от Toolbox.
Изберете вашето основно form ›› отидете на Properties ›› изберете иконата Events ›› под FromClosing event въведете MainForm_FormClosing ›› натиснете enter.

въведете описание на изображението тук

В отворения файл .cs въведете следното действие за събитие:

private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
{
     this.Hide();
     notifyIcon.Visible = true;
     ShowInTaskbar = false;
     e.Cancel = true;
}

Сега основният ви прозорец на ФОРМУЛЯР ще бъде минимизиран до системната област, когато щракнете върху бутона X. Следващата стъпка е да върнете FORM обратно в нормално състояние.
Отидете до Properties на вашия notifyIcon ›› намерете DoubleClick event ›› въведете NotifyIcon_DoubleClick и натиснете enter, за да получите функция за събитие, създадена за вас.

въведете описание на изображението тук

Поставете този код във вашето събитие:

private void NotifyIcon_DoubleClick(object sender, EventArgs e)
{
    this.Show();
    notifyIcon.Visible = false;
}

Сега, ако искате да направите иконата за известяване в изискан стил, можете да добавите контекстно меню и да го свържете с вашата икона за известяване, така че да получите нещо подобно:

въведете описание на изображението тук

Ето къде свързвате contextMenuStrip с NotifyIcon:

въведете описание на изображението тук

Късмет!

person Serge Voloshenko    schedule 12.01.2017
comment
Струва ми се, че описвате Windows Forms вместо WPF. - person TN.; 03.12.2017
comment
Въпросът е за WPF, а не вместо WINFORM - person Amir Astaneh; 05.05.2020