13

我正在尝试在 c# 中将一个简单的 Windows 8 Metro 风格应用程序与磁贴通知放在一起,但我似乎无法让它们工作。

我还不太清楚更新磁贴通知的代码应该驻留在哪里。我已经查看了Javascript 示例,但我没有看到它在 C# 应用程序中是如何工作的。有没有人有一些示例代码或关于在 C# Metro 应用程序中应该在哪里进行磁贴更新的快速提示?

4

2 回答 2

15

我的理解是,每个应用程序自己决定在哪里执行此操作。通常,只要您还使用相同的数据更新普通 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 中为“宽徽标”设置一些图像。

于 2011-09-18T20:40:15.127 回答
1

确保将初始旋转更改为横向,为 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

于 2011-09-18T20:45:45.490 回答