• Winforms界面开发技巧:Apps中显示Toast Notifications(二)


    下载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: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      欢迎一起进群讨论

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

    DevExpress中文网微信

  • 相关阅读:
    49. 字母异位词分组
    73. 矩阵置零
    Razor语法问题(foreach里面嵌套if)
    多线程问题
    Get json formatted string from web by sending HttpWebRequest and then deserialize it to get needed data
    How to execute tons of tasks parallelly with TPL method?
    How to sort the dictionary by the value field
    How to customize the console applicaton
    What is the difference for delete/truncate/drop
    How to call C/C++ sytle function from C# solution?
  • 原文地址:https://www.cnblogs.com/AABBbaby/p/12425166.html
Copyright © 2020-2023  润新知