0

我正在尝试对使用 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() 之前等待此页面完成加载图表?提前致谢。

4

1 回答 1

0

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

于 2013-01-14T23:45:05.463 回答