Prism,知道加载WPF页面的时间

时间:2013-01-14 23:37:53

标签: c# .net prism

我正在尝试在已经存在的使用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()之前是否有办法等待这个页面完成加载图表?提前谢谢。

1 个答案:

答案 0 :(得分:0)

您可以使用页面的Loaded事件向EventAggregator发送另一条消息,让负责绘图的组件知道页面已加载并可以呈现为位图。