WPF stellt sowohl Drawing-Objekte als auch Shape-Objekte bereit, um grafischen Zeichnungsinhalt darzustellen. Drawing-Objekte sind jedoch einfachere Konstrukte als Shape-Objekte und stellen bessere Leistungsmerkmale bereit.
Mit Shape können Sie eine grafische Form auf dem Bildschirm zeichnen. Da sie von der FrameworkElement-Klasse abgleitet werden, können Shape-Objekte in Bereichen und den meisten Steuerelementen verwendet werden.
WPF bietet mehrere Ebenen für den Zugriff auf Grafiken und Renderingdienste. Auf der obersten Ebene stehen die benutzerfreundlichen Shape-Objekte mit einer Vielzahl von nützlichen Features zur Verfügung, z. B. Layout und Behandlung von Ereignissen. WPF bietet eine Reihe einsatzbereiter Shape-Objekte. Alle Shape-Objekte erben von der Shape-Klasse. Zu den verfügbaren Shape-Objekten gehören Ellipse, Line, Path, Polygon, Polyline und Rectangle.
Drawing-Objekte werden dagegen nicht von der FrameworkElement-Klasse abgeleitet und bieten eine einfache Implementierung für das Rendering von Formen, Bildern und Text.
Es gibt vier Typen von Drawing-Objekten:
Das GeometryDrawing-Objekt wird verwendet, um Geometrieinhalt zu rendern. Die Geometry-Klasse und die von ihr abgeleiteten konkreten Klassen, wie CombinedGeometry, EllipseGeometry und PathGeometry, bieten eine Möglichkeit für das Rendering von 2D-Grafiken und stellen außerdem Unterstützung für Trefferüberprüfungen und Clipping bereit. Mit Geometry-Objekten können beispielsweise der Bereich eines Steuerelements oder der auf ein Bild anzuwendende Clip-Bereich definiert werden. Bei Geometry-Objekten kann es sich um einfache Bereiche wie Rechtecke und Kreise oder um aus einem oder mehreren geometrischen Objekten zusammengesetzte Regionen handeln. Komplexere geometrische Regionen können erstellt werden, indem von PathSegment abgeleitete Objekte wie ArcSegment, BezierSegment und QuadraticBezierSegment kombiniert werden.
Auf den ersten Blick sind die Geometry-Klasse und die Shape-Klasse recht ähnlich. Beide werden für das Rendering von 2D-Grafiken verwendet und verfügen über ähnliche konkrete Klassen, die von ihnen abgeleitet werden, z. B. EllipseGeometry und Ellipse. Es gibt jedoch wichtige Unterschiede zwischen diesen zwei Sätzen von Klassen. Bei der Geometry-Klasse werden einige Funktionen der Shape-Klasse nicht unterstützt, wie die Fähigkeit, sich selbst zu zeichnen. Zum Zeichnen eines Geometry-Objekts muss eine andere Klasse, beispielsweise DrawingContext, Drawing oder Path (dabei ist zu beachten, dass ein Path eine Shape ist), verwendet werden, um den Zeichnungsvorgang auszuführen. Renderingeigenschaften wie Füllung, Strich und Strichstärke befinden sich in der Klasse, die das Geometry-Objekt zeichnet, während ein Shape-Objekt diese Eigenschaften enthält. Eine Möglichkeit zur Annäherung an diesen Unterschied besteht darin, dass ein Geometry-Objekt einen Bereich definiert, z. B. einen Kreis, während ein Shape-Objekt definiert, wie dieser Bereich gefüllt und konturiert wird und eine Komponente des Layoutsystems ist.
Da Shape-Objekte von der FrameworkElement-Klasse abgeleitet werden, kann durch ihre Verwendung deutlich mehr Speicher in der Anwendung belegt werden. Wenn Sie für den grafischen Inhalt auf die FrameworkElement-Features verzichten können, sollten Sie die Verwendung der einfachen Drawing-Objekte in Betracht ziehen.
Weitere Informationen über Drawing-Objekte finden Sie unter Übersicht über Zeichnungsobjekte.