Visiblox チャートを画像にレンダリングして、何百ものチャートを同時に表示できるようにしようとしています。チャートはコードで生成され、表示せずにレンダリングされます。
私が直面している問題は、レンダリング後にチャートが空に見えることです。上のコントロールはチャートで、下のコントロールはコントロールに追加する前にレンダリングされたチャートです。透かしがあるため、一部のレンダリングが行われています。
グラフは、バインディングとデータ コンテキストを使用して設定されています (重要な場合に備えて)。レンダリングする前にグラフを見ると、実質的に空のように見えます。おかげで、 「 UserControl によってバインディングが取得されるのはいつですか?」
そして、これは私が画像をレンダリングするために使用しているコードです:
public BitmapSource Render(FrameworkElement control)
{
if (control == null)
{
throw new ArgumentNullException("control");
}
control.UpdateLayout();
Viewbox viewBox = new Viewbox();
viewBox.Child = control; // Control to render
viewBox.Measure(new System.Windows.Size(control.Width, control.Height));
viewBox.Arrange(new Rect(0, 0, control.Width, control.Height));
viewBox.ApplyTemplate();
viewBox.UpdateLayout();
RenderTargetBitmap renderer = new RenderTargetBitmap((int)(control.Width * _dpiX / 96.0), (int)(control.Height * _dpiY / 96.0), _dpiX, _dpiY, PixelFormats.Pbgra32);
DrawingVisual drawingVisual = new DrawingVisual();
using (DrawingContext drawingContext = drawingVisual.RenderOpen())
{
VisualBrush visualBrush = new VisualBrush(viewBox);
drawingContext.DrawRectangle(visualBrush, null, new Rect(new Point(), new System.Windows.Size(control.Width, control.Height)));
}
renderer.Render(drawingVisual);
// Remove the container to be able to reuse the control again if we appended it to a viewbox
viewBox.Child = null;
return renderer;
}