创建外壳磁贴图像问题
本文关键字:图像 问题 外壳 创建 | 更新日期: 2023-09-27 18:36:23
我正在尝试使用 xaml 控件和可写位图创建图像。我会说大约 95% 的时间它在应用程序运行时运行良好,并且尚未看到它在计划任务中失败。当它失败时,它创建的图像是奇怪的。所有元素都对齐左上角,背景为黑色(颜色应为PhoneAccentBrush)。我已经尝试了很多方法来解决这个问题,但我迷路了。我可以复制该问题的唯一方法是不调用测量和安排。下面是代码,有什么想法吗?
Deployment.Current.Dispatcher.BeginInvoke(() =>
{
TileHelper.UpdateFlipTile(this.LiveTile, this.Facility, this.METARs[0]);
});
public static void UpdateFlipTile(ShellTile shellTile, Facility facility, METAR metar)
{
/*removed some variables to shorten code*/
WriteableBitmap mediumImage = TileHelper.CreateMediumTileImage(facility.Description, metar.flight_category, wind, TileHelper.GetUri(metar), temp, metar.observation_time);
SaveImage(mediumImageFileName, mediumImage);
FlipTileData flipTile = new FlipTileData()
{
Title = "",
BackTitle = "",
BackContent = "",
WideBackContent = "",
BackgroundImage = new Uri("isostore:/Shared/ShellContent/" + siteNumberEncoded + ".jpg", UriKind.Absolute)
};
shellTile.Update(flipTile);
}
}
private static WriteableBitmap CreateMediumTileImage(string airport, string flightCategory, string wind, Uri imageUri, string temp, string lastUpdated)
{
MediumMetarTile tile = new MediumMetarTile(airport.ToLower(), wind, flightCategory, temp, lastUpdated, imageUri);
tile.Measure(new Size(336, 336));
tile.Arrange(new Rect(0, 0, 336, 336));
WriteableBitmap image = new WriteableBitmap(336, 336);
image.Render(tile, null);
image.Invalidate();
System.Diagnostics.Debugger.Log(0, "TileHelper.CreateMediumTileImage", "medium tile image created");
return image;
}
问题是因为您在控件中使用 Grid,并且网格的布局可能需要比不属于页面时更多的传递。(我怀疑这是由于框架内部深处的竞争条件。
有两种方法可以解决此问题:
- 消除对 XAML 中网格的需求
- 在
tile.Measure()
和tile.Arrange()
呼叫后呼叫UpdateLayout()