Отображать локальное уведомление о тостере

Я хочу разработать универсальное приложение для Windows Phone 8.1, которое содержит локальное "Уведомление".

Что я хочу сделать, так это показать все сообщения пользователю (ошибка, информация, предупреждения) в изломе управления тостом. Все делается локально, не проходя стандартную систему уведомлений. На Windows Phone 8 есть несколько систем:

Но невозможно включить эти библиотеки в проект windows phone 8.1.

Кто-нибудь знает другой метод отображения "локальных" тостов?

Ответ 1

Вы можете использовать локальное уведомление, которое появляется, когда ваше приложение запущено.

ToastTemplateType toastTemplateXml = ToastTemplateType.ToastImageAndText01; 
XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(toastTemplateXml);

Затем вам нужно будет заполнить XML, возвращенный GetTemplateContent

<toast>
    <visual>
        <binding template="ToastImageAndText01">
            <image id="img" src=""/>
            <text id="txt"></text>
        </binding>
    </visual>
</toast>

Поставка содержимого вашего тоста в XML DOM. Изображение имеет отношение только к Windows 8.1.

Укажите параметры запуска

((XmlElement)toastNode).SetAttribute("launch", "{\"type\":\"toast\",\"param1\":\"1\",\"param2\":\"2\"}");

Создайте объект тоста:

ToastNotification toast = new ToastNotification(toastXml);

и, наконец, отобразить тост.

ToastNotificationManager.CreateToastNotifier().Show(toast);

Кроме того, если вы хотите использовать сторонний элемент управления для отображения тоста, тогда вы можете рассмотреть возможность создания приложения Windows Phone 8.1 Silverlight.

Ответ 2

С помощью ответа @msimons и следующего URL: http://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh868254.aspx Мне удалось отобразить мои уведомления.

Для тех, кто в этом нуждается, вот мой последний метод:

private void ShowToastNotification(String message)
    {
        ToastTemplateType toastTemplate = ToastTemplateType.ToastImageAndText01;
        XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(toastTemplate);

        // Set Text
        XmlNodeList toastTextElements = toastXml.GetElementsByTagName("text");
        toastTextElements[0].AppendChild(toastXml.CreateTextNode(message));

        // Set image
        // Images must be less than 200 KB in size and smaller than 1024 x 1024 pixels.
        XmlNodeList toastImageAttributes = toastXml.GetElementsByTagName("image");
        ((XmlElement)toastImageAttributes[0]).SetAttribute("src", "ms-appx:///Images/logo-80px-80px.png");
        ((XmlElement)toastImageAttributes[0]).SetAttribute("alt", "logo");

        // toast duration
        IXmlNode toastNode = toastXml.SelectSingleNode("/toast");
        ((XmlElement)toastNode).SetAttribute("duration", "short");

        // toast navigation
        var toastNavigationUriString = "#/MainPage.xaml?param1=12345";
        var toastElement = ((XmlElement)toastXml.SelectSingleNode("/toast"));
        toastElement.SetAttribute("launch", toastNavigationUriString);

        // Create the toast notification based on the XML content you've specified.
        ToastNotification toast = new ToastNotification(toastXml);

        // Send your toast notification.
        ToastNotificationManager.CreateToastNotifier().Show(toast);
    }

Я тестировал на универсальном приложении windows phone 8.1.

И не забывайте редактировать "Package.appxmanifest" и активировать уведомления. Возможность поднять уведомления о тоста объявляется в вашем файле package.appxmanifest приложения. Если вы используете редактор манифеста Microsoft Visual Studio, просто установите для параметра "Тост" значение "Да" в разделе "Уведомление" на вкладке "Приложение".