Próbuję utworzyć obrazy wykresów bez wyświetlania tych wykresów na ekranie. Byłem w tym od dłuższego czasu i próbowałem wielu różnych rzeczy, ale nic nie działa. Kod działa idealnie, jeśli najpierw wyświetlam wykres w oknie, ale jeśli nie wyświetlam go w oknie, bitmapa jest biała z czarną obwódką (nie mam pojęcia dlaczego).ContentControl + RenderTargetBitmap + pusty obraz
Próbowałem dodać wykres do granicy przed renderowaniem i nadanie granicy zielonej granicy. W mapie bitowej widzę zieloną obramowanie, a następnie czarne obramowanie i białe tło, ale bez wykresu. Wykres nie jest zawarty w czarnej granicy, więc nie wiem, skąd to pochodzi.
Próbowałem dodawać wykres do okna bez wywoływania window.Show() i ponownie po prostu uzyskać czarny granicy i białe tło. Jednak jeśli wywołasz window.Show() mapa bitowa zawiera wykres.
Próbowałem przy użyciu rysunkuVisual, jak wyjaśniono here, sam wynik.
Oto kod (nie wliczając dodanie elementu do granicy lub okna):
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;
}
Uwaga: Na wykresie jest ContentControl.
Czy mimo to mogę wydrukować wykres bez wyświetlania go w oknie?
To nie działa dla mnie. Gdzie wstawiłeś w swoim kodzie ApplyTemplate? –
Niestety minęły dwa lata, odkąd odpowiedziałem na to pytanie i nie mam już dostępu do tego kodu. Spróbuj dodać go przed UpdateLayout – Kelly
Dziękuję za opublikowanie odpowiedzi. Uratowałeś mi wiele kłopotów! :) – ihake