windows 8 metro app - 吐司通知

时间:2012-02-24 00:29:11

标签: notifications toast microsoft-metro

我正在使用Toast通知开发Windows 8 metro风格的应用程序。 (C#+ xaml组合) 我查看了MS metro样式示例代码,并尝试将其应用到我的项目中, 看起来我使用的代码完全相同,但我不知道为什么它不起作用..

(没有错误,它构建成功但只是不起作用。)

我想要做的很简单:

有一个按钮。 当button_click事件发生时,我想弹出一个Toast通知。

这就是我所做的:

namespace Application1
{
    public sealed partial class BlankPage : Page
    {
        public BlankPage()
        {
            this.InitializeComponent();
            Scenario2Init();
        }

        void Scenario2Init()
        {
            toastTest.Click += (sender, e) => { ToastAlarm(true); };
        }

        void ToastAlarm(bool loopAudio)
        {
            XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastText02);
            // Toasts can optionally be set to long duration by adding the 'duration' attribute
            IXmlNode toastNode = toastXml.SelectSingleNode("/toast");
            ((XmlElement)toastNode).SetAttribute("duration", "long");

            // This XmlNodeList will have two items since the template we are using has two text fields.
            XmlNodeList stringElements = toastXml.GetElementsByTagName("text");
            stringElements.Item(0).AppendChild(toastXml.CreateTextNode("Long Duration Toast"));

            XmlElement audioElement = toastXml.CreateElement("audio");

            if (loopAudio)
            {
                // Long-duration Toasts can optionally loop audio using the 'loop' attribute
                audioElement.SetAttribute("src", "ms-winsoundevent:Notification.Looping.Alarm");
                audioElement.SetAttribute("loop", "true");
                stringElements.Item(1).AppendChild(toastXml.CreateTextNode("Looping audio"));
            }
            else
            {
                audioElement.SetAttribute("src", "ms-winsoundevent:Notification.IM");
            }

            toastNode.AppendChild(audioElement);

            ToastNotification toast = new ToastNotification(toastXml);
            ToastNotificationManager.CreateToastNotifier().Show(toast);

            //Scenario2OutputText.Text = toastXml.GetXml();
        }

    }
}

如果我点击按钮,则没有任何反应。为什么呢?

4 个答案:

答案 0 :(得分:3)

你的代码对我来说是正确的;我现在没有Win8和我在一起所以我无法测试它。但是,如果您在VS中的“Toast Capable”字段中启用了Toast,则可能需要检查应用程序的清单。希望这会有所帮助。

答案 1 :(得分:3)

您是否在Package.appxmanifest中启用了“Toast capable”?

答案 2 :(得分:1)

我认为,有两个原因,

  1. 首先可能与您的应用程序的Toast功能有关。对于Package.appxmanifest

  2. 中的此集ToastCapable="true"
  3. 第二个是在本地计算机而不是模拟器中运行应用程序。我发现Simulator无法生成Toast通知。

答案 3 :(得分:0)

我认为你可以使用Xml String

        // Create the toast content by direct string manipulation.
        // See the Toasts SDK Sample for other ways of generating toasts.
        string toastXmlString =
            "<toast duration=\"long\">\n" +
                "<visual>\n" +
                    "<binding template=\"ToastText02\">\n" +
                        "<text id=\"1\">Alarms Notifications SDK Sample App</text>\n" +
                        "<text id=\"2\">" + alarmName + "</text>\n" +
                    "</binding>\n" +
                "</visual>\n" +
                "<commands scenario=\"alarm\">\n" +
                    "<command id=\"snooze\"/>\n" +
                    "<command id=\"dismiss\"/>\n" +
                "</commands>\n" +
                "<audio src=\"ms-winsoundevent:Notification.Looping.Alarm5\" loop=\"true\" />\n" +
            "</toast>\n";