C# 创建ShellTile图像问题
我正在尝试使用xaml控件和可写位图创建图像。我想说,大约95%的时间它在应用程序运行时工作正常,但在调度任务中还没有看到它失败。当它确实失败时,它创建的图像是奇怪的。所有元素均与左上角对齐,背景为黑色(颜色应为画笔)。我尝试了很多方法来解决这个问题,但是我迷路了。我能复制这个问题的唯一方法是,如果我不调用度量和安排。下面是代码,有什么想法吗C# 创建ShellTile图像问题,c#,windows-phone-8,C#,Windows Phone 8,我正在尝试使用xaml控件和可写位图创建图像。我想说,大约95%的时间它在应用程序运行时工作正常,但在调度任务中还没有看到它失败。当它确实失败时,它创建的图像是奇怪的。所有元素均与左上角对齐,背景为黑色(颜色应为画笔)。我尝试了很多方法来解决这个问题,但是我迷路了。我能复制这个问题的唯一方法是,如果我不调用度量和安排。下面是代码,有什么想法吗 Deployment.Current.Dispatcher.BeginInvoke(() => { TileHelper.UpdateFli
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;
}
问题是因为您在控件中使用了网格,网格的布局可能需要比不在页面中时更多的过程。(我怀疑这是由于框架内部某个地方的竞争条件造成的。) 有两种方法可以解决此问题:
tile.Measure()
和tile.Arrange()之后调用UpdateLayout()
这篇文章()上的图片看起来像我的。但是,我现在在ViewModel中调用它,一旦数据得到更新。我最近将其移动到ViewModel。它最初在OnNavigatedToOverride中,在单击按钮时创建互动程序时也存在问题。正如您所述,我使用了网格,我昨天在您所述的地方实际实现了UpdateLayout,目前为止效果良好。我通常可以让它在快速退出应用程序时出错,并且在更改后还没有看到问题。谢谢