WinUI 3不会Toast通知?看过来!

注意:现在Starcloudsea已经退出CSDN,所以这篇文章的准确性已经无法在CommunityToolkit.WinUI.Notifications的7.1.2+版本得到保证(虽然这玩意两年半都没更新),如果这篇文章不再适用于新版本,你可能需要另辟蹊径。

为了搞定这个问题,我搞了整整一个月,最后还是一个大佬帮我搞的🥴

记得加 CommunityToolkit.WinUI.Notifications NuGet包

首先,在Package.appxmanifest(未打包项目跳到第二步)中加入:

<Extensions>

	<desktop:Extension Category="windows.toastNotificationActivation">
		<desktop:ToastNotificationActivation ToastActivatorCLSID="A41FE01C-2EF2-4FC1-9C30-BB19C16222E9" />
	</desktop:Extension>

	<com:Extension Category="windows.comServer">
		<com:ComServer>
			<com:ExeServer Executable="TestApp1.exe" Arguments="-ToastActivated" DisplayName="Toast activator">
				<com:Class Id="A41FE01C-2EF2-4FC1-9C30-BB19C16222E9" DisplayName="Toast activator"/>
			</com:ExeServer>
		</com:ComServer>
	</com:Extension>

</Extensions>

记得将里面的TestApp1.exe换成自己的应用名称(记得加.exe后缀),以及将里面的A41FE01C-2EF2-4FC1-9C30-BB19C16222E9替换成自己的GUID(可以用VS自带的GUID生成器)

第二步,设置Toast通知:

var a = new CommunityToolkit.WinUI.Notifications.ToastContentBuilder();
a.AddArgument("action", "viewConversation");
a.AddArgument("conversationId", 9813);
a.AddText("Andrew sent you a picture");
a.AddText("Check this out, The Enchantments in Washington!");
a.Show();

至于a.AddArgument("action", "viewConversation");
a.AddArgument("conversationId", 9813);的意思,你可以参考下NewBing的回答:

至于AddText,不用多说了吧,自己运行看看(

至此,你的Toast通知就设置完毕了。

如果想往里面加入按钮,那么你就要参考第三步了:

第三步,在a.Show运行之前,加入:

a.AddButton(new ToastButton()
    .SetContent("Like")
    .AddArgument("action", "aaa")
    .SetBackgroundActivation());

然后在程序入口处(通常是App.xaml.cs)加入:

public App()
{
    CommunityToolkit.WinUI.Notifications.ToastNotificationManagerCompat.OnActivated += ToastNotificationManagerCompat_OnActivated;
}

private static void ToastNotificationManagerCompat_OnActivated(CommunityToolkit.WinUI.Notifications.ToastNotificationActivatedEventArgsCompat e)
{
    var ToastClickArgs = CommunityToolkit.WinUI.Notifications.ToastArguments.Parse(e.Argument);
    if (ToastClickArgs.Count > 0)
    {
        foreach (var ToastClickItem in ToastClickArgs)
        {
            switch (ToastClickItem.Value)
            {
                case "aaa":
                    //执行代码块
                    Debug.WriteLine("成了!!!!!!!!!!");
                 break;
            }
        }
    }
}

这里的aaa代表着刚刚在Button里创建的aaa,大家可以随意修改,只要两个名称一样就行。

如果你想创建多个按钮,那么就多添加几个case。

好,如果你的代码是现抄的,那么你在执行第二步的代码时,会发现有通知出来了(记得把勿扰模式关掉):

如果你点击了“Like”按钮,你会发现输出中出现了:

注意,第一步是已打包项目中必须执行的,否则你见到的将是程序抛出一大串又臭又长的异常(

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值