You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WinUI 3非打包应用Toast通知按钮点击无响应,求完整解决方案?

问题

尽管已完成事件注册和清单配置,非打包WinUI 3应用中的Toast通知按钮仍无法触发OnNotificationInvoked事件处理程序。

症状

  • Toast通知可正常显示且带有按钮
  • OnNotificationInvoked断点从未触发
  • 未抛出任何错误,按钮仅无响应
  • 应用在Windows通知设置中的注册状态显示正常

解决方案

1. 调整激活器注册时机与方式

非打包WinUI 3应用需在启动阶段完成Toast通知激活器的注册,且必须指定正确的AUMID(应用用户模型ID)。在App.xaml.cs的OnLaunched方法中添加如下逻辑:

protected override void OnLaunched(LaunchActivatedEventArgs args)
{
    // 注册激活事件回调
    ToastNotificationManagerCompat.OnActivated += HandleToastActivation;
    // 注册AUMID与激活器类
    ToastNotificationManagerCompat.RegisterAumidAndComServer<CustomToastActivator>("你的应用AUMID");
}

private void HandleToastActivation(ToastNotificationActivatedEventArgsCompat e)
{
    // 解析按钮传递的参数,替换原OnNotificationInvoked的处理逻辑
    var toastArgs = ToastArguments.Parse(e.Argument);
    // 根据参数执行对应操作,例如判断按钮类型
    if (toastArgs.Contains("action=confirm"))
    {
        // 处理确认按钮逻辑
    }
}

2. 校验Toast按钮的参数配置

确保Toast内容中的按钮正确设置activationType与arguments属性,示例XML结构:

<toast>
    <visual>
        <binding template="ToastGeneric">
            <text>通知标题</text>
            <text>点击下方按钮触发操作</text>
        </binding>
    </visual>
    <actions>
        <action content="确认" activationType="Foreground" arguments="action=confirm"/>
        <action content="取消" activationType="Foreground" arguments="action=cancel"/>
    </actions>
</toast>

3. 确认激活器类的正确性

自定义激活器需继承ToastNotificationActivatorCompat并标记ComVisible(true)特性:

[ComVisible(true)]
public class CustomToastActivator : ToastNotificationActivatorCompat
{
    public override void OnActivated(string arguments, NotificationUserInput userInput, string appUserModelId)
    {
        // 可在此补充额外激活逻辑
        base.OnActivated(arguments, userInput, appUserModelId);
    }
}

4. 验证AUMID的有效性

非打包应用的AUMID格式通常为[发布者ID].[应用名称],可通过注册表确认:

  1. 打开注册表编辑器,导航至HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\CurrentVersion\AppModel\Repository\Packages
  2. 找到对应应用的项,查看PackageFamilyName字段,结合应用名称组成正确的AUMID

5. 重置通知注册状态

  1. 打开Windows设置 → 系统 → 通知,找到你的应用,关闭后重新开启通知权限
  2. 重启应用,确保激活器完成重新注册

内容的提问来源于stack exchange,提问作者John the horn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 08:43:17