Событие клика WPFToastNotification - PullRequest
0 голосов
/ 09 ноября 2018

Я разрабатываю приложение для 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);

Это способ показать уведомление. Теперь мне нужно событие click для этого уведомления. Как мне этого добиться?

1 Ответ

0 голосов
/ 09 ноября 2018

Чтобы получить событие клика, вам нужно иметь доступ к всплывающему окну. К сожалению, просмотр открытого исходного кода показывает, что созданные окна собраны как частные .

Но можно использовать публичную функцию WPFNotification.Core.NotifyBox.Show, определив свое собственное окно. Вы можете использовать в своем коде реализацию по умолчанию и расширить ее подпиской на событие click, например:

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);

Обратите внимание, что вам нужно добавить ресурсы шаблона, как описано в Getting Started , чтобы показать всплывающее окно по умолчанию.

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

Если указанный вами шаблон "Notification" недоступен, просто используйте стандартный NotificationConfiguration.DefaultConfiguration.TemplateName.

...