Самый простой способ свести программу к панели задач с помощью .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 - спасибо за отличное лаконичное исправление. Феликс D: Вы можете добавить значок, используя: var iconStream = Application.GetResourceStream (новый 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
Мне было трудно получить доступ к файлу значков. Мое решение было: добавить файл в каталог приложения. В обозревателе решений измените настройку сборки на 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 type 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 ›› type 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