2010-12-17 7 views
4

Ich möchte ein Chart-Steuerelement (aus WPF-Toolkit http://wpf.codeplex.com) in der Konsole-Anwendung (ich eigentlich nie zeigen es dem Benutzer), aber ich mache weiterhin ein leeres Bild. Wenn ich ein anderes Steuerelement (z. B. TextBlock) wähle, funktioniert alles wie erwartet. Hier ist der Code, um das Problem zu reproduzieren:Wie Rendern Chart (von WPF Toolkit) Kontrolle Offscreen?

// BEGIN

Chart chart = new Chart { Width = 300, Height = 230 };
// ich nicht hinzufügen Serie noch, weil ich dachte, dass vielleicht die Probleme verursacht ...
chart.Background = Brushes.Blue;
chart.BorderBrush = Brushes.Red;
chart.BorderThickness = new Thickness(10);
chart.Title = "Test chart";
chart.Measure(new Size(chart.Width, chart.Height));
chart.Arrange(new Rect(new Size(chart.Width, chart.Height)));

RenderTargetBitmap rtb = new RenderTargetBitmap((int)chart.Width, (int)chart.Height, 96, 96, PixelFormats.Pbgra32);
rtb.Render(chart);
PngBitmapEncoder png = new PngBitmapEncoder();
png.Frames.Add(BitmapFrame.Create(rtb));
using (System.IO.Stream stream = System.IO.File.Create("C:\\chart.png"))
{
png.Save(stream);
}

// END

Wenn ich diesen Code in nicht Konsole aber WPF-Anwendung ausführen, wo Diagramm ein Steuerelement im Formular angezeigt wird, funktioniert alles einwandfrei. Leute erwähnen etwas über die Animationen, die verwendet werden, um das Steuerelement auf verschiedenen Threads zu zeichnen. Ich habe versucht, meinen Hauptfaden einzuschlafen, in der Hoffnung, dass der andere dann Zeit hat, den Graphen zu zeichnen. Kein Glück hier auch ...

Wer Ideen? Wie kann ich dieses Steuerelement außerhalb des Bildschirms rendern?

+0

Was ist der Punkt, an dem eine WPF-Komponente in einer Konsolenanwendung ausgeführt wird? Dies ist keine bequeme Methode, da die Art der Anwendung, die Sie auswählen, die entsprechenden Referenz-DLLs lädt. –

+1

Der Grund, es in einer Konsolen-App zu tun, ist, dass ich kein ordentliches WPF-Fenster brauche. Ich muss nur den Graphen im Speicher erzeugen und z. Speichern Sie es in einer Datei. Natürlich schließe ich alle notwendigen DLLs ein, also alles kompiliert erfolgreich. Irgendeine Idee, was das Problem in meinem Fall ist? – Michal

+0

Ich bin auf das gleiche Problem gestoßen (aber ich benutze stattdessen einen Windows-Dienst) und diesen Post [hier] (http://StackOverflow.com/questions/1461382/wpf-instantiate-user-control-programmatically-to-render -it-as-png/1468738 # 1468738) half, es zu lösen. – ssarabando

Antwort

1

Haben Sie die Lösung heute:

  1. Deaktivieren Sie alle Animationen des Diagramms
  2. Call-Methode UpdateLayout() des Diagramms nach Measure() und Arrange()

Das ist es!

+0

Können Sie darauf hinweisen, wie Sie alle Animationen deaktivieren? –