Ich versuche, einige Diagrammbilder zu erstellen, ohne diese Diagramme jemals auf dem Bildschirm anzuzeigen. Ich war schon eine ganze Weile dabei und probierte viele verschiedene Dinge aus, aber nichts scheint zu funktionieren. Der Code funktioniert perfekt, wenn ich das Diagramm zuerst in einem Fenster zeige, aber wenn ich es nicht in einem Fenster zeige, ist das Bitmap nur weiß mit einem schwarzen Rand (keine Ahnung warum).ContentControl + RenderTargetBitmap + leeres Bild
Ich habe versucht, das Diagramm zu einer Grenze Zugabe vor dem Rendern und der Grenze eine grüne BorderBrush geben. In der Bitmap sehe ich den grünen Rahmen, dann den schwarzen Rahmen und den weißen Hintergrund, aber kein Diagramm. Das Chart ist nicht in einem schwarzen Boarder enthalten, daher weiß ich nicht, woher das kommt.
Ich habe versucht, das Diagramm zu einem Fenster ohne Aufruf von window.Show() hinzufügen und wieder bekomme ich nur die schwarzen Boarder und weißen Hintergrund. Wenn ich jedoch window.Show() aufrufe, enthält die Bitmap das Diagramm.
Ich habe versucht, mit einer ZeichnungVisual wie erläutert here, das gleiche Ergebnis. Hier
ist der Code (ohne Hinzufügen des Elements zu einem Rand 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;
}
Anmerkung: Die Grafik eines Content ist.
Gibt es trotzdem ich das Diagramm, um es in einem Fenster zu machen bekommen kann zunächst ohne Anzeige?
Es funktioniert nicht für mich. Wo haben Sie den ApplyTemplate in Ihren Code eingefügt? –
Sorry, es ist zwei Jahre her, dass ich das beantwortet habe und ich habe keinen Zugriff mehr auf diesen Code. Versuchen Sie es vor dem UpdateLayout hinzuzufügen – Kelly
Vielen Dank für das Posten der Antwort. Du hast mir eine Menge Ärger erspart! :) – ihake