В моем приложении WP7 я создаю изображение для живой плитки и сохраняю его в изолированном хранилище. Затем для моей периодической задачи доступно обновление живой плитки, и в этом отношении для периодической задачи все работает нормально.
Проблема, с которой я сталкиваюсь, заключается в том, что в моем приложении WP7 переднего плана, когда я создаю изображение живой плитки, я также обновляю живую плитку (поскольку я знаю, что что-то изменилось, так зачем ждать периодическую задачу). Но когда здесь происходит обновление живой плитки, кажется, что он не может найти вновь созданный файл и поэтому представляет живую плитку без растрового изображения.
С точки зрения соответствующего кода
Создание файла
var source = new BitmapImage(new Uri("Images/Tiles/Class Timetable with T.png", UriKind.Relative));
source.CreateOptions = BitmapCreateOptions.None;
source.ImageOpened += (sender, e) => // This is important. The image can't be rendered before it's loaded.
{
// Create our image as a control, so it can be rendered to the WriteableBitmap.
var newImage = new Image();
newImage.Source = source;
newImage.Width = 173;
newImage.Height = 173;
// Define the filename for our tile. Take note that a tile image *must* be saved in /Shared/ShellContent
// or otherwise it won't display.
var tileImage = string.Format("/Shared/ShellContent/{0}.jpg", Event.UniqueId);
// Define the path to the isolatedstorage, so we can load our generated tile from there.
var isoStoreTileImage = string.Format("isostore:{0}", tileImage);
и фактическое сохранение себя
// Create a stream to store our file in.
var stream = store.CreateFile(tileImage);
// Invalidate the bitmap to make it actually render.
bitmap.Invalidate();
// Save it to our stream.
bitmap.SaveJpeg(stream, 173, 173, 0, 100);
// Close the stream, and by that saving the file to the ISF.
stream.Close();
и код, который фактически извлекает изображение и обновляет живую плитку (и работает в периодической задаче, но не из самого приложения).
string imageString = "isostore:/Shared/ShellContent/" + nextEvent.UniqueId + ".jpg";
ShellTile defaultTile2 = ShellTile.ActiveTiles.First();
defaultTile2.Update(new StandardTileData
{
Title = nextTime,
BackgroundImage = (new Uri(imageString, UriKind.Absolute)),
});
Просто не уверен, что я делаю что-то принципиально неправильное здесь? Я рассматриваю возможность хранения сгенерированного изображения в базе данных с его объектом. И у меня есть управляемое количество файлов, задействованных здесь. Я не генерирую сотни вещей.
У меня есть обходной путь, который заключается в обновлении livetile из приложения WP7 без использования файла изображения.
BackgroundImage
, ноTitle
обновляется правильно? - person Claus Jørgensen   schedule 27.09.2011