我正在尝试对使用 Prism 4.0 进行视图管理的现有 .NET 应用程序进行一些更改。我不太了解.NET、WPF、Prism,如果这个问题是菜鸟,我很抱歉。基本上我的情况是这样的:
单击按钮以推送新页面:
private void CreateGraphCommandHandler()
{
// Request navigation
RegionManager.RequestNavigate(RegionNames.MainRegion, ScreenNames.GraphView);
EventAggregator.GetEvent<CreateGraphMessage>().Publish(SelectedChart);
}
在 CreateGraphCommandHandler 方法中,它基本上是获取适当的数据点并构建一个 FrameWorkElement 类型的图表。它使用一些名为 Visifire 的第三方库来渲染我相信的情节。然后有一个按钮来保存图像并转到下一页查看更多图表。
部分图像的保存如下所示:
void SaveUsingEncoder(FrameworkElement visual, string fileName, BitmapEncoder encoder)
{
int aheight = (int)visual.ActualHeight;
int awidth = (int)visual.ActualWidth;
RenderTargetBitmap bitmap = new RenderTargetBitmap(
awidth,
aheight,
96,
96,
PixelFormats.Pbgra32);
bitmap.Render(visual);
BitmapFrame frame = BitmapFrame.Create(bitmap);
所以据我所知,这个调用保存了当前在屏幕上呈现的内容。
有一个新的要求是生成人们可以为所需数据集生成的所有图表。因此,基本上,通过所有屏幕并绘制数据图表,将其保存到适当的位置。我遇到的问题是,当下一个屏幕被推送以生成第一个绘图时,我认为 Save 在绘图完成渲染之前被调用。
当屏幕被推送到创建绘图的页面时,将调用此方法:
EventAggregator.GetEvent<CreateGraphMessage>().Subscribe(CreateGraphHandler);
所以我认为在 CreateGraphHandler 方法结束时,我可以调用 SaveChart() 方法(与按下按钮调用的方法相同)。问题是,当调用 SaveUsingEncoder 方法时,FrameworkElement 视觉对象为空。所以我假设页面没有加载并保存错误。我想知道是否有办法在调用 SaveChart() 之前等待此页面完成加载图表?提前致谢。