2011-09-18 19 views
13

Estoy tratando de armar una sencilla aplicación de estilo metro de Windows 8 en C# con notificaciones en mosaico, pero parece que no puedo hacer que funcionen.Notificaciones de Metro Tile en C#

Lo que no puedo entender todavía es dónde debería residir el código para actualizar las notificaciones de mosaico. He echado un vistazo al Javascript sample, pero no veo cómo funciona eso en una aplicación C#. ¿Alguien ha obtenido algún código de muestra o un consejo rápido sobre dónde deberían ocurrir las actualizaciones de baldosas en una aplicación de metro de C#?

Respuesta

15

Mi comprensión es que cada aplicación decide dónde hacer esto por sí misma. Normalmente, lo haría siempre que también esté actualizando su UI normal con la misma información, p. si tu aplicación es un lector de RSS y acabas de descargar un nuevo elemento para mostrar, allí es donde también actualizas tu mosaico publicando una notificación. En la aplicación JavaScript de ejemplo, esto se hace desde los controladores de eventos para los controles por conveniencia.

En cuanto al código para cambiar la ficha, debería ser casi idéntica a la versión de JavaScript, ya que en ambos casos utiliza Windows.UI.Notifications namespace. A continuación se muestra una aplicación C# muy simple que actualiza el mosaico al hacer clic en el botón. 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> 

y código detrás:

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)); 
     } 
    } 
} 

No se olvide que usted necesita una amplia baldosas para el texto aparezca - conseguirlo, establecen alguna imagen de "Wide Logo" en el Paquete .appxmanifest.

+0

Ah! Mi ficha seguía siendo un cuadrado. Lo cambió al ancho y funcionó. –

1

Asegúrese de cambiar la rotación inicial a Horizontal, configure alguna imagen para Widelogo y utilice este método para configurar el texto junto con un vencimiento.

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); 
     } 

Aquí está una explicación detallada http://www.amazedsaint.com/2011/09/hellotiles-simple-c-xaml-application.html