0

正常に動作する非常に単純な Visiblox チャートがあります。

<charts:Chart Grid.Row="1" Height="100" x:Name="VisiChart">
    <charts:Chart.Series>
        <charts:LineSeries/>
    </charts:Chart.Series>
</charts:Chart>

DataSeriesコードビハインドで設定しました:

VisiChart.Series[0].DataSeries = MyDataSeries;

そのような単純な。

このメソッドを使用して、ビジュアル要素からビットマップを取得できます。

private static RenderTargetBitmap AsBmpToClipboard(FrameworkElement element)
{
    var width = (int)Math.Round(element.ActualWidth);
    var height = (int)Math.Round(element.ActualHeight);
    var bmpCopied = new RenderTargetBitmap(width, height, 96, 96, PixelFormats.Default);
    var dv = new DrawingVisual();
    using (var dc = dv.RenderOpen())
    {
        var vb = new VisualBrush(element);
        dc.DrawRectangle(vb, null, new Rect(new Point(), new Size(width, height)));
    }
    bmpCopied.Render(dv);
    Clipboard.SetImage(bmpCopied); // clipboard it for testing reasons
    return bmpCopied;
}

今、私はこのビットマップをレポートなどで使用しています。これは機能します。

ここで問題が発生します。GUI を使用せずに (Windows サービスや IIS などのサーバー アプリケーションで) チャートのイメージを使用してレポートを作成する場合、NullReferenceExceptionチャートから を取得します。

私がやっていることは、チャートを含むコントロールを作成することです。Measure()次に、コントロールを呼び出して、その機能を実行させます。それが私が得るところです:

NullReferenceException
at Visiblox.Charts.Chart.OnApplyTemplateInternal()
   at Visiblox.Charts.ChartBase.OnApplyTemplate()
   at System.Windows.FrameworkElement.ApplyTemplate()

チャートのテンプレートを手動で設定する必要があると思いますが、VisiBlox のデフォルト テンプレートはどこにありますか? そして、それらをどのように適用しますか?それとも別の問題がありますか?

どうもありがとう。

- - 編集 - -

したがって、コンソール アプリケーションの VisiBox チャート (またはチャートを含む要素) で Measure() を呼び出すと、常にこの例外が発生することがわかりました。したがって、この質問のタイトルを「コンソール アプリケーションで VisiBlox チャートを使用する方法」に変更することもできます。

4

1 に答える 1

0

わかりました、私は答えを考え出しました:

1) visiblox のものをラップします。

InvalidationHandler.ForceImmediateInvalidate = true;
// here comes the chart
InvalidationHandler.ForceImmediateInvalidate = false;

実際にレンダリングするように指示します。

2) DataContext 経由ではなく、手動でデータを設定します。コンポーネントが表示されない場合、これは配線されていない可能性があります。

3) チャートのスタイルを手動で設定します。デフォルトは、Visiblox Generic.xaml ファイルのどこかにあります。

于 2013-01-27T12:23:22.520 に答える