WPF本机windows 10吐司

时间:2016-02-16 19:17:35

标签: wpf windows-10

使用.NET WPF和Windows 10,有没有办法使用c#将本地Toast通知推送到动作中心?我只看到人们为此制作自定义对话框,但必须有办法通过操作系统来完成。

6 个答案:

答案 0 :(得分:6)

您可以使用true NotifyIcon命名空间,如下所示:

System.Windows.Forms

这应该可以在.NET Framework 1.1之后运行。有关class Test { private readonly NotifyIcon _notifyIcon; public Test() { _notifyIcon = new NotifyIcon(); // Extracts your app's icon and uses it as notify icon _notifyIcon.Icon = Icon.ExtractAssociatedIcon(Assembly.GetExecutingAssembly().Location); // Hides the icon when the notification is closed _notifyIcon.BalloonTipClosed += (s, e) => _notifyIcon.Visible = false; } public void ShowNotification() { _notifyIcon.Visible = true; // Shows a notification with specified message and title _notifyIcon.ShowBalloonTip(3000, "Title", "Message", ToolTipIcon.Info); } } 的参数,请参阅this MSDN page

正如我发现的那样,ShowBalloonTip的第一个参数(在我的例子中是3000毫秒)被慷慨地忽略了。评论赞赏;)

答案 1 :(得分:1)

更新

这似乎在Windows 10上正常工作

https://msdn.microsoft.com/library/windows/apps/windows.ui.notifications.toastnotificationmanager.aspx

你需要添加这些小数据

Install-Package WindowsAPICodePack-Core
Install-Package WindowsAPICodePack-Shell

答案 2 :(得分:1)

我知道这是一篇过时的文章,但是我认为这可能会帮助像我在Toast Notifications上运行Win 10时那样迷失于此的人。

这似乎是一个很好的大纲- Send a local toast notification from desktop C# apps

我使用了该链接以及这篇很棒的博客文章-Pop a Toast Notification in WPF using Win 10 APIs

使我的WPF应用程序在Win10上运行。与“旧学校”通知图标相比,这是一个更好的解决方案,因为即使在通知进入动作中心后,您也可以添加按钮来完成敬酒中的特定动作。

注意-第一个链接提到“如果您正在使用WiX”,但这确实是一个要求。必须先创建并安装Wix设置项目,然后Toasts才能运行。由于您的应用程序的appUserModelId需要首先注册。除非您在其中阅读了我的评论,否则第二个链接不会提及这一点。

提示-安装应用程序后,您可以通过在运行行 shell:appsfolder 上运行此命令来验证AppUserModelId。确保您在详细信息视图中,然后单击查看选择详细信息,并确保选中了AppUserModeId。将您的AppUserModelId与其他已安装的应用进行比较。

这是我使用过的代码的一部分。这里有两点注意,我没有安装第一个链接的第7步中提到的“通知库”,因为我更喜欢使用原始XML。

private const String APP_ID = "YourCompanyName.YourAppName";

    public static void CreateToast()
    {
        XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(
            ToastTemplateType.ToastImageAndText02);

        // Fill in the text elements
        XmlNodeList stringElements = toastXml.GetElementsByTagName("text");
        stringElements[0].AppendChild(toastXml.CreateTextNode("This is my title!!!!!!!!!!"));
        stringElements[1].AppendChild(toastXml.CreateTextNode("This is my message!!!!!!!!!!!!"));

        // Specify the absolute path to an image
        string filePath = Environment.GetFolderPath(Environment.SpecialFolder.ProgramFilesX86) + @"\Your Path To File\Your Image Name.png";
        XmlNodeList imageElements = toastXml.GetElementsByTagName("image");
        imageElements[0].Attributes.GetNamedItem("src").NodeValue = filePath;

        // Change default audio if desired - ref - https://docs.microsoft.com/en-us/uwp/schemas/tiles/toastschema/element-audio
        XmlElement audio = toastXml.CreateElement("audio");
        //audio.SetAttribute("src", "ms-winsoundevent:Notification.Reminder");
        //audio.SetAttribute("src", "ms-winsoundevent:Notification.IM");
        //audio.SetAttribute("src", "ms-winsoundevent:Notification.Mail"); // sounds like default
        //audio.SetAttribute("src", "ms-winsoundevent:Notification.Looping.Call7");  
        audio.SetAttribute("src", "ms-winsoundevent:Notification.Looping.Call2");
        //audio.SetAttribute("loop", "false");
        // Add the audio element
        toastXml.DocumentElement.AppendChild(audio);

        XmlElement actions = toastXml.CreateElement("actions");
        toastXml.DocumentElement.AppendChild(actions);

        // Create a simple button to display on the toast
        XmlElement action = toastXml.CreateElement("action");
        actions.AppendChild(action);
        action.SetAttribute("content", "Show details");
        action.SetAttribute("arguments", "viewdetails");

        // Create the toast 
        ToastNotification toast = new ToastNotification(toastXml);

        // Show the toast. Be sure to specify the AppUserModelId
        // on your application's shortcut!
        ToastNotificationManager.CreateToastNotifier(APP_ID).Show(toast);
    }

答案 3 :(得分:0)

我设法通过引用

来访问Windows 8和10的工作API
  • Windows.winmd: C:\程序文件(x86)\视窗套件\ 8.0 \参考\ CommonConfiguration \中性

这会公开Windows.UI.Notifications

答案 4 :(得分:0)

您可以查看此帖子,了解创建所需的COM服务器,以便在AC中使用Win32应用https://blogs.msdn.microsoft.com/tiles_and_toasts/2015/10/16/quickstart-handling-toast-activations-from-win32-apps-in-windows-10/保留通知。

可在https://github.com/WindowsNotifications/desktop-toasts

找到工作样本

答案 5 :(得分:0)

添加对以下内容的引用:

C:\ Program Files(x86)\ Windows Kits \ 8.1 \ References \ CommonConfiguration \ Neutral \ Windows.winmd

C:\ Program Files(x86)\参考程序集\ Microsoft \ Framework.NETCore \ v4.5 \ System.Runtime.WindowsRuntime.dll

并使用以下代码:

 XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastImageAndText04);

        // Fill in the text elements
        XmlNodeList stringElements = toastXml.GetElementsByTagName("text");
        for (int i = 0; i < stringElements.Length; i++)
        {
            stringElements[i].AppendChild(toastXml.CreateTextNode("Line " + i));
        }

        // Specify the absolute path to an image
        string imagePath = "file:///" + Path.GetFullPath("toastImageAndText.png");
        XmlNodeList imageElements = toastXml.GetElementsByTagName("image");

        ToastNotification toast = new ToastNotification(toastXml);

ToastNotificationManager.CreateToastNotifier(“吐司样品”).Show(吐司);

原始代码可以在这里找到:https://www.michaelcrump.net/pop-toast-notification-in-wpf/