我正在尝试在 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/

10-17 00:23