c#中的Metro Tile通知

本文关键字:通知 Tile Metro 中的 | 更新日期: 2023-09-27 18:08:50

我试着用c#把一个简单的Windows 8 metro风格的应用程序与tile通知放在一起,但我似乎不能让它们工作。

我还不能完全弄清楚的是更新tile通知的代码应该驻留在哪里。我已经看了一下Javascript样本,但我没有看到它是如何在c#应用程序中工作的。有没有人有一些示例代码或快速提示在c# metro应用程序中应该在哪里进行tile更新?

c#中的Metro Tile通知

我的理解是,每个应用程序决定在哪里为自己做这个。通常,当你用相同的数据更新你的普通UI时,你会这样做——例如,如果你的应用是一个RSS阅读器,你刚刚下载了一个新项目来显示,那就是你通过发布通知来更新你的tile的地方。在样例JavaScript应用中,为了方便起见,这是从控件的事件处理程序中完成的。

至于更改标题的代码,它应该与JavaScript版本几乎相同,因为在这两种情况下都使用Windows.UI.Notifications命名空间。下面是一个非常简单的c#应用程序,当你点击按钮时更新tile。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.

中为" wide Logo"设置一些图像。

确保将初始旋转设置为横向,设置一些图像为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