Wpf как свернуть в трей
Перейти к содержимому

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

  • автор:

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

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

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

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

Прячем программу в трей на 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; >

Свернуть программу в трей

Author24 — интернет-сервис помощи студентам

Доброго времени суток Название говорит само за себя, как научить программу, при нажатии на кнопку «минимизации?» сворачиваться в трей?

Добавлено через 55 секунд
И сразу, как сделать при наведении на программу в трее мелкое меню? Спасибо всем заранее

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Правильно свернуть программу в трей
Здравствуйте. У меня возникли маленькие трудности с добавлением состояния сворачивания в трей.

Как свернуть окно в трей
Как сделать так, чтоб программа при сворачивании попадала в трэй? Чтоб имела своё меню. (wpf)

Как свернуть в трей?
У меня приложеньице всегда отображается в трее. А как сделать, чтобы при его закрытии оно бы тоже.

Как свернуть программу при старте?
как при запуске программы свернуть ее на панель задач ? консольную или виндовс форм думаю нету.

Администратор

Эксперт .NET

17027 / 13379 / 5218
Регистрация: 17.03.2014
Сообщений: 27,370
Записей в блоге: 1
Hastin, посмотри в сторону библиотеки WPF NotifyIcon
Регистрация: 24.03.2016
Сообщений: 270
OwenGlendower, ага, спасибо, буду разбираться
Регистрация: 26.01.2019
Сообщений: 6

— Необходимо подключить в ссылках System.Windows.Forms
— Добавить подходящий значок(.ico)для трея, в ресурсы (свойства проекта -> реусурсы -> добавить реусурс(добавить существующий файл)), ссылка на конвертер png https://icoconvert.com/image_to_icon_converter/

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
public partial class MainWindow : Window { private System.Windows.Forms.NotifyIcon myNotifyIcon; public MainWindow() { InitializeComponent(); myNotifyIcon = new System.Windows.Forms.NotifyIcon(); myNotifyIcon.Icon = new Icon(Directory.GetCurrentDirectory() + @"\tray_image.ico"); myNotifyIcon.Text = "Job Scheduler"; myNotifyIcon.MouseDoubleClick += new System.Windows.Forms.MouseEventHandler(MyNotifyIconMouseDoubleClick); } #region Появление значка в трее при сворачивании private void Window_StateChanged(object sender, EventArgs e) { if (this.WindowState == WindowState.Minimized) { this.ShowInTaskbar = false; myNotifyIcon.BalloonTipTitle = "Minimize Sucessful"; myNotifyIcon.BalloonTipText = "Minimized the app "; myNotifyIcon.ShowBalloonTip(400); myNotifyIcon.Visible = true; } else if (this.WindowState == WindowState.Normal) { myNotifyIcon.Visible = false; this.ShowInTaskbar = true; } } private void MyNotifyIconMouseDoubleClick(object sender, System.Windows.Forms.MouseEventArgs e) { this.WindowState = WindowState.Normal; } #endregion }

Всплывающее окно из трея — C# WPF

Захотелось как-то посмотреть реализацию всплывающего окна из трея, например как у маил агента или почтовых клиентов. Вбил в поиск но ничего хорошего не нашел, вернее нашел одну реализацию, но она мне не понравилась да и старая уже.

Решил тогда сделать сам, так как видел что у VS 2012 Express есть что-то связанное с анимацией, вернее у c# и wpf.

Для теста создадим новый проект впф и сишарп, пользоваться буду VS 2012 Express и сразу же добавим новое окно впф в проект.

Чтобы высчитать первоначальные координаты окна в зависимости от расположения панели задач я написал класс, который определяет местоположение трея и в зависимости от него возвращает координаты топ и лефт нашего окна которое должно выезжать, конечную точку для анимации и свойство окна к которому анимация будет применена.

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; namespace WpfApplication1 < class TrayPos < public tpos pos; private int top; private int left; private DependencyProperty prop; private int end = 0; int pw = (int)SystemParameters.PrimaryScreenWidth; int ph = (int)SystemParameters.PrimaryScreenHeight; int waw = (int)SystemParameters.WorkArea.Width; int wah = (int)SystemParameters.WorkArea.Height; public void getXY(int width, int height, out int _top, out int _left, out DependencyProperty _prop, out int _end) < switch(pos) < case tpos.top: left = pw - width; top = (int)SystemParameters.WorkArea.Top - height; prop = System.Windows.Window.TopProperty; end = (int)SystemParameters.WorkArea.Top; break; case tpos.left: left = (int)SystemParameters.WorkArea.Left - width; top = ph - height; prop = System.Windows.Window.LeftProperty; end = (int)SystemParameters.WorkArea.Left; break; case tpos.right: left = waw; top = ph - height; prop = System.Windows.Window.LeftProperty; end = waw - width; break; case tpos.bottom: default: left = pw - width; top = wah; prop = System.Windows.Window.TopProperty; end = wah - height; break; >_left = left; _top = top; _prop = prop; _end = end; > public TrayPos() < if (SystemParameters.WorkArea.Top >0) < pos = tpos.top; >else if (SystemParameters.WorkArea.Left > 0) < pos = tpos.left; >else if (pw > waw) < pos = tpos.right; >else pos = tpos.bottom; MessageBox.Show(pos.ToString()); > > > 

В конструкторе окна которое нам необходимо анимировать после InitializeComponent() ставим этот код

 TrayPos tpos = new TrayPos(); tpos.getXY((int)this.Width, (int)this.Height, out top, out left, out prop, out end); this.Top = top; this.Left = left; anim = new DoubleAnimation(end, TimeSpan.FromSeconds(1)); 

естественно необходимо в классе окна определить свойства

 DoubleAnimation anim; int left; int top; DependencyProperty prop; int end; 

после всех этих действий подписываемся на событие окна loaded

 private void Window_Loaded_1(object sender, RoutedEventArgs e)

все готово, теперь чтобы вызвать наше окно и увидеть эффект в основном окне на какое-нибудь событие ставим этот код

 Window1 notify = new Window1(); notify.Show(); 

Window1 — это имя класса окна для анимации

Естестевенно можно менять и время анимации и ширину окна и высоту, но самое главное что надо сделать, это убрать границы окна, запретить его ресайз, и убрать кнопки закрыть свернуть и развернуть.

  • C# WPF
  • окно уведомлений

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

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