我正在尝试在 c# 中将一个简单的 Windows 8 Metro 风格应用程序与磁贴通知放在一起,但我似乎无法让它们工作。
我还不太清楚的是更新磁贴通知的代码应该驻留在何处。我看过 Javascript sample ,但我没有看到它在 C# 应用程序中是如何工作的。有没有人有一些示例代码或关于在 C# Metro 应用程序中应该在哪里进行磁贴更新的快速提示?
最佳答案
我的理解是每个应用程序自己决定在哪里执行此操作。通常,每当您还使用相同的数据更新普通 UI 时,您都会这样做 - 例如如果您的应用是 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));
}
}
}
不要忘记你需要一个宽的图块来显示文本 - 要得到它,在 Package.appxmanifest 中为“宽徽标”设置一些图像。
关于c# - C# 中的 Metro Tile 通知,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7461160/