2024年终活动

DevExpress控件使用交流,DevExpress中国社区Dev联系电话 联系电话:023-68661681

DevExpress Winforms使用技巧教程:如何在WinForms Apps中显示Toast Notifications(二)

来源:   发布时间:2020-03-05   浏览:1927次

下载DevExpress v19.2完整版    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      欢迎一起进群讨论

扫描关注DevExpress中文网微信公众号,及时获取最新动态及最新资讯

DevExpress中文网微信
本站文章除注明转载外,均为本站原创或翻译
欢迎任何形式的转载,但请务必注明出处,尊重他人劳动成果
转载请注明:文章转载自:DevExpress控件中文网 [https://www.devexpresscn.com/]
本文地址:https://www.devexpresscn.com/post/1581.html

相关产品: DevExpress Universal Subscription,

扫码咨询
电话咨询
023-68661681
返回
顶部