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 ビジュアルが null になることです。したがって、ページが読み込まれておらず、エラーを保存していないと想定しています。SaveChart() を呼び出す前に、このページがグラフの読み込みを完了するのを待つ方法があるかどうか疑問に思っていました。前もって感謝します。

4

1 に答える 1

0

あなたができることは、ページのイベントを使用して、プロットを担当するコンポーネントLoadedに別のメッセージを送信し、ページがロードされてビットマップにレンダリングできることを知らせることです。EventAggregator

于 2013-01-14T23:45:05.463 に答える