windows创建的通知激活事件在哪接收

ToastContentBuilder创建的通知激活事件在哪接收

ToastContentBuilder创建的按钮事件在哪接收

通知激活事件在哪接收

Microsoft.Toolkit.Uwp.Notifications (ToastContentBuilder) 来构建 Windows 通知 通过 Toast 激活回调 传递到你的应用

在哪接收点击按钮后的这些函数 ToastContentBuilder

await ShowWindowsNotification3(reminder); private async Task ShowWindowsNotification3(ReminderMessage reminder)
{
    try
    {
        // 使用 ToastContentBuilder 创建通知
        new ToastContentBuilder()
            .AddArgument("action", "view")
            .AddArgument("todoId", reminder.TodoId.ToString())
            .AddText($"⏰ {reminder.Title}")
            .AddText(reminder.Description ?? "提醒时间到了!")
            .AddButton(new ToastButton()
                .SetContent("查看详情")
                .AddArgument("action", "view")
                .AddArgument("todoId", reminder.TodoId.ToString()))
            .AddButton(new ToastButton()
                .SetContent("稍后提醒")
                .AddArgument("action", "snooze")
                .AddArgument("todoId", reminder.TodoId.ToString()))
            .AddButton(new ToastButton()
                .SetContent("完成")
                .AddArgument("action", "complete")
                .AddArgument("todoId", reminder.TodoId.ToString()))
            .Show();
         //ServiceProvider.GetService<INotificationService>()?.ShowNotification($"⏰ {reminder.Title}",reminder.Description ?? "提醒时间到了!");
        Console.WriteLine($"Windows通知已显示: {reminder.Title}");
    }
    catch (Exception ex)
    {
        Console.WriteLine($"Windows通知错误: {ex.Message}");
    }
}在哪接收点击按钮后的这些函数

✅ WinUI 3 / 桌面应用(非 UWP)

在桌面应用中,你需要订阅 ToastNotificationManagerCompat.OnActivated 事件来接收点击参数

// 注册 Toast 激活事件

using Microsoft.Toolkit.Uwp.Notifications; // ToastContentBuilder
using Microsoft.Toolkit.Uwp.Notifications; // ToastNotificationManagerCompat
using System;

public partial class App : Application
{
    protected override void OnLaunched(LaunchActivatedEventArgs args)
    {
        // 注册 Toast 激活事件
        ToastNotificationManagerCompat.OnActivated += toastArgs =>
        {
            // 解析参数
            var argsDict = toastArgs.Argument;

            // 如果用 AddArgument,会被序列化为 query string
            // 比如:action=view&todoId=123
            var query = System.Web.HttpUtility.ParseQueryString(argsDict);
            string action = query["action"];
            string todoId = query["todoId"];

            switch (action)
            {
                case "view":
                    ShowReminderDetail(todoId);
                    break;
                case "snooze":
                    SnoozeReminder(todoId);
                    break;
                case "complete":
                    CompleteReminder(todoId);
                    break;
            }
        };
    }

    private void ShowReminderDetail(string todoId)
    {
        Console.WriteLine($"查看详情: {todoId}");
    }

    private void SnoozeReminder(string todoId)
    {
        Console.WriteLine($"稍后提醒: {todoId}");
    }

    private void CompleteReminder(string todoId)
    {
        Console.WriteLine($"完成任务: {todoId}");
    }
}

✅ 如果是 UWP 应用

可以直接在 App.xaml.cs → OnActivated 中获取参数

protected override void OnActivated(IActivatedEventArgs args)
{
    if (args.Kind == ActivationKind.ToastNotification)
    {
        var toastArgs = args as ToastNotificationActivatedEventArgs;
        var arguments = toastArgs.Argument; // action=view&todoId=123

        var query = System.Web.HttpUtility.ParseQueryString(arguments);
        string action = query["action"];
        string todoId = query["todoId"];

        // 同样用 switch 处理
    }
}

注意事项

  1. NuGet 包引用:确保安装了 Microsoft.Toolkit.Uwp.Notifications NuGet 包
  2. 权限设置:在 Package.appxmanifest 中启用通知权限
  3. 线程处理OnActivated 事件在后台线程触发,需要 MainThread.BeginInvokeOnMainThread 来更新 UI
  4. 应用生命周期:即使应用未运行,通知点击也应该能激活应用并执行相应操作