#c# #wpf #notifyicon
#c# #wpf #уведомительный значок
Вопрос:
Мы написали настольное приложение WPF для Windows. Приложение запускается при запуске и в основном работает в фоновом режиме, но имеет пользовательский интерфейс, доступный через системный трей. Иногда приложению необходимо о чем-то уведомить пользователя, и поэтому для этого мы используем библиотеку NotifyIcon для создания уведомлений. Вот соответствующий код:
XAML:
<mui:ModernWindow
...
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:tb="http://www.hardcodet.net/taskbar"
... >
<tb:TaskbarIcon
x:Name="MyAppIcon"
...
</tb:TaskbarIcon>
</mui:ModernWindow>
Код на C #, стоящий за:
using Hardcodet.Wpf.TaskbarNotification
public void ShowStartupBalloon(string message)
{
// show balloon with built-in icon ie 'Info'
MyAppIcon.ShowBalloonTip(Properties.Resources.App_Title, message, BalloonIcon.Info);
}
Уведомления отображаются в виде небольших плавающих окон рядом с панелью задач, но (иногда, не всегда) они содержат строку «microsoft.explorer.notification» и GUID.
Мы хотели бы устранить их, поскольку они сбивают с толку наших клиентов; многие думают, что произошла какая-то ошибка в программном обеспечении. Кто-нибудь знает, как подавить это, чтобы отображать только текст уведомления, которое мы предоставили?
Комментарии:
1. Нашли ли вы решение этой проблемы? У меня периодически возникает такая же проблема с приложением winform.
2. @Steve0212 Нет, у меня все еще есть эта проблема.
3. Вы пытались обновить как Windows, так и
Hardcodet.NotifyIcon.Wpf
пакет? У меня нет этой проблемы с простым автономным приложением, содержащим только aTaskbarIcon
. Это может быть связано с самой Windows или с чем-то неправильным, что приложение делает в фоновом режиме или во время установки.
Ответ №1:
Я также столкнулся с этой проблемой. Из того, что я собрал, этот нижний текст — это способ Microsoft убедиться, что пользователь знает источник уведомления, и что случайные программы не могут выдавать себя за подлинное уведомление Windows. Похоже, что включение всплывающего окна (в вашем случае значка информации) вызывает это.
В результате вы можете полностью удалить этот текст, не указывая BalloonTipIcon, либо вообще не определяя свойство, либо определяя его как None:
MyAppIcon.ShowBalloonTip(Properties.Resources.App_Title, message, BalloonIcon.None);
Конечно, единственным компромиссом является то, что у вашего уведомления не будет значка.
Надеюсь, это поможет.
Ответ №2:
Показывать значок с автоматическим таймаутом:
public static void ShowBalloon(string title, string body)
{
// Show with icon
NotifyIcon ni = new NotifyIcon() { Visible = true, Icon = Properties.Resources.Icon};
// Timeout is deprecated since Vista
ni.ShowBalloonTip(0, title, body, ToolTipIcon.None);
// Dispose on event
ni.BalloonTipClosed = (sender, e) => ni.Dispose();
}
Ответ №3:
Microsoft.Explorer.Текст уведомления отображается из-за немедленного удаления объекта NotifyIcon.
Так что, в основном, если вы вызываете
MyAppIcon.ShowBalloonTip(5000);
MyAppIcon.Dispose();
вы получаете Microsoft.Explorer.Уведомление.{GUID} вместо имени приложения в заголовке уведомления.
Чтобы исправить это, избегайте прямого удаления и используйте то, что предложил Бени:
MyAppIcon.BalloonTipClosed = (sender, e) => MyAppIcon.Dispose();