注意:现在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”按钮,你会发现输出中出现了:
注意,第一步是已打包项目中必须执行的,否则你见到的将是程序抛出一大串又臭又长的异常(