将新生成的图像添加到辅助图块时,它最初找不到它 - 为什么以及如何修复它?
您好,我正在开发一款Windows Phone应用程序,可在手机的主屏幕上创建辅助动态磁贴。
由于目前没有简单的方法来生成给定XAML的辅助实时图块,我执行以下操作:
UserControl
,并将数据绑定到我的数据WriteableBitmap
在数据绑定到图像后将其写入。isostore:/
网址这个有点有效,问题是当创建瓷砖时它没有显示,只有在时间过后,瓷砖才会突然正确显示。
我使用以下代码进行生成:
public static void GenerateMediumTile(DashboardViewModel source)
{
var image = new LiveTileMedium() {DataContext = source};
image.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
image.Arrange(new Rect(0,0,336,336));
var bitmap = new WriteableBitmap(336,336);
bitmap.Render(image,new TranslateTransform());
bitmap.Invalidate();
using (var fileStore = IsolatedStorageFile.GetUserStoreForApplication())
{
var file = fileStore.OpenFile("Shared/ShellContent/tile_" + source.Ticker + "_medium.png", FileMode.Create);
bitmap.WritePNG(file.AsOutputStream().AsStreamForWrite());
}
}
然后这段代码用于创建磁贴:
var largeImageFile = isostoreSharedShellcontentTile + tileImage.Ticker + "_big.png";
var oFliptile = new FlipTileData
{
Title = "",
BackTitle = "",
BackContent = "",
SmallBackgroundImage = new Uri("/Assets/Matrial/small_tile159x159.png", UriKind.RelativeOrAbsolute),
BackgroundImage = new Uri(mediumImageFile, UriKind.Absolute),
...
ShellTile.Create(new Uri(url, UriKind.Relative), oFliptile, true);
以下是我创建时瓷砖的外观,然后经过一段时间后我又进入了另一个应用。
答案 0 :(得分:3)
这只是一个猜测,但可能处置fileStore
不会处置file
- 一旦发生垃圾收集就会发生,但在此之前,无法读取该文件。所以:
using (var fileStore = IsolatedStorageFile.GetUserStoreForApplication())
{
using (var file = fileStore.OpenFile("Shared/ShellContent/tile_" + source.Ticker + "_medium.png", FileMode.Create))
{
bitmap.WritePNG(file.AsOutputStream().AsStreamForWrite());
}
}