Подтвердить что ты не робот

Уведомления о метро в С#

Я пытаюсь собрать простое приложение стиля Metro 8 в стиле С# с уведомлениями о плиточках, но я не могу заставить их работать.

То, что я еще не могу понять, это то, где должен обновляться код обновления уведомлений о плитки. Я посмотрел образец Javascript, но я не вижу, как это работает в приложении С#. Кто-нибудь получил примерный код или быстрый совет о том, где обновления плитки должны произойти в приложении метро С#?

4b9b3361

Ответ 1

Я понимаю, что каждое приложение решает, где это сделать для себя. Обычно вы делаете это, когда вы также обновляете свой обычный пользовательский интерфейс с теми же данными - например, если ваше приложение является RSS-ридером, и вы только что загрузили новый элемент для отображения, то там, где вы также обновите свою плитку, отправив уведомление. В примере приложения JavaScript это делается для обработчиков событий для элементов управления для удобства.

Что касается кода для изменения плитки, он должен быть почти идентичен версии JavaScript, поскольку в обоих случаях вы используете пространство имен Windows.UI.Notifications. Следующее - очень простое приложение С#, которое обновляет плитку, когда вы нажимаете кнопку. XAML:

<UserControl x:Class="TileNotificationCS.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    d:DesignHeight="768" d:DesignWidth="1366">
    <StackPanel x:Name="LayoutRoot" Background="#FF0C0C0C">
        <TextBox x:Name="message"/>
        <Button x:Name="changeTile" Content="Change Tile" Click="changeTile_Click" />
    </StackPanel>
</UserControl>

и код позади:

using System;
using Windows.Data.Xml.Dom;
using Windows.UI.Notifications;
using Windows.UI.Xaml;

namespace TileNotificationCS
{
    partial class MainPage
    {
        TileUpdater tileUpdater = TileUpdateManager.CreateTileUpdaterForApplication();

        public MainPage()
        {
            InitializeComponent();
        }

        private void changeTile_Click(object sender, RoutedEventArgs e)
        {
            XmlDocument tileXml = TileUpdateManager.GetTemplateContent(TileTemplateType.TileWideText01);
            XmlElement textElement = (XmlElement)tileXml.GetElementsByTagName("text")[0];
            textElement.AppendChild(tileXml.CreateTextNode(message.Text));
            tileUpdater.Update(new TileNotification(tileXml));
        }
    }
}

Не забывайте, что вам нужна широкая плитка для отображения текста - чтобы получить ее, установите некоторое изображение для "Широкого логотипа" в Package.appxmanifest.

Ответ 2

Убедитесь, что вы изменили Начальное вращение на Пейзаж, установите некоторое изображение для Widelogo и используйте этот метод для установки текста вместе с истечением срока действия.

 void SendTileTextNotification(string text, int secondsExpire)
        {
            // Get a filled in version of the template by using getTemplateContent
            var tileXml = TileUpdateManager.GetTemplateContent(TileTemplateType.TileWideText03);

            // You will need to look at the template documentation to know how many text fields a particular template has       

            // get the text attributes for this template and fill them in
            var tileAttributes = tileXml.GetElementsByTagName(&quot;text&quot;);
            tileAttributes[0].AppendChild(tileXml.CreateTextNode(text));

            // create the notification from the XML
            var tileNotification = new TileNotification(tileXml);

            // send the notification to the app default tile
            TileUpdateManager.CreateTileUpdaterForApplication().Update(tileNotification);
        }

Вот подробное объяснение http://www.amazedsaint.com/2011/09/hellotiles-simple-c-xaml-application.html