Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In dieser Übersicht wird beschrieben, wie Sie mithilfe der WPF-Klassen (Windows Presentation Foundation) Geometry Formen beschreiben. In diesem Thema werden auch die Unterschiede zwischen Geometry Objekten und Shape Elementen kontrastiert.
Was ist eine Geometrie?
Die Geometry Klasse und die Von ihr abgeleiteten Klassen, z EllipseGeometry. B. , PathGeometryund CombinedGeometry, ermöglichen es Ihnen, die Geometrie einer 2D-Form zu beschreiben. Diese geometrischen Beschreibungen haben viele Verwendungsmöglichkeiten, z. B. das Definieren einer Form zum Zeichnen auf dem Bildschirm oder das Definieren von Treffertest- und Clipbereichen. Sie können sogar eine Geometrie verwenden, um einen Animationspfad zu definieren.
Geometry Objekte können einfach sein, z. B. Rechtecke und Kreise oder zusammengesetzte Objekte, die aus zwei oder mehr Geometrieobjekten erstellt wurden. Komplexere Geometrien können mithilfe der Klassen PathGeometry und StreamGeometry erstellt werden, die es ermöglichen, Bögen und Kurven zu beschreiben.
Da ein Geometry ein Typ von Freezable ist, bieten Geometry-Objekte mehrere besondere Funktionen: Sie können als Ressourcen deklariert werden, zwischen mehreren Objekten geteilt, schreibgeschützt gemacht, um die Leistung zu verbessern, geklont und threadsicher gemacht werden. Weitere Informationen zu den verschiedenen Features, die von Freezable Objekten bereitgestellt werden, finden Sie in der Übersicht über Freezable Objects.
Geometrien im Vergleich zu Shapes
Die Klassen Geometry und Shape scheinen ähnlich zu sein, da beide 2D-Formen beschreiben (vergleiche beispielsweise EllipseGeometry und Ellipse), jedoch gibt es wichtige Unterschiede.
Zum einen erbt die Geometry Klasse von der Freezable Klasse, während die Shape Klasse von FrameworkElement. Da Shape Objekte Elemente sind, können sie sich selbst rendern und am Layoutsystem teilnehmen, während Geometry Objekte dies nicht können.
Obwohl Shape Objekte einfacher zu verwenden sind als Geometry Objekte, sind Geometry Objekte vielseitiger. Während ein Shape Objekt zum Rendern von 2D-Grafiken verwendet wird, kann ein Geometry Objekt verwendet werden, um den geometrischen Bereich für 2D-Grafiken zu definieren, einen Bereich zum Ausschneiden zu definieren oder einen Bereich für Treffertests zu definieren.
Die Pfadform
Eine Shape, die Path Klasse, verwendet tatsächlich eine Geometry , um ihren Inhalt zu beschreiben. Indem Sie die Data-Eigenschaft von Path mit einem Geometry festlegen und die Eigenschaften Fill und Stroke einstellen, können Sie ein Geometry rendern.
Allgemeine Eigenschaften, die eine Geometrie annehmen
In den vorstehenden Abschnitten wurde erwähnt, dass Geometry-Objekte für verschiedene Zwecke mit anderen Objekten verwendet werden können, z. B. Zeichnen von Formen, Animieren und Beschneiden. In der folgenden Tabelle sind mehrere Klassen mit Eigenschaften aufgeführt, die ein Geometry Objekt verwenden.
| Typ | Eigentum |
|---|---|
| DoubleAnimationUsingPath | PathGeometry |
| DrawingGroup | ClipGeometry |
| GeometryDrawing | Geometry |
| Path | Data |
| UIElement | Clip |
Einfache Geometrietypen
Die Basisklasse für alle Geometrien ist die abstrakte Klasse Geometry. Die Klassen, die von der Geometry Klasse abgeleitet werden, können in etwa in drei Kategorien unterteilt werden: einfache Geometrien, Pfadgeometrien und zusammengesetzte Geometrien.
Einfache Geometrieklassen umfassen LineGeometry, RectangleGeometryund EllipseGeometry werden verwendet, um einfache geometrische Formen wie Linien, Rechtecke und Kreise zu erstellen.
A LineGeometry wird durch Angeben des Startpunkts der Linie und des Endpunkts definiert.
A RectangleGeometry wird mit einer Rect Struktur definiert, die die relative Position und die Höhe und Breite angibt. Sie können ein abgerundetes Rechteck erstellen, indem Sie die Eigenschaften RadiusX und RadiusY festlegen.
Ein EllipseGeometry Wert wird durch einen Mittelpunkt, einen X-Radius und einen y-Radius definiert. Die folgenden Beispiele zeigen, wie Sie einfache Geometrien zum Rendern und zum Beschneiden erstellen.
Diese Formen sowie komplexere Formen können mit einem PathGeometry oder durch kombinieren von Geometrieobjekten erstellt werden, aber diese Klassen bieten eine einfachere Möglichkeit, diese grundlegenden geometrischen Formen zu erzeugen.
Im folgenden Beispiel wird gezeigt, wie LineGeometry erstellt und gerendert wird. Wie bereits erwähnt, kann ein Geometry Objekt nicht selbst zeichnen, sodass im Beispiel eine Path Form zum Rendern der Linie verwendet wird. Da eine Linie keinen Bereich aufweist, hat das Festlegen der Fill-Eigenschaft der Path-Eigenschaft keine Auswirkung. Stattdessen werden nur die Stroke- und StrokeThickness-Eigenschaften angegeben. Die folgende Abbildung zeigt die Ausgabe des Beispiels.
Eine Liniengeometrie, gezeichnet von (10,20) bis (100,130)
<Path Stroke="Black" StrokeThickness="1" >
<Path.Data>
<LineGeometry StartPoint="10,20" EndPoint="100,130" />
</Path.Data>
</Path>
LineGeometry myLineGeometry = new LineGeometry();
myLineGeometry.StartPoint = new Point(10,20);
myLineGeometry.EndPoint = new Point(100,130);
Path myPath = new Path();
myPath.Stroke = Brushes.Black;
myPath.StrokeThickness = 1;
myPath.Data = myLineGeometry;
Dim myLineGeometry As New LineGeometry()
myLineGeometry.StartPoint = New Point(10,20)
myLineGeometry.EndPoint = New Point(100,130)
Dim myPath As New Path()
myPath.Stroke = Brushes.Black
myPath.StrokeThickness = 1
myPath.Data = myLineGeometry
Das nächste Beispiel zeigt, wie Sie EllipseGeometry erstellen und rendern. Die Beispiele legen das Center des EllipseGeometry auf den Punkt 50,50 fest, und der x-Radius und der y-Radius werden beide auf 50 festgelegt, wodurch ein Kreis mit einem Durchmesser von 100 Pixel erstellt wird. Das Innere der Ellipse wird gezeichnet, indem der Fill-Eigenschaft des Path-Elements in diesem Fall Goldein Wert zugewiesen wird. Die folgende Abbildung zeigt die Ausgabe des Beispiels.
Eine EllipseGeometry gezeichnet bei (50,50)
<Path Fill="Gold" Stroke="Black" StrokeThickness="1">
<Path.Data>
<EllipseGeometry Center="50,50" RadiusX="50" RadiusY="50" />
</Path.Data>
</Path>
EllipseGeometry myEllipseGeometry = new EllipseGeometry();
myEllipseGeometry.Center = new Point(50, 50);
myEllipseGeometry.RadiusX = 50;
myEllipseGeometry.RadiusY = 50;
Path myPath = new Path();
myPath.Fill = Brushes.Gold;
myPath.Stroke = Brushes.Black;
myPath.StrokeThickness = 1;
myPath.Data = myEllipseGeometry;
Dim myEllipseGeometry As New EllipseGeometry()
myEllipseGeometry.Center = New Point(50, 50)
myEllipseGeometry.RadiusX = 50
myEllipseGeometry.RadiusY = 50
Dim myPath As New Path()
myPath.Fill = Brushes.Gold
myPath.Stroke = Brushes.Black
myPath.StrokeThickness = 1
myPath.Data = myEllipseGeometry
Im folgenden Beispiel wird gezeigt, wie RectangleGeometry erstellt und gerendert wird. Die Position und die Abmessungen des Rechtecks werden durch eine Rect Struktur definiert. Die Position ist 50,50 und die Höhe und Breite sind beide 25, wodurch ein Quadrat entsteht. Die folgende Abbildung zeigt die Ausgabe des Beispiels.
Ein RectangleGeometry, gezeichnet bei 50,50
<Path Fill="LemonChiffon" Stroke="Black" StrokeThickness="1">
<Path.Data>
<RectangleGeometry Rect="50,50,25,25" />
</Path.Data>
</Path>
RectangleGeometry myRectangleGeometry = new RectangleGeometry();
myRectangleGeometry.Rect = new Rect(50,50,25,25);
Path myPath = new Path();
myPath.Fill = Brushes.LemonChiffon;
myPath.Stroke = Brushes.Black;
myPath.StrokeThickness = 1;
myPath.Data = myRectangleGeometry;
Dim myRectangleGeometry As New RectangleGeometry()
myRectangleGeometry.Rect = New Rect(50,50,25,25)
Dim myPath As New Path()
myPath.Fill = Brushes.LemonChiffon
myPath.Stroke = Brushes.Black
myPath.StrokeThickness = 1
myPath.Data = myRectangleGeometry
Das folgende Beispiel zeigt, wie Sie einen EllipseGeometry Als Clipbereich für ein Bild verwenden. Ein Image Objekt wird mit Width 200 und Height 150 definiert. Ein EllipseGeometry Wert von RadiusX 100, ein RadiusY Wert von 75 und ein Center Wert von 100,75 werden auf die Clip Eigenschaft des Bilds festgelegt. Nur der Teil des Bilds, der sich innerhalb des Bereichs der Ellipse befindet, wird angezeigt. Die folgende Abbildung zeigt die Ausgabe des Beispiels.
Eine Ellipse-Geometrie zum Zuschneiden eines Bildsteuerelements
<Image
Source="sampleImages\Waterlilies.jpg"
Width="200" Height="150" HorizontalAlignment="Left">
<Image.Clip>
<EllipseGeometry
RadiusX="100"
RadiusY="75"
Center="100,75"/>
</Image.Clip>
</Image>
// Create the image to clip.
Image myImage = new Image();
Uri imageUri =
new Uri(@"C:\\Documents and Settings\\All Users\\Documents\My Pictures\\Sample Pictures\\Water lilies.jpg", UriKind.Relative);
myImage.Source = new BitmapImage(imageUri);
myImage.Width = 200;
myImage.Height = 150;
myImage.HorizontalAlignment = HorizontalAlignment.Left;
// Use an EllipseGeometry to define the clip region.
EllipseGeometry myEllipseGeometry = new EllipseGeometry();
myEllipseGeometry.Center = new Point(100, 75);
myEllipseGeometry.RadiusX = 100;
myEllipseGeometry.RadiusY = 75;
myImage.Clip = myEllipseGeometry;
' Create the image to clip.
Dim myImage As New Image()
Dim imageUri As New Uri("C:\\Documents and Settings\\All Users\\Documents\My Pictures\\Sample Pictures\\Water lilies.jpg", UriKind.Relative)
myImage.Source = New BitmapImage(imageUri)
myImage.Width = 200
myImage.Height = 150
myImage.HorizontalAlignment = HorizontalAlignment.Left
' Use an EllipseGeometry to define the clip region.
Dim myEllipseGeometry As New EllipseGeometry()
myEllipseGeometry.Center = New Point(100, 75)
myEllipseGeometry.RadiusX = 100
myEllipseGeometry.RadiusY = 75
myImage.Clip = myEllipseGeometry
Pfadgeometrien
Die PathGeometry Klasse und ihr leichtes Äquivalent, die StreamGeometry Klasse, bieten die Mittel, um mehrere komplexe Figuren zu beschreiben, die aus Bogen, Kurven und Linien bestehen.
Im Kern eines PathGeometry steht eine Sammlung von PathFigure Objekten, die so benannt sind, weil jede Figur eine diskrete Form im PathGeometry beschreibt. Jeder PathFigure besteht aus einem oder PathSegment mehreren Objekten, von denen jedes ein Segment der Abbildung beschreibt.
Es gibt viele Arten von Segmenten.
| Segmenttyp | BESCHREIBUNG | Beispiel |
|---|---|---|
| ArcSegment | Erstellt einen elliptischen Bogen zwischen zwei Punkten. | Erstellen Sie einen Elliptischen Bogen. |
| BezierSegment | Erstellt eine kubische Bézierkurve zwischen zwei Punkten. | Erstellen Sie eine kubische Bézierkurve. |
| LineSegment | Erstellt eine Linie zwischen zwei Punkten. | Erstellen Sie ein Liniensegment in einer Pfadgeometrie |
| PolyBezierSegment | Erstellt eine Reihe von kubischen Bézierkurven. | Weitere Informationen finden Sie auf der Seite " PolyBezierSegment Typ". |
| PolyLineSegment | Erstellt eine Reihe von Linien. | Weitere Informationen finden Sie auf der Seite " PolyLineSegment Typ". |
| PolyQuadraticBezierSegment | Erstellt eine Reihe von quadratischen Bézierkurven. | Besuchen Sie die PolyQuadraticBezierSegment Seite. |
| QuadraticBezierSegment | Erstellt eine quadratische Bézierkurve. | Erstellen Sie eine quadratische Bézierkurve. |
Die Segmente innerhalb eines Segments PathFigure werden in einer einzigen geometrischen Form kombiniert, wobei der Endpunkt jedes Segments der Anfangspunkt des nächsten Abschnitts ist. Die StartPoint Eigenschaft eines PathFigure Objekts gibt den Punkt an, von dem das erste Segment gezeichnet wird. Jedes nachfolgende Segment beginnt am Endpunkt des vorherigen Abschnitts. Beispielsweise kann eine vertikale Linie von 10,50 zu 10,150 definiert werden, indem die StartPoint-Eigenschaft auf 10,50 festgelegt und ein LineSegment mit einer Point-Eigenschaftseinstellung von 10,150 erstellt wird.
Im folgenden Beispiel wird ein einfaches PathGeometry Element erstellt, das aus einem einzelnen PathFigure mit einem LineSegment Element besteht und es mithilfe eines Path Elements anzeigt. Das PathFigure-Objekt's StartPoint ist auf 10,20 gesetzt, und eine LineSegment wird mit einem Endpunkt von 100,130 definiert. Die folgende Abbildung zeigt die PathGeometry die durch dieses Beispiel erstellt wurde.
Eine PathGeometry, die ein einzelnes Liniensegment enthält
<Path Stroke="Black" StrokeThickness="1">
<Path.Data>
<PathGeometry>
<PathGeometry.Figures>
<PathFigure StartPoint="10,20">
<PathFigure.Segments>
<LineSegment Point="100,130"/>
</PathFigure.Segments>
</PathFigure>
</PathGeometry.Figures>
</PathGeometry>
</Path.Data>
</Path>
// Create a figure that describes a
// line from (10,20) to (100,130).
PathFigure myPathFigure = new PathFigure();
myPathFigure.StartPoint = new Point(10,20);
myPathFigure.Segments.Add(
new LineSegment(new Point(100,130),
true /* IsStroked */ ));
/// Create a PathGeometry to contain the figure.
PathGeometry myPathGeometry = new PathGeometry();
myPathGeometry.Figures.Add(myPathFigure);
// Display the PathGeometry.
Path myPath = new Path();
myPath.Stroke = Brushes.Black;
myPath.StrokeThickness = 1;
myPath.Data = myPathGeometry;
' Create a figure that describes a
' line from (10,20) to (100,130).
Dim myPathFigure As New PathFigure()
myPathFigure.StartPoint = New Point(10,20)
myPathFigure.Segments.Add(New LineSegment(New Point(100,130), True)) ' IsStroked
''' Create a PathGeometry to contain the figure.
Dim myPathGeometry As New PathGeometry()
myPathGeometry.Figures.Add(myPathFigure)
' Display the PathGeometry.
Dim myPath As New Path()
myPath.Stroke = Brushes.Black
myPath.StrokeThickness = 1
myPath.Data = myPathGeometry
Es lohnt sich, dieses Beispiel mit dem vorherigen LineGeometry Beispiel zu vergleichen. Die Syntax für eine PathGeometry ist viel ausführlicher als die für eine einfache LineGeometry, und es kann sinnvoller sein, die LineGeometry Klasse in diesem Fall zu verwenden, aber die ausführliche Syntax der PathGeometry ermöglicht höchst komplexe und komplizierte geometrische Bereiche.
Komplexere Geometrien können mithilfe einer Kombination von PathSegment Objekten erstellt werden.
Im nächsten Beispiel werden ein BezierSegment, ein LineSegment und ein ArcSegment verwendet, um Formen zu erstellen. Im ersten Beispiel wird eine kubische Bézierkurve erstellt, indem vier Punkte definiert werden: ein Startpunkt, der der Endpunkt des vorherigen Abschnitts, ein Endpunkt (Point3) und zwei Kontrollpunkte (Point1 und Point2). Die beiden Kontrollpunkte einer kubischen Bézierkurve verhalten sich wie Magnete und ziehen Teile davon an, was andernfalls eine gerade Linie zu sich selbst sein würde, was eine Kurve erzeugt. Der erste Kontrollpunkt wirkt Point1sich auf den Anfangsbereich der Kurve aus. Der zweite Kontrollpunkt Point2wirkt sich auf den Endbereich der Kurve aus.
Im Beispiel wird dann ein LineSegment hinzugefügt, das zwischen dem Endpunkt des vorherigen BezierSegment und dem durch seine LineSegment-Eigenschaft angegebenen Punkt gezeichnet wird.
Anschließend wird ein ArcSegment gezeichnet, der vom Endpunkt des vorhergehenden LineSegment bis zu dem durch die Point-Eigenschaft angegebenen Punkt reicht. Das Beispiel gibt außerdem den X- und Y-Radius (Size), einen Drehwinkel (RotationAngle), ein Kennzeichen an, das angibt, wie groß der Winkel des resultierenden Bogens sein soll (IsLargeArc), und ein Wert, der angibt, in welcher Richtung der Bogen gezeichnet wird (SweepDirection). Die folgende Abbildung zeigt die mit diesem Beispiel erstellte Form.
Eine Pfadgeometrie
<Path Stroke="Black" StrokeThickness="1" >
<Path.Data>
<PathGeometry>
<PathGeometry.Figures>
<PathFigure StartPoint="10,50">
<PathFigure.Segments>
<BezierSegment
Point1="100,0"
Point2="200,200"
Point3="300,100"/>
<LineSegment Point="400,100" />
<ArcSegment
Size="50,50" RotationAngle="45"
IsLargeArc="True" SweepDirection="Clockwise"
Point="200,100"/>
</PathFigure.Segments>
</PathFigure>
</PathGeometry.Figures>
</PathGeometry>
</Path.Data>
</Path>
// Create a figure.
PathFigure myPathFigure = new PathFigure();
myPathFigure.StartPoint = new Point(10,50);
myPathFigure.Segments.Add(
new BezierSegment(
new Point(100,0),
new Point(200,200),
new Point(300,100),
true /* IsStroked */ ));
myPathFigure.Segments.Add(
new LineSegment(
new Point(400,100),
true /* IsStroked */ ));
myPathFigure.Segments.Add(
new ArcSegment(
new Point(200,100),
new Size(50,50),
45,
true, /* IsLargeArc */
SweepDirection.Clockwise,
true /* IsStroked */ ));
/// Create a PathGeometry to contain the figure.
PathGeometry myPathGeometry = new PathGeometry();
myPathGeometry.Figures.Add(myPathFigure);
// Display the PathGeometry.
Path myPath = new Path();
myPath.Stroke = Brushes.Black;
myPath.StrokeThickness = 1;
myPath.Data = myPathGeometry;
' Create a figure.
Dim myPathFigure As New PathFigure()
myPathFigure.StartPoint = New Point(10,50)
myPathFigure.Segments.Add(New BezierSegment(New Point(100,0), New Point(200,200), New Point(300,100), True)) ' IsStroked
myPathFigure.Segments.Add(New LineSegment(New Point(400,100), True)) ' IsStroked
myPathFigure.Segments.Add(New ArcSegment(New Point(200,100), New Size(50,50), 45, True, SweepDirection.Clockwise, True)) ' IsStroked - IsLargeArc
''' Create a PathGeometry to contain the figure.
Dim myPathGeometry As New PathGeometry()
myPathGeometry.Figures.Add(myPathFigure)
' Display the PathGeometry.
Dim myPath As New Path()
myPath.Stroke = Brushes.Black
myPath.StrokeThickness = 1
myPath.Data = myPathGeometry
Noch komplexere Geometrien können mithilfe mehrerer PathFigure Objekte innerhalb eines PathGeometryObjekts erstellt werden.
Im folgenden Beispiel wird ein PathGeometry mit zwei PathFigure Objekten erstellt, die jeweils mehrere PathSegment Objekte enthalten. Das PathFigure-Beispiel oben und ein PathFigure mit einem PolyLineSegment und einem QuadraticBezierSegment werden verwendet. A PolyLineSegment wird mit einem Array von Punkten definiert und die QuadraticBezierSegment mit einem Kontrollpunkt und einem Endpunkt definiert. Die folgende Abbildung zeigt die mit diesem Beispiel erstellte Form.
Eine PathGeometry mit mehreren Figuren
<Path Stroke="Black" StrokeThickness="1" >
<Path.Data>
<PathGeometry>
<PathGeometry.Figures>
<PathFigure StartPoint="10,50">
<PathFigure.Segments>
<BezierSegment
Point1="100,0"
Point2="200,200"
Point3="300,100"/>
<LineSegment Point="400,100" />
<ArcSegment
Size="50,50" RotationAngle="45"
IsLargeArc="True" SweepDirection="Clockwise"
Point="200,100"/>
</PathFigure.Segments>
</PathFigure>
<PathFigure StartPoint="10,100">
<PathFigure.Segments>
<PolyLineSegment Points="50,100 50,150" />
<QuadraticBezierSegment Point1="200,200" Point2="300,100"/>
</PathFigure.Segments>
</PathFigure>
</PathGeometry.Figures>
</PathGeometry>
</Path.Data>
</Path>
PathGeometry myPathGeometry = new PathGeometry();
// Create a figure.
PathFigure pathFigure1 = new PathFigure();
pathFigure1.StartPoint = new Point(10,50);
pathFigure1.Segments.Add(
new BezierSegment(
new Point(100,0),
new Point(200,200),
new Point(300,100),
true /* IsStroked */ ));
pathFigure1.Segments.Add(
new LineSegment(
new Point(400,100),
true /* IsStroked */ ));
pathFigure1.Segments.Add(
new ArcSegment(
new Point(200,100),
new Size(50,50),
45,
true, /* IsLargeArc */
SweepDirection.Clockwise,
true /* IsStroked */ ));
myPathGeometry.Figures.Add(pathFigure1);
// Create another figure.
PathFigure pathFigure2 = new PathFigure();
pathFigure2.StartPoint = new Point(10,100);
Point[] polyLinePointArray =
new Point[]{ new Point(50, 100), new Point(50, 150)};
PolyLineSegment myPolyLineSegment = new PolyLineSegment();
myPolyLineSegment.Points =
new PointCollection(polyLinePointArray);
pathFigure2.Segments.Add(myPolyLineSegment);
pathFigure2.Segments.Add(
new QuadraticBezierSegment(
new Point(200,200),
new Point(300,100),
true /* IsStroked */ ));
myPathGeometry.Figures.Add(pathFigure2);
// Display the PathGeometry.
Path myPath = new Path();
myPath.Stroke = Brushes.Black;
myPath.StrokeThickness = 1;
myPath.Data = myPathGeometry;
Dim myPathGeometry As New PathGeometry()
' Create a figure.
Dim pathFigure1 As New PathFigure()
pathFigure1.StartPoint = New Point(10,50)
pathFigure1.Segments.Add(New BezierSegment(New Point(100,0), New Point(200,200), New Point(300,100), True)) ' IsStroked
pathFigure1.Segments.Add(New LineSegment(New Point(400,100), True)) ' IsStroked
pathFigure1.Segments.Add(New ArcSegment(New Point(200,100), New Size(50,50), 45, True, SweepDirection.Clockwise, True)) ' IsStroked - IsLargeArc
myPathGeometry.Figures.Add(pathFigure1)
' Create another figure.
Dim pathFigure2 As New PathFigure()
pathFigure2.StartPoint = New Point(10,100)
Dim polyLinePointArray() As Point = { New Point(50, 100), New Point(50, 150)}
Dim myPolyLineSegment As New PolyLineSegment()
myPolyLineSegment.Points = New PointCollection(polyLinePointArray)
pathFigure2.Segments.Add(myPolyLineSegment)
pathFigure2.Segments.Add(New QuadraticBezierSegment(New Point(200,200), New Point(300,100), True)) ' IsStroked
myPathGeometry.Figures.Add(pathFigure2)
' Display the PathGeometry.
Dim myPath As New Path()
myPath.Stroke = Brushes.Black
myPath.StrokeThickness = 1
myPath.Data = myPathGeometry
StreamGeometrie
Wie die PathGeometry Klasse definiert eine StreamGeometry komplexe geometrische Form, die Kurven, Bögen und Linien enthalten kann. Im Gegensatz zu einem PathGeometry unterstützen die Inhalte eines StreamGeometry keine Datenbindung, Animation oder Änderung. Verwenden Sie eine StreamGeometry, wenn Sie eine komplexe Geometrie beschreiben müssen, aber nicht den zusätzlichen Aufwand für die Unterstützung von Datenbindung, Animation oder Modifikation möchten. Aufgrund ihrer Effizienz ist die StreamGeometry Klasse eine gute Wahl für die Beschreibung von Verzierungen.
Ein Beispiel finden Sie unter Create a Shape Using a StreamGeometry.
Pfadmarkierungssyntax
Die PathGeometry Und StreamGeometry Typen unterstützen eine XAML-Attributsyntax (Extensible Application Markup Language) mithilfe einer speziellen Reihe von Verschieben- und Zeichnen-Befehlen. Weitere Informationen finden Sie unter Pfadmarkierungssyntax.
Zusammengesetzte Geometrien
Zusammengesetzte Geometrieobjekte können mit einem GeometryGroup, einem CombinedGeometry oder durch Aufrufen der statischen Geometry-Methode Combine erstellt werden.
Das CombinedGeometry Objekt und die Combine Methode führen einen booleschen Vorgang aus, um den durch zwei Geometrien definierten Bereich zu kombinieren. Geometry Objekte ohne Fläche werden verworfen. Es können nur zwei Geometry Objekte kombiniert werden (obwohl diese beiden Geometrien auch zusammengesetzte Geometrien sein können).
Die GeometryGroup Klasse erstellt eine Zusammenführung der Geometry darin enthaltenen Objekte, ohne deren Bereich zu kombinieren. Eine beliebige Anzahl von Geometry Objekten kann einem GeometryGrouphinzugefügt werden. Ein Beispiel finden Sie unter Erstellen einer zusammengesetzten Form.
Da sie keinen Kombinationsvorgang ausführen, bietet die Verwendung von GeometryGroup Objekten leistungsvorteile gegenüber der Verwendung von CombinedGeometry Objekten oder der Combine Methode.
Kombinierte Geometrien
Im vorherigen Abschnitt wurde das CombinedGeometry Objekt erwähnt, und die Combine Methode kombiniert den bereich, der durch die darin enthaltenen Geometrien definiert ist. Die GeometryCombineMode Enumeration gibt an, wie die Geometrien kombiniert werden. Die möglichen Werte für die GeometryCombineMode Eigenschaft sind: Union, , Intersect, Excludeund Xor.
Im folgenden Beispiel wird eine CombinedGeometry mit einem Kombinationsmodus von Union definiert. Sowohl Geometry1 als auch Geometry2 sind als Kreise mit demselben Radius definiert, deren Mittelpunkte jedoch um 50 versetzt sind.
<Path Stroke="Black" StrokeThickness="1" Fill="#CCCCFF">
<Path.Data>
<!-- Combines two geometries using the union combine mode. -->
<CombinedGeometry GeometryCombineMode="Union">
<CombinedGeometry.Geometry1>
<EllipseGeometry RadiusX="50" RadiusY="50" Center="75,75" />
</CombinedGeometry.Geometry1>
<CombinedGeometry.Geometry2>
<EllipseGeometry RadiusX="50" RadiusY="50" Center="125,75" />
</CombinedGeometry.Geometry2>
</CombinedGeometry>
</Path.Data>
</Path>
Im folgenden Beispiel ist eine CombinedGeometry mit einem Kombinationsmodus von Xor definiert. Sowohl Geometry1 als auch Geometry2 sind als Kreise mit demselben Radius definiert, deren Mittelpunkte jedoch um 50 versetzt sind.
<Path Stroke="Black" StrokeThickness="1" Fill="#CCCCFF">
<Path.Data>
<!-- Combines two geometries using the XOR combine mode. -->
<CombinedGeometry GeometryCombineMode="Xor">
<CombinedGeometry.Geometry1>
<EllipseGeometry RadiusX="50" RadiusY="50" Center="75,75" />
</CombinedGeometry.Geometry1>
<CombinedGeometry.Geometry2>
<EllipseGeometry RadiusX="50" RadiusY="50" Center="125,75" />
</CombinedGeometry.Geometry2>
</CombinedGeometry>
</Path.Data>
</Path>
Weitere Beispiele finden Sie unter Erstellen einer zusammengesetzten Form und Erstellen einer kombinierten Geometrie.
Freezable-Features
Da sie von der Freezable Klasse erbt, stellt die Geometry Klasse mehrere spezielle Features bereit: Geometry Objekte können als XAML-Ressourcen deklariert werden, die für mehrere Objekte freigegeben werden, schreibgeschützt gemacht werden, um die Leistung zu verbessern, geklont und threadsicher zu machen. Weitere Informationen zu den verschiedenen Features, die von Freezable Objekten bereitgestellt werden, finden Sie in der Übersicht über Freezable Objects.
Andere Geometrie-Funktionen
Die Geometry Klasse bietet auch nützliche Hilfsmethoden, z. B. die folgenden:
FillContains - Bestimmt, ob die Geometrie ein anderes Geometryenthält.
Bestimmt, ob der Strich eines StrokeContains einen bestimmten Punkt enthält.
Eine vollständige Auflistung der Methoden finden Sie in der Geometry Klasse.
Siehe auch
.NET Desktop feedback