私のWindowsPhoneアプリのメインページでは、ユーザーはボタンをクリックしていくつかの操作を実行できます。これにより、ライブタイルが更新されます。
私が抱えている問題は、ユーザーがボタンをクリックしてから電話の[戻る]ボタンをすばやく押すと、ライブタイルが正しくレンダリングされない場合があることです。この問題はめったに発生しませんが、発生し、発生すると見た目が悪くなります...
ライブタイルを実装する方法は、ライブタイルとまったく同じように見えるユーザーコントロールを作成し、それを分離されたストレージに保存することです。次に、それを取得してFliptileDataオブジェクトに保存します。最後に、ShellTileでUpdateメソッドを呼び出します。プロセスを示すために、次のコードを参照してください。
// the function that saves the user control to isolated storage
public Uri SaveJpegToIsolatedStorage(FrameworkElement tile, string suffix, int tileWidth = 336, int tileHeight = 336)
{
var bmp = new WriteableBitmap(tileWidth, tileHeight);
// Force the content to layout itself properly
tile.Measure(new Size(tileWidth, tileHeight));
tile.Arrange(new Rect(0, 0, tileWidth, tileHeight));
bmp.Render(tile, null);
bmp.Invalidate();
// Obtain the virtual store for the application
IsolatedStorageFile myStore = IsolatedStorageFile.GetUserStoreForApplication();
using (IsolatedStorageFileStream fileStream = new IsolatedStorageFileStream(IsolatedStorageFileName + suffix, FileMode.Create, myStore))
{
try
{
bmp.SaveJpeg(fileStream, tileWidth, tileHeight, 0, 100);
}
catch (Exception)
{
return null;
}
}
return new Uri("isostore:/" + IsolatedStorageFileName + suffix, UriKind.Absolute);
}
// save the user control to isolated storage and prepare the FlipTileData object
wideFrontTileImage = SaveJpegToIsolatedStorage((UserControl)this.WideFrontTile, "_wide_front", 691);
var flipTileData = new FlipTileData();
flipTileData.WideBackgroundImage = wideFrontTileImage;
return flipTileData;
// update the live tile
var shellTile = ShellTile.ActiveTiles.FirstOrDefault();
shellTile.Update(customTile.GetFlipTileData(data.UndoneMemosCount == "0" && data.TotalMemosCount == "0"));
これを引き起こしている理由は、ユーザーが[戻る]ボタンをクリックするのが速すぎると、OSがアプリ内で実行されているすべてのプロセスを終了し、その時点でレンダリングが行われなかったためだと思います。レンダリングがいつ終了したかを知る方法があるかどうかを考えているので、[戻る]ボタンをキャンセルして、終了するまで待ってから手動でアプリを終了できます。しかし、私は単にどのようにわからない...
これに関するどんな助けも大いに感謝されるでしょう!