开发者论坛

 找回密码
 注册 (请使用非IE浏览器)
查看: 4665|回复: 0

[Winforms使用技巧教程]如何在Apps中显示Toast Notifications(二)

[复制链接]

0

精华

8

贡献

1768

赞扬

特约版主

帖子
583
软币
4524
在线时间
275 小时
注册时间
2019-2-21
发表于 2020-3-6 10:30:28 | 显示全部楼层 |阅读模式

下载DevExpress v19.2完整版

DevExpress Winforms Controls 内置140多个UI控件和库,完美构建流畅、美观且易于使用的应用程序。使用WinForms PictureEdit控件,可以在表单上显示图像。为控件实现DirectX渲染支持,可以轻松处理大的高DPI图像。想要体验?点击下载>>

Activator和COM服务器

Windows在其“操作中心”中保留toast notifications。

通常,操作中心在用户关闭此屏幕后清除所有toasts(如果用户打开、关闭并在此打开操作中心,则该操作将为空),但是某些toasts可以保留在操作中心中,直到用户手动将其关闭为止。即使用户注销并返回Windows之后,此类toasts仍保留在操作中心中。此外,单击toasts会启动其父应用程序,要显示此类通知,请创建一个自定义Activator—DevExpress.XtraBars.ToastNotifications.ToastNotificationActivator类的后代。

[Guid("39697E4E-3543-4414-A694-90097B433DC6"), ComVisible(true)]
public class ToastNotificationActivatorCustom : ToastNotificationActivator {

public override void OnActivate(string arguments, Dictionary<string, string> data){
//specify what happens when a user interacts with a toast
}
}

您将需要注册此自定义Activator,在设计时设置组件的ApplicationActivator属性,或在代码中调用RegisterApplicationActivator方法。

toastNotificationsManager1.RegisterApplicationActivator(
typeof(ToastNotificationActivatorCustom));

您还需要注册一个COM服务器。 为此,请调用DevExpress.Data.ShellHelper.RegisterComServer方法。 请注意,如果使用ShellHelper类创建应用程序快捷方式,则需要使用带有activatorType参数的TryCreateShortcut方法重载。 否则,如果您使用应用安装程序添加应用程序快捷方式,则安装程序还必须添加HKEY_CURRENT_USER \ SOFTWARE \ Classes \ CLSID \ {-your-GUID-here-} \ LocalServer32注册表项,并以路径将应用程序可执行文件添加为 值。

if (!ShellHelper.IsApplicationShortcutExist("My Toast Application")
{
ShellHelper.TryCreateShortcut(
Process.GetCurrentProcess().MainModule.FileName,
toastNotificationsManager1.ApplicationId,
"My Toast Application",
@"D:\Work\Images\_Icons\ico\chain-icon.ico",
typeof(ToastNotificationActivatorCustom));
ShellHelper.RegisterComServer(
Process.GetCurrentProcess().MainModule.FileName,
typeof(ToastNotificationActivatorCustom));
}

GUIDs

使用toasts时,您需要几个唯一的ID。

  • 针对组件的ApplicationID属性
  • 针对每个通知的ID属性
  • 针对标记Activator类的Guid属性

您可以混搭键盘来生成唯一的ID,但是更有效的方法是使用联机GUID生成器或Visual Studio中包含的生成器("Tools | Create GUID")。

传递重要通知

即使您正确设置了所有内容,通知也可能不会传递给用户。 交付会受到以下因素的影响:

  • 较旧的OS版本
  • 操作中心设置中禁用了通知
  • 内部错误等

在这种情况下,您可以处理ToastNotificationsManager.Failed事件,以通过其他方法(例如标准消息框)将关键消息传递给用户。

using DevExpress.XtraBars.ToastNotifications;
using DevExpress.XtraEditors;

void manager_Failed(object sender, ToastNotificationFailedEventArgs e)
{
if ((string)e.NotificationID == "toast_connection_lost_id_das0ud0q94")
{
IToastNotificationProperties undeliveredToast =
toastNotificationsManager1.GetNotificationByID(e.NotificationID);
XtraMessageBox.Show(undeliveredToast.Body, undeliveredToast.Header);
}
}


DevExpress v19.2线上公开课即将开课,前10名免费参与哦~

DevExpress技术交流群:540330292      欢迎一起进群讨论


回复

使用道具 举报

Archiver|手机版|小黑屋|开发者网 ( 苏ICP备08004430号-2 )
版权所有:南京韵文教育信息咨询有限公司

GMT+8, 2024-12-4 01:59

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表