2011-09-18 5 views
13

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

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

ответ

15

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

Что касается кода для изменения плитки, он должен быть почти идентичен версии JavaScript, так как в обоих случаях вы используете Windows.UI.Notifications namespace. Следующее - очень простое приложение 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)); 
     } 
    } 
} 

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

+0

Ах! Моя плитка все еще была квадратной. Изменил его на широкий, и он сработал. –

1

Убедитесь, что вы изменили Начальное вращение на Пейзаж, установите некоторое изображение для 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

 Смежные вопросы

  • Нет связанных вопросов^_^