我正在尝试在已经存在的使用Prism 4.0进行视图管理的.NET应用程序上更改一些内容。我对.NET,WPF,Prism了解不多,很抱歉,如果这个问题是noob。基本上我的情况是这样的:
点击一个按钮推送新页面:
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 visual为null。所以我假设没有加载页面并保存错误。我想知道在调用SaveChart()之前是否有办法等待这个页面完成加载图表?提前谢谢。
答案 0 :(得分:0)
您可以使用页面的Loaded
事件向EventAggregator
发送另一条消息,让负责绘图的组件知道页面已加载并可以呈现为位图。