c#中的Metro Tile通知
本文关键字:通知 Tile Metro 中的 | 更新日期: 2023-09-27 18:08:50
我试着用c#把一个简单的Windows 8 metro风格的应用程序与tile通知放在一起,但我似乎不能让它们工作。
我还不能完全弄清楚的是更新tile通知的代码应该驻留在哪里。我已经看了一下Javascript样本,但我没有看到它是如何在c#应用程序中工作的。有没有人有一些示例代码或快速提示在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.
确保将初始旋转设置为横向,设置一些图像为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("text");
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