Metro Tile Уведомления в C # - PullRequest
       64

Metro Tile Уведомления в C #

13 голосов
/ 18 сентября 2011

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

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

Ответы [ 2 ]

15 голосов
/ 19 сентября 2011

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

Что касается кода для изменения плитки, он должен быть практически идентичен версии JavaScript, поскольку в обоих случаях вы используете пространство имен Windows.UI.Notifications . Ниже приведено очень простое приложение на C #, которое обновляет плитку при нажатии кнопки. 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.

1 голос
/ 19 сентября 2011

Убедитесь, что вы изменили Начальное вращение на Пейзаж, установите какое-либо изображение для 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's default tile
            TileUpdateManager.CreateTileUpdaterForApplication().Update(tileNotification);
        }

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

...