ContentControl + RenderTargetBitmap + leeres Bild

Im versucht, einige Diagrammbilder zu erstellen, ohne diese Diagramme jemals auf dem Bildschirm anzuzeigen. Ich bin schon eine ganze Weile dabei und habe viele verschiedene Dinge ausprobiert, aber nichts scheint zu funktionieren. Der Code funktioniert einwandfrei, wenn ich das Diagramm zuerst in einem Fenster anzeige, aber wenn ich es nicht in einem Fenster anzeige, ist die Bitmap nur weiß mit einem schwarzen Rand (keine Ahnung warum).

Ich habe versucht, das Diagramm einem Rand hinzuzufügen, bevor der Rand gerendert und mit einem grünen BorderBrush versehen wurde. In der Bitmap sehe ich den grünen Rand, dann den schwarzen Rand und den weißen Hintergrund, aber kein Diagramm. Die Karte ist nicht in einer schwarzen Grenze enthalten, daher weiß ich nicht, woher das kommt.

Ich habe versucht, das Diagramm zu einem Fenster hinzuzufügen, ohne window.Show () aufzurufen, und wieder erhalte ich nur die schwarze Grenze und den weißen Hintergrund. Wenn ich jedoch window.Show () aufrufe, enthält die Bitmap das Diagramm.

Ich habe versucht, eine Zeichnung zu verwendeHie, gleiches Ergebnis.

Hier ist der Code (ohne das Hinzufügen des Elements zu einem Rahmen oder Fenster):

private static BitmapSource CreateElementScreenshot(FrameworkElement element, int dpi)
{
    if (!element.IsMeasureValid)
    {
        Size size = new Size(element.Width, element.Height);
        element.Measure(size);
        element.Arrange(new Rect(size));
    }

    element.UpdateLayout();

    var scale = dpi/96.0;

    var renderTargetBitmap = new RenderTargetBitmap
        (
            (int)(scale * element.RenderSize.Width),(int)(scale * element.RenderSize.Height),dpi,dpi,PixelFormats.Default
        );

    // this is waiting for dispatcher to perform measure, arrange and render passes
    element.Dispatcher.Invoke(((Action)(() => renderTargetBitmap.Render(element))), DispatcherPriority.Render);

    return renderTargetBitmap;
}

Hinweis: Das Diagramm ist ein ContentControl.

Kann ich das Diagramm trotzdem rendern, ohne es zuerst in einem Fenster anzuzeigen?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage