我正在尝试在 c# 中将一个简单的 Windows 8 Metro 风格应用程序与磁贴通知放在一起,但我似乎无法让它们工作。
我还不太清楚更新磁贴通知的代码应该驻留在哪里。我已经查看了Javascript 示例,但我没有看到它在 C# 应用程序中是如何工作的。有没有人有一些示例代码或关于在 C# Metro 应用程序中应该在哪里进行磁贴更新的快速提示?
我正在尝试在 c# 中将一个简单的 Windows 8 Metro 风格应用程序与磁贴通知放在一起,但我似乎无法让它们工作。
我还不太清楚更新磁贴通知的代码应该驻留在哪里。我已经查看了Javascript 示例,但我没有看到它在 C# 应用程序中是如何工作的。有没有人有一些示例代码或关于在 C# Metro 应用程序中应该在哪里进行磁贴更新的快速提示?
我的理解是,每个应用程序自己决定在哪里执行此操作。通常,只要您还使用相同的数据更新普通 UI 时,您就会这样做 - 例如,如果您的应用是 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 中为“宽徽标”设置一些图像。
确保将初始旋转更改为横向,为 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