Toast Notifications(或简称Toasts)是最初在Microsoft Windows 8中引入的平面通知,您可以使用DevExpress ToastNotificationManager组件将这些通知合并到下一个Windows Forms应用程序中。
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:WorkImages_Iconsicochain-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 欢迎一起进群讨论
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!