支持多种类型的动态磁贴

Support several types of live tiles

我想在我的应用程序中添加方形和诡异的瓷砖。但是当我更新例如宽动态磁贴时,方形动态磁贴成为默认应用程序磁贴。当我更新 wide square tile 时,wide tile 成为默认值。

宽磁贴更新代码

    var TileMgr = TileUpdateManager.CreateTileUpdaterForApplication();


            var tileTemplate = TileUpdateManager.GetTemplateContent(TileTemplateType.TileWide310x150Image);            
            XmlElement tmp = tileTemplate.GetElementsByTagName("visual")[0] as XmlElement;
            tmp.SetAttribute("branding", "none");
            var tileImageAttributes = tileTemplate.GetElementsByTagName("image");
            tmp = tileImageAttributes[0] as XmlElement;
            tmp.SetAttribute("src", "UpdatedLiveTileWide.png");
            var notification = new TileNotification(tileTemplate);
            TileMgr.Update( notification);

方块更新代码

 var TileMgr = TileUpdateManager.CreateTileUpdaterForApplication();

            var tileTemplate = TileUpdateManager.GetTemplateContent(TileTemplateType.TileSquare150x150Image);
            XmlElement tmp = tileTemplate.GetElementsByTagName("visual")[0] as XmlElement;
            tmp.SetAttribute("branding", "none");
            var tileImageAttributes = tileTemplate.GetElementsByTagName("image");
            tmp = tileImageAttributes[0] as XmlElement;
            tmp.SetAttribute("src", "UpdatedLiveTile.png");
            var notification = new TileNotification(tileTemplate);
            TileMgr.Update(notification);

当我执行 "code for square tile update" 时,我得到这样的正方形瓷砖:

这么宽的瓷砖

之后我执行"code for wide tile update" 得到这么宽的瓷砖:

和这样的方形瓷砖:

如果您要更新一种以上类型的图块,则需要一次性完成 TileNotificationTileNotification 中未设置的任何图块信息都将重置为默认值。为此,您需要创建 XmlDocument,使其在一个 'visual' 元素下具有不同的 'binding' 元素(对应于每种类型的图块)。

你的情况应该是这样的

//Create medium tile update
XmlDocument mediumTemplate = TileUpdateManager.GetTemplateContent(TileTemplateType.TileSquare150x150Image);
(mediumTemplate.GetElementsByTagName("image")[0] as XmlElement).SetAttribute("src", "UpdatedLiveTile.png");

//Create wide tile update
XmlDocument wideTemplate = TileUpdateManager.GetTemplateContent(TileTemplateType.TileWide310x150Image);
(wideTemplate.GetElementsByTagName("image")[0] as XmlElement).SetAttribute("src", "UpdatedLiveTileWide.png");

//Import the 'binding' node from wideTemplate
var wideBinding = mediumTemplate.ImportNode(wideTemplate.GetElementsByTagName("binding")[0], true);

//Add it under 'visual' node in mediumTemplate
var visualElement = mediumTemplate.GetElementsByTagName("visual")[0];
visualElement.AppendChild(wideBinding);
(visualElement as XmlElement).SetAttribute("branding", "none");

//Now the mediumTemplate has bindings for both medium and wide tile
//Create tile notification using mediumTemplate and update
TileNotification notification = new TileNotification(mediumTemplate);
TileUpdateManager.CreateTileUpdaterForApplication().Update(notification);