Перейти к содержимому

Wpf как свернуть в трей

  • автор:

Как свернуть forms в трей и развернуть если запущены вычисления?

Добрый день! Подскажите пожалуйста, как развернуть программу из трея, во время работы функции?С#. Или запустить контекстное меню трея во время работы функции.

  • Вопрос задан более трёх лет назад
  • 501 просмотр

Комментировать

Решения вопроса 2

petermzg

Самый лучший программист

trayMenu = new ContextMenu(); var items = trayMenu.MenuItems; items.Add("Open", OnOpenMainWindow); items.Add("-"); items.Add("Quit", OnQuitApplication); private void OnOpenMainWindow(object sender, EventArgs e)

А долго работающую функцию надо вынести в отдельный поток.

Ответ написан более трёх лет назад

Нравится 1 2 комментария

Сворачивание приложения в трей

Допустим есть программа которая фоном делает определенные операции, не важно какие, допустим каждые 10 секунд собирает информацию по нагрузке ЦП и RAM. Программа сама по себе десктопная, запускается ручками, надо бы сделать ее чтобы она в авторане запускалась. Вопрос: как научить ее чтобы при сворачивании она скрывалась в трей, и при необходимости опрокидывала какие либо сообщения. Например как антивирус касперского. Висит в трее, опрокидывает уведомления, когда открываешь — появляется в панеле задач

Отслеживать
задан 6 июл 2017 в 6:39
Peter Lavreniuk Peter Lavreniuk
2,941 7 7 золотых знаков 28 28 серебряных знаков 55 55 бронзовых знаков

1 ответ 1

Сортировка: Сброс на вариант по умолчанию

В XAML добавьте пространство имен: xmlns:tb=»http://www.hardcodet.net/taskbar»

В контейнер окна поместите:

Для того чтобы свернуть окно в трей, подпишитесь на событие StateChanged :

WindowState prevState; private void Window_StateChanged(object sender, EventArgs e)

Чтобы развернуть, например при левом клике по иконке в трее:

private void TaskbarIcon_TrayLeftMouseDown(object sender, RoutedEventArgs e)

Для отображения каких-либо сообщений, можно использовать, например, Popup или ToolTip

Свернуть окно в трей [WPF]

Казалось бы банальный вопрос, но гугл показывает лишь решения для WinForm..

Собственно по сабжу: нужно чтобы при нажатии на кнопку сворачивания или закрытия приложение сворачивалось в трей.

Я понимаю, что можно отловить событие сворачивания и закрытия и вместо них скрыть форму. А вот что дальше: как поместить функциональную иконку в трей?

Иконка с вполне привычным для неё функционалом вроде раскрытия окна по двойному клику и наличием контекстного меню.

Как такое реализовать? Желательно с соблюдением паттерна MVVM.

Я использовал это http://www.hardcodet.net/

xmlns:tb="http://www.hardcodet.net/taskbar" . , Path=WindowControls>" Visibility="" ToolTipText="Программа в работе. Кликните, чтобы открыть окно" IconSource="mainIcon.ico" MenuActivation="RightClick" LeftClickCommand="" /> 

Как видите, всё вполне в MVVM

Скачивается через NUGET этой командой:

Прячем программу в трей на C#

Всем привет, сегодня учимся сворачивать в трей программу написанную в C#. Итак создаем новый проект «Приложение Windows Forms». Переходим в конструктор форм и жмем «панель инструментов». Ищем элемент «NotifyIcon»

и перетаскиваем его на нашу форму.

Как видите он появился с низу, и если по нему кликнуть снизу, откроются свойства.

В свойствах нас интересуют параметры: Text, Icon. В Text мы задаем тот текст, который будет показываться при наведении на иконку в трее, Icon — та самая иконка что будет показываться, поэтому обязательно сделайте (я делал в GIMP’е) или найдите в интернете.

Итак, теперь нам надо привязать к нашей форме код убирания окна в трей, показ нашей иконки и добавить разворачивание нашего окна. Кликните 2 раза по нашей форме, и мы перейдем из конструктора в класс нашей формочки.

Моя форма называется w1 и следовательно функция конструктора тоже называется w1, вот начала кода:

using System; using System.Windows.Forms; namespace FwLogger < public partial class w1 : Form < public w1() < InitializeComponent(); >> >

Далее в конструктор класса мы добавляем код и все связанные с ним функции, и вот у нас получается:

public w1() < InitializeComponent(); // делаем невидимой нашу иконку в трее notifyIcon1.Visible = false; // добавляем Эвент или событие по 2му клику мышки, //вызывая функцию notifyIcon1_MouseDoubleClick this.notifyIcon1.MouseDoubleClick += new MouseEventHandler(notifyIcon1_MouseDoubleClick); // добавляем событие на изменение окна this.Resize += new System.EventHandler(this.Form1_Resize); >private void Form1_Resize(object sender, EventArgs e) < // проверяем наше окно, и если оно было свернуто, делаем событие if (WindowState == FormWindowState.Minimized) < // прячем наше окно из панели this.ShowInTaskbar = false; // делаем нашу иконку в трее активной notifyIcon1.Visible = true; >> private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e) < // делаем нашу иконку скрытой notifyIcon1.Visible = false; // возвращаем отображение окна в панели this.ShowInTaskbar = true; //разворачиваем окно WindowState = FormWindowState.Normal; >

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *