正常に動作する非常に単純な 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 チャートを使用する方法」に変更することもできます。