首页 > 解决方案 > WPFToastNotification 点击​​事件

问题描述

我正在开发一个 Windows 应用程序,因为我需要显示通知,并且当用户单击该通知时,它应该根据参数导航到该页面。

目前,通知正在显示。我正在使用 WPFNotification Nuget 包来实现这一点。这是我加载通知的代码:

INotificationDialogService _dailogService = new NotificationDialogService();

var newNotification = new Notification()
{
    Title = "New Message from ",
    Message = "123",
    ImgURL = "/icon.png",
};

var notificationConfiguration = new NotificationConfiguration(
    TimeSpan.FromSeconds(3),
    1000,
    500,
    "Notification",
    NotificationFlowDirection.RightBottom
);

_dailogService.ShowNotificationWindow(newNotification);

它是显示通知的方法。现在,我需要为该通知设置一个点击事件。我怎样才能做到这一点?

标签: c#wpftoast

解决方案


要获得点击事件,您需要访问弹出的窗口。不幸的是,查看公共源代码显示创建的窗口是私有的。

但是可以WPFNotification.Core.NotifyBox.Show通过定义自己的自定义窗口来使用公共功能。您可以在代码中使用默认实现,并使用点击事件订阅来扩展它,例如:

public static void Show(object content, NotificationConfiguration configuration)
{
    DataTemplate notificationTemplate = (DataTemplate)Application.Current.Resources[configuration.TemplateName];
    Window window = new Window()
    {
        Title = "",
        Width = configuration.Width.Value,
        Height = configuration.Height.Value,
        Content = content,
        ShowActivated = false,
        AllowsTransparency = true,
        WindowStyle = WindowStyle.None,
        ShowInTaskbar = false,
        Topmost = true,
        Background = Brushes.Transparent,
        UseLayoutRounding = true,
        ContentTemplate = notificationTemplate
    };

    //Subscribe to clicks
    window.PreviewMouseDown += NotificationWindow_PreviewMouseDoubleClick;

    WPFNotification.Core.NotifyBox.Show(
        window, configuration.DisplayDuration, configuration.NotificationFlowDirection);
}

private static void NotificationWindow_PreviewMouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    System.Diagnostics.Debug.WriteLine("Clicked!!!");
}

现在您可以显示通知,例如

Show(newNotification, notificationConfiguration);

请注意,您需要添加模板资源,如入门中所述,以显示默认样式的弹出窗口。

<ResourceDictionary>
  <ResourceDictionary.MergedDictionaries>
   <ResourceDictionary Source="/WPFNotification;component/Assets/NotificationUI.xaml"/>
  </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

如果"Notification"您指定的模板不可用,请使用默认模板NotificationConfiguration.DefaultConfiguration.TemplateName


推荐阅读