Geometriöversikt
Den här översikten beskriver hur du använder WPF(Windows Presentation Foundation) Geometry klasser för att beskriva former. Det här avsnittet kontrasterar också skillnaderna mellan Geometry objekt och Shape element.
Vad är en geometri?
Med klassen Geometry och de klasser som härleds från den, till exempel EllipseGeometry, PathGeometryoch CombinedGeometry, kan du beskriva geometrin för en 2D-form. Dessa geometriska beskrivningar har många användningsområden, som att definiera en form att måla på skärmen eller definiera träfftest- och klippregioner. Du kan till och med använda en geometri för att definiera en animeringssökväg.
Geometry objekt kan vara enkla, till exempel rektanglar och cirklar, eller sammansatta, som skapats från två eller flera geometriobjekt. Mer komplexa geometrier kan skapas med hjälp av klasserna PathGeometry och StreamGeometry, vilket gör att du kan beskriva bågar och kurvor.
Eftersom en Geometry är en typ av Freezableger Geometry objekt flera specialfunktioner: de kan deklareras som resurser, delas mellan flera objekt, göras skrivskyddade för att förbättra prestanda, klonas och göras trådsäkra. För mer information om de olika funktionerna som tillhandahålls av Freezable-objekt finns i Översikt över frysbara objekt.
Geometrier jämfört med former
Klasserna Geometry och Shape verkar liknande eftersom de båda beskriver 2D-former (jämför EllipseGeometry och Ellipse till exempel), men det finns viktiga skillnader.
För det första ärver klassen Geometry från klassen Freezable medan klassen Shape ärver från FrameworkElement. Eftersom de är element kan Shape objekt återge sig själva och delta i layoutsystemet, medan Geometry objekt inte kan göra det.
Även om Shape objekt är lättare att använda än Geometry objekt, är Geometry objekt mer mångsidiga. Även om ett Shape objekt används för att återge 2D-grafik, kan ett Geometry objekt användas för att definiera den geometriska regionen för 2D-grafik, definiera en region för urklipp eller definiera en region för träfftestning, till exempel.
Sökvägsformen
En Shape, klassen Path, använder faktiskt en Geometry för att beskriva innehållet. Genom att ange egenskapen Data för Path med en Geometry och ange dess egenskaper för Fill och Stroke kan du återge en Geometry.
Vanliga egenskaper som innefattar en geometri
I de föregående avsnitten nämndes att geometriobjekt kan användas med andra objekt i olika syften, till exempel rita former, animera och klippning. I följande tabell visas flera klasser som har egenskaper som tar ett Geometry objekt.
Typ | Egenskap |
---|---|
DoubleAnimationUsingPath | PathGeometry |
DrawingGroup | ClipGeometry |
GeometryDrawing | Geometry |
Path | Data |
UIElement | Clip |
Enkla geometrityper
Basklassen för alla geometrier är den abstrakta klassen Geometry. Klasserna som härleds från klassen Geometry kan grupperas ungefär i tre kategorier: enkla geometrier, sökvägsgeometrier och sammansatta geometrier.
Enkla geometriklasser omfattar LineGeometry, RectangleGeometryoch EllipseGeometry och används för att skapa grundläggande geometriska former, till exempel linjer, rektanglar och cirklar.
En LineGeometry definieras genom att ange startpunkten för raden och slutpunkten.
En RectangleGeometry definieras med en Rect struktur som anger dess relativa position och dess höjd och bredd. Du kan skapa en rundad rektangel genom att ange egenskaperna RadiusX och RadiusY.
En EllipseGeometry definieras av en mittpunkt, en x-radie och en radie på y. I följande exempel visas hur du skapar enkla geometrier för återgivning och urklipp.
Samma former, liksom mer komplexa former, kan skapas med hjälp av en PathGeometry eller genom att kombinera geometriobjekt tillsammans, men dessa klasser ger ett enklare sätt att producera dessa grundläggande geometriska former.
I följande exempel visas hur du skapar och renderar en LineGeometry. Som tidigare nämnts kan inte ett Geometry objekt rita sig själv, så i exemplet används en Path form för att återge linjen. Eftersom en linje inte har något område skulle det inte ha någon effekt att ange egenskapen Fill för Path. i stället anges endast egenskaperna Stroke och StrokeThickness. Följande bild visar utdata från exemplet.
En linjegeometri ritad från (10, 20) till (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
I nästa exempel visas hur du skapar och renderar en EllipseGeometry. Exemplen sätter Center för EllipseGeometry till punkten 50,50
, och x-radien och y-radien båda sätts till 50
, vilket ger en cirkel med en diameter på 100. Ellipsens insida färgas genom att tilldela ett värde till Path-elementets fyllningsegenskap, i det här fallet Gold. Följande bild visar utdata från exemplet.
En ellipsgeometri ritad på (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
I följande exempel visas hur du skapar och renderar en RectangleGeometry. Rektangelns position och dimensioner definieras av en Rect struktur. Positionen är 50,50
och både höjd och bredd är 25
, vilket skapar en fyrkant. Följande bild visar utdata från exemplet.
En rektangelgeometri ritad på 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
I följande exempel visas hur du använder en EllipseGeometry som klippområde för en bild. Ett Image objekt definieras med en Width på 200 och en Height på 150. En EllipseGeometry med ett RadiusX värde på 100, ett RadiusY värde på 75 och ett Center värde på 100,75 anges till bildens Clip egenskap. Endast den del av bilden som finns inom ellipsens område visas. Följande bild visar utdata från exemplet.
En EllipseGeometry som används för att klippa ut en bildkontroll
<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
Sökvägsgeometrier
Klassen PathGeometry och dess lätta motsvarighet, klassen StreamGeometry, ger möjlighet att beskriva flera komplexa figurer som består av bågar, kurvor och linjer.
I hjärtat av en PathGeometry är en samling PathFigure objekt, som kallas så därför att varje figur beskriver en diskret form i PathGeometry. Varje PathFigure består av ett eller flera PathSegment objekt, som var och en beskriver ett segment av figuren.
Det finns många typer av segment.
Segmenttyp | Beskrivning | Exempel |
---|---|---|
ArcSegment | Skapar en elliptisk båge mellan två punkter. | Skapa en elliptisk båge. |
BezierSegment | Skapar en kubisk Bezier-kurva mellan två punkter. | Skapa en kubisk bezierkurva. |
LineSegment | Skapar en linje mellan två punkter. | Skapa ett LineSegment i en PathGeometry |
PolyBezierSegment | Skapar en serie kubiska Bezier-kurvor. | Se typsidan PolyBezierSegment. |
PolyLineSegment | Skapar en serie rader. | Se typsidan för PolyLineSegment. |
PolyQuadraticBezierSegment | Skapar en serie kvadratiska Bezier-kurvor. | Se sidan PolyQuadraticBezierSegment. |
QuadraticBezierSegment | Skapar en kvadratisk Bezier-kurva. | Skapa en kvadratisk bezierkurva. |
Segmenten inom en PathFigure kombineras till en enda geometrisk form där slutpunkten för varje segment är startpunkten för nästa segment. Egenskapen StartPoint för en PathFigure anger från vilken punkt det första segmentet ritas. Varje efterföljande segment börjar vid slutpunkten för föregående segment. Du kan till exempel definiera en lodrät linje från 10,50
till 10,150
genom att ange egenskapen StartPoint till 10,50
och skapa en LineSegment med en Point egenskapsinställning för 10,150
.
I följande exempel skapas en enkel PathGeometry som består av en enda PathFigure med en LineSegment och visar den med hjälp av ett Path-element.
PathFigure-objektets StartPoint anges till 10,20
och en LineSegment definieras med slutpunkten 100,130
. Följande bild visar PathGeometry som skapats av det här exemplet.
En PathGeometry som innehåller ett enda LineSegment
<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
Det är värt att jämföra det här exemplet med föregående LineGeometry exempel. Syntaxen som används för en PathGeometry är mycket mer utförlig än den som används för en enkel LineGeometry, och det kan vara mer meningsfullt att använda klassen LineGeometry i det här fallet, men den utförliga syntaxen för PathGeometry möjliggör extremt invecklade och komplexa geometriska regioner.
Mer komplexa geometrier kan skapas med hjälp av en kombination av PathSegment objekt.
I nästa exempel används en BezierSegment, en LineSegmentoch en ArcSegment för att skapa form. Exemplet skapar först en kubisk Bezier-kurva genom att definiera fyra punkter: en startpunkt, som är slutpunkten för föregående segment, en slutpunkt (Point3) och två kontrollpunkter (Point1 och Point2). De två kontrollpunkterna i en kubisk Bezier-kurva beter sig som magneter och lockar delar av vad som annars skulle vara en rak linje mot sig själva och producerar en kurva. Den första kontrollpunkten, Point1, påverkar början av kurvan. den andra kontrollpunkten, Point2, påverkar kurvans slutdel.
Exemplet lägger sedan till en LineSegment, vilken dras mellan slutpunkten för den föregående BezierSegment till den punkt som anges av dess LineSegment-egenskap.
Exemplet lägger sedan till en ArcSegment, som hämtas från slutpunkten för föregående LineSegment till den punkt som anges av egenskapen Point. Exemplet anger också bågens x- och y-radie (Size), en rotationsvinkel (RotationAngle), en flagga som anger hur stor vinkeln för den resulterande bågen ska vara (IsLargeArc), och ett värde som anger i vilken riktning bågen ritas (SweepDirection). Följande bild visar den form som skapats av det här exemplet.
En PathGeometry
<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
Du kan skapa ännu mer komplexa geometrier med hjälp av flera PathFigure objekt i en PathGeometry.
I följande exempel skapas en PathGeometry med två PathFigure objekt, som var och en innehåller flera PathSegment objekt. PathFigure från exemplet ovan och en PathFigure med en PolyLineSegment och en QuadraticBezierSegment används. En PolyLineSegment definieras med en matris med punkter och QuadraticBezierSegment definieras med en kontrollpunkt och en slutpunkt. Följande bild visar den form som skapats av det här exemplet.
En PathGeometry med flera siffror
<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
StreamGeometry
Precis som i klassen PathGeometry definierar en StreamGeometry en komplex geometrisk form som kan innehålla kurvor, bågar och linjer. Till skillnad från en PathGeometrystöder innehållet i en StreamGeometry inte databindning, animering eller ändring. Använd en StreamGeometry när du behöver beskriva en komplex geometri men inte vill ha mer omkostnader för att stödja databindning, animering eller ändring. På grund av dess effektivitet är den StreamGeometry klassen ett bra val för att beskriva utsmyckningar.
Ett exempel finns i Skapa en form med hjälp av en StreamGeometry-.
Sökvägsmarkeringssyntax
Typerna PathGeometry och StreamGeometry stöder en XAML-attributsyntax (Extensible Application Markup Language) med hjälp av en särskild serie flytt- och dragningskommandon. Mer information finns i Path Markup Syntax.
Sammansatta geometrier
Sammansatta geometriobjekt kan skapas med hjälp av en GeometryGroup, en CombinedGeometryeller genom att anropa metoden static GeometryCombine.
CombinedGeometry-objektet och metoden Combine utför en boolesk åtgärd för att kombinera det område som definieras av två geometrier. Geometry objekt som inte har något område tas bort. Endast två Geometry objekt kan kombineras (även om dessa två geometrier också kan vara sammansatta geometrier).
Klassen GeometryGroup skapar en sammanslagning av de Geometry objekt som den innehåller utan att kombinera deras område. Valfritt antal Geometry objekt kan läggas till i en GeometryGroup. Ett exempel finns i Skapa en sammansatt form.
Eftersom de inte utför en kombinationsåtgärd ger användning av GeometryGroup objekt prestandafördelar jämfört med att använda CombinedGeometry objekt eller Combine-metoden.
Kombinerade geometrier
I det föregående avsnittet nämndes att objektet CombinedGeometry och metoden Combine kombinerar det område som definieras av de geometrier som de innehåller. Den GeometryCombineMode uppräkningen anger hur geometrierna kombineras. Möjliga värden för egenskapen GeometryCombineMode är: Union, Intersect, Excludeoch Xor.
I följande exempel definieras en CombinedGeometry med ett kombinationsläge som är Union. Både Geometry1 och Geometry2 definieras som cirklar med samma radie, men med center förskjutna med 50.
<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>
I följande exempel definieras en CombinedGeometry med ett kombinationsläge för Xor. Både Geometry1 och Geometry2 definieras som cirklar med samma radie, men med center förskjutna med 50.
<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>
Ytterligare exempel finns i Skapa en sammansatt form och Skapa en kombinerad geometri.
Freezable-funktioner
Eftersom den ärver från klassen Freezable tillhandahåller klassen Geometry flera specialfunktioner: Geometry objekt kan deklareras som XAML-resurser, delas mellan flera andra objekt, göras skrivskyddade för att förbättra prestanda, klonas och göras trådsäkra. Mer information om de olika funktionerna som tillhandahålls av Freezable-objekt finns i Översikt över frysbara objekt.
Andra funktioner för geometri
Klassen Geometry innehåller också användbara verktygsmetoder, till exempel följande:
FillContains – Avgör om geometrin innehåller en annan Geometry.
StrokeContains – Avgör om strecket för en Geometry innehåller en angiven punkt.
Se klassen Geometry för en fullständig lista över dess metoder.
Se även
.NET Desktop feedback