Windows 8 Metro App - тост уведомления - PullRequest
3 голосов
/ 24 февраля 2012

Я разрабатываю приложение в стиле Metro для Windows 8 с использованием уведомлений о тостах (Комбинация C # + xaml) Я посмотрел пример кода в стиле MS metro и попытался применить его к своему проекту, Похоже, я использовал код точно так же, но я не знаю, почему он не работает ..

(ошибки нет, она успешно собирается, но просто не работает.)

То, что я пытаюсь сделать, очень просто:

Есть кнопка. Когда происходит событие button_click, я бы хотел добавить всплывающее уведомление.

Вот что я сделал:

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 ]

3 голосов
/ 30 ноября 2012

Вы включили «Способность к тосту» в Package.appxmanifest?

3 голосов
/ 28 февраля 2012

Ваш код выглядит правильно для меня;У меня сейчас нет Win8, поэтому я не могу его протестировать.Однако вы можете проверить манифест своего приложения, если вы включили Toast или нет в поле «Toast Capable» в VS.Надеюсь, это поможет.

1 голос
/ 10 апреля 2013

Я думаю, есть две причины,

  1. Первое может касаться возможностей тоста вашего приложения. Для этого набора ToastCapable="true" в вашем Package.appxmanifest

  2. Второй - это запуск приложения на локальной машине, а не на симуляторе. Я обнаружил, что симулятор не может выдавать уведомления о тостах.

0 голосов
/ 13 сентября 2014

Я думаю, вы можете просто использовать 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";
...