0

visifireチャートのレンダリングが完了したときにコールバックを取得する方法があるかどうか疑問に思いました。チャートを作成して画像を保存しようとしています。これはボタンを押すと機能しますが、ボタンなしで行うと機能しません。チャートの読み込みが完了していないためだと思いますが、よくわかりません。ページが読み込まれると、XAMLで使用されるObservableCollection値を設定します。

基本的に、次のようなデータ系列がいくつかあります。

<vc:Chart.Series>
            <vc:DataSeries RenderAs="StackedColumn" LegendText="Portion sequenced" LightingEnabled="False" AxisYType="Primary" Color="#4198AF" DataSource="{Binding SequencedValues}">
                <vc:DataSeries.DataMappings>
                    <vc:DataMapping  MemberName="AxisXLabel" Path="Key"></vc:DataMapping>
                    <vc:DataMapping MemberName="YValue" Path="Value"></vc:DataMapping>
                </vc:DataSeries.DataMappings>

これらは、ObservableCollectionによって設定されます。したがって、最初にメソッドDrawImage()を呼び出してobservablecollection値を設定し、次にSave()を呼び出します。私が言ったように、Save()メソッドはボタンを押すだけでそれ自体で機能しますが、画像を描画した後に呼び出すと機能しません。最初は、ページの読み込みがまだ完了していないことに関係していると思いました。しかし、

<i:Interaction.Triggers>
    <i:EventTrigger EventName="Loaded">
        <i:InvokeCommandAction Command="{Binding PageLoadCommand}" />
    </i:EventTrigger>
</i:Interaction.Triggers>

ページが読み込まれたときにのみDrawImage()とSave()を呼び出します。タイミングの問題があるかどうかを確認するために、DrawImage()とSave()の間に5秒間スリープタイマーを入れてみましたが、それでも背景画像しか取得できませんが、DataSeriesでは何も取得できません。

だから私の質問は、Visifireチャートがロードされた後にコールバックされる方法があるかどうか、または私が見逃している別の解決策があるかどうかです。ありがとう。

4

1 に答える 1

1

結晶、

Silveright を使用している場合は、ボタンを押すなどのユーザー アクションによってのみ画像を保存できますが、WPF を使用している場合は、Chart が完全にレンダリングされるとすぐに Chart を保存できます。ただし、コレクションが作成されたらすぐにチャートを保存する場合は、(タイマーを使用して) 少し遅れて Save() メソッドを実行できます。以下のコードをチェックアウトしてください。

MyChart.Series[0].DataSource = collection; //Populate Data 
timer.Tick += new EventHandler(timer_Tick);
timer.Interval = new TimeSpan(0, 0, 0, 0, 3000);// give some delay
timer.Start();

void timer_Tick1(object sender, EventArgs e)
{
  ExportToImage(new Uri("d:/visifire1.png"), MyChart);
}
于 2013-01-16T09:49:00.373 に答える