XML を使用して Windows 8 のセカンダリ タイルを直接更新しようとしています。ただし、ピン留めしたタイルの識別子が無効であるという例外が引き続き発生します。Windows から識別子を直接取得して、それを に代入しようとしましたCreateTileUpdaterForSecondaryTile
が、それでも同じ例外が発生します。これが私のコードです:
public async static void UpdateSecondarySectionTile()
{
string tileXmlString = "<tile id='SecondaryTile-7-0'>"
+ "<visual>"
+ "<binding template='TileWideImage'>"
+ "<image id='1' src='" + imageSource + "' alt='alt text'/>"
+ "</binding>"
+ "</visual>"
+ "</tile>";
// create a DOM
Windows.Data.Xml.Dom.XmlDocument tileDOM = new Windows.Data.Xml.Dom.XmlDocument();
tileDOM.LoadXml(tileXmlString);
System.Collections.Generic.IReadOnlyList<Windows.UI.StartScreen.SecondaryTile> tileList = await Windows.UI.StartScreen.SecondaryTile.FindAllAsync();
foreach (var tile in tileList)
{
string tileId = tile.TileId;
Windows.UI.Notifications.TileNotification tileUpdate = new Windows.UI.Notifications.TileNotification(tileDOM);
try
{
Windows.UI.Notifications.TileUpdateManager.CreateTileUpdaterForSecondaryTile(tileId).Update(tileUpdate);
}
catch (Exception e)
{
System.Diagnostics.Debug.WriteLine("message: " + e.Message + ", inner exception: " + e.InnerException + " string: " + e.ToString());
}
}
}
デバッグ行は次のように出力しています。
//message: The application identifier provided is invalid.
, inner exception: string: System.Exception: The application identifier provided is invalid.
問題は何ですか?私のビルドには固定されたセカンダリ タイルが 1 つしかないため、foreach ループは 1 回だけ実行されます。(またUpdateSecondarySectionTile
、タイル ID をパラメーターとして取り、呼び出しごとに 1 つのタイルのみを更新する必要があることも認識しています。これは単なるデバッグ コードです。)
タイル識別子ではなくアプリケーション識別子について不平を言っているのは興味深いことです。また、シミュレーターでタイルの更新を実行すると、タイルの更新が機能しないことがありますが、ローカル コンピューターでもこの問題が発生しています。