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 处理
}
}
注意事项
- NuGet 包引用:确保安装了
Microsoft.Toolkit.Uwp.NotificationsNuGet 包 - 权限设置:在 Package.appxmanifest 中启用通知权限
- 线程处理:
OnActivated事件在后台线程触发,需要MainThread.BeginInvokeOnMainThread来更新 UI - 应用生命周期:即使应用未运行,通知点击也应该能激活应用并执行相应操作