public static bool SaveElement(UIElement element, Tile tile) { try { var side = (tile == Tile.Small) ? 159 : 336; element.Measure(new Size(side, side)); element.Arrange(new Rect(0, 0, side, side)); var bmp = new WriteableBitmap(side, side); bmp.Render(element, null); bmp.Invalidate(); var name = tile.ToString() + Guid.NewGuid() + ".png"; using (var isf = IsolatedStorageFile.GetUserStoreForApplication()) { if (!isf.DirectoryExists("/CustomLiveTiles")) { isf.CreateDirectory("/CustomLiveTiles"); } using (var myFileStream = isf.CreateFile("shared/shellcontent/" + name)) { // Encode WriteableBitmap object to a PNG stream. bmp.WritePng(myFileStream); } var filesTodelete = from f in isf.GetFileNames("shared/shellcontent/" + tile + "*").AsQueryable() where !f.EndsWith(name) select f; foreach (var file in filesTodelete) { isf.DeleteFile("shared/shellcontent/" + file); } } SaveTilePart("isostore:/Shared/ShellContent/" + name, tile); } catch (Exception) { Thread.Sleep(1000); if (tile == Tile.Small) { SaveTilePart(GetDefaultSmallTile(), tile); } else { SaveTilePart((tile == Tile.Front) ? GetDefaultFrontTile() : GetDefaultBackTile(), tile); } return false; } return true; }