以适当的大小更新实时图块?

时间:2012-09-26 14:14:18

标签: c# microsoft-metro

在Windows 8中更新实时图块时,我不知道如何同时更新“大”和“小”尺寸的图块。

我希望将我的应用固定在小模式下的用户知道我的程序中有多少项目可供查看,而且我的应用程序以大模式固定的用户同时拥有该项目以及一些样本项目标题。

然而,无论我做什么,似乎只有一个平铺更新到来。如何根据我的瓷砖尺寸提供瓷砖更新,以便那些拥有小型或大型瓷砖的人不会感到失望?

2 个答案:

答案 0 :(得分:5)

正方形和宽平铺格式的内容可以(并且应该)包含在定义每个平铺通知的XML中。在visual元素下,只需添加两个binding元素:一个使用宽图块模板,另一个使用方形图块模板。

<tile>
    <visual lang="en-US">
        <binding template="TileWideText03">
            <text id="1">Hello World!</text>
        </binding>
        <binding template="TileSquareText04">
            <text id="1">Hello World!</text>
        </binding>
    </visual>
</tile>

NotificationsExtensions库(位于MSDN tiles sample中)提供了一个对象模型,可以轻松地操作XML并组合正方形和宽平铺内容:

// create the wide template 
ITileWideText03 tileContent = TileContentFactory.CreateTileWideText03(); 
tileContent.TextHeadingWrap.Text = "Hello World!"; 

// create the square template and attach it to the wide template 
ITileSquareText04 squareContent = TileContentFactory.CreateTileSquareText04(); 
squareContent.TextBodyWrap.Text = "Hello World!"; 
tileContent.SquareContent = squareContent; 

答案 1 :(得分:1)

tile XML需要组合成如下所示:

<tile>
    <visual version="3">
        <binding template="TileSquare150x150Block" fallback="TileSquareBlock">
            <text id="1">01</text> 
            <text id="2">Tue</text> 
        </binding>
        <binding template="TileWide310x150PeekImageAndText01" fallback="TileWidePeekImageAndText01">
            <image id="1" src="ms-appx:///Assets/WideLogo.png" /> 
            <text id="1">some text</text> 
        </binding>
    </visual>
</tile>

现在有很多方法可以将XML用于这种形式,但我最喜欢的方法是使用NotificationsExtensions library来封装XML操作。

在项目中引用库后,您的代码应如下所示:

// create the wide template
ITileWide310x150PeekImageAndText01 wideContent = TileContentFactory.CreateTileWide310x150PeekImageAndText01();
wideContent.TextBodyWrap.Text = "some text";
wideContent.Image.Src = "ms-appx:///Assets/WideLogo.png";

// create the square template and attach it to the wide template 
ITileSquare150x150Block squareContent = TileContentFactory.CreateTileSquare150x150Block();
squareContent.TextBlock.Text = "01";
squareContent.TextSubBlock.Text = "Tue";
wideContent.Square150x150Content = squareContent;

var tn = new TileNotification(wideContent.GetXml());
TileUpdateManager.CreateTileUpdaterForApplication("App").Clear();
TileUpdateManager.CreateTileUpdaterForApplication("App").Update(tn);