WPF桌面应用,Windows 10通知弹窗2016(UWP社区工具包)

8
我正在尝试使用我的WPF C#桌面应用程序显示Windows 10 Toasts。 不幸的是,非UWP或商店应用程序中有关Windows 10通知的API和一般支持似乎非常有限和混乱。 最近发布了UWP社区工具包,它似乎试图为我们简化事情。 还有这个商店应用程序Notifications Visualizer,可以帮助制作像这样的Toast:

enter image description here

我尝试使用UWP社区工具包提供的API和C#生成Toast通知。

使用Microsoft.Toolkit.Uwp.Notifications;

ToastContent toastContent = new ToastContent()
{
    Visual = new ToastVisual()
    {
        BindingGeneric = new ToastBindingGeneric()
        {
            Children =
            {
                new AdaptiveText()
                {
                    Text = "Matt sent you a friend request"
                },
                new AdaptiveText()
                {
                    Text = "Hey, wanna dress up as wizards and ride around on our hoverboards together?"
                }
            },
            AppLogoOverride = new ToastGenericAppLogo()
            {
                Source = "https://unsplash.it/64?image=1005",
                HintCrop = ToastGenericAppLogoCrop.Circle
            }
        }
    }
};


XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(toastContent.GetContent());

var toast = new ToastNotification(xmlDoc);
ToastNotificationManager.CreateToastNotifier(AppId).Show(toast); // Display toast

不幸的是,无论我尝试什么,似乎都无法得到相同的结果,出于某种原因,图像总是缺失:

enter image description here

我发现的大部分关于这些通知的信息都已过时或无用。能否有人解释一下呢?谢谢。


提问者非常明确地表明这是一个桌面应用程序。不确定 UWP Community Toolkit 命名空间是否应该在老式桌面应用程序上编译/运行,考虑到该工具包*专门设计用于UWP。 - BoltClock
@BoltClock,我不熟悉UWP,但据我所知,这基本上只是传递给底层通知API的XML代码。这难道不应该将整个过程解耦,并使调用该函数的应用程序类型几乎无关紧要吗? - r41n
2
我进行了更多的研究,发现Microsoft.Toolkit.Uwp.Notifications实际上有.NET库,而不仅仅是WinRT/UWP。我假设你正在使用.NET Standard库。所以,“UWP Community Toolkit”就这样了...无论如何,它应该将通知格式与API/平台分离。不幸的是,我还没有更新任何我的WPF应用程序以支持新的通知API,所以我不能进一步评论。 - BoltClock
实际上,我只是使用了 Microsoft.Toolkit.Uwp.Notifications Nuget 包,因为我找不到任何明确标记为 .NET Standard 的库。 - r41n
当我尝试使用 Microsoft.Toolkit.Uwp.UI.Controls Nuget 包时,出现错误提示说里面没有 .NET Framework 兼容的项。由于 .Notification 包已经成功安装,我猜想它也包含了 .NET Standard 库。 - r41n
1个回答

11

不能仅使用UWP工具包完成此操作

看起来只有通过.NET Standard才能实现这个功能,但需要分为两个步骤,其中一个不在UWP Toolkit的范围之内。

.NET Standard应用程序需要一个COM服务器和一个特殊的开始菜单快捷方式,以正确使用Windows 10操作中心。UWP应用程序似乎不需要或已经带有等效功能。这两个步骤应该在应用程序安装期间执行,而这显然是Microsoft UWP Toolkit无法参与的。因此,仅使用UWP Toolkit无法提供完整的解决方案,以自包含的方式显示.NET标准的Windows 10 Toasts。

替代方案

我在Github上找到了一个名字中带有“Microsoft”的鲜为人知的C#项目,它可以在没有UWP Toolkit的情况下立即运行。它要求您提供一个GUID和一个AppID字符串,然后用于注册COM Server并创建Shortcut。

一个更清晰的替代方案是这个库,它似乎提供了相同的功能。我还没有测试过它。

这两个解决方案都应该与Microsoft的NotificationsExtensions库一起使用,该库是UWP Toolkit的前身,有助于生成Toast所使用的XML代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接