Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Det här avsnittet introducerar Drawing objekt och beskriver hur du använder dem för att effektivt rita former, bitmappar, text och media. Använd Drawing objekt när du skapar clip art, målar med DrawingBrush eller använder Visual objekt.
Vad är ett ritobjekt
Ett Drawing-objekt beskriver synligt innehåll, till exempel en form, bitmapp, video eller en textrad. Olika typer av ritningar beskriver olika typer av innehåll. Följande är en lista över de olika typerna av ritade objekt.
GeometryDrawing – Ritar en form.
ImageDrawing – Ritar en bild.
GlyphRunDrawing – Skriver text.
VideoDrawing – Spelar upp en ljud- eller videofil.
DrawingGroup – Ritar andra ritningar. Använd en ritningsgrupp för att kombinera andra ritningar till en enda sammansatt ritning.
Drawing objekt är mångsidiga; Det finns många sätt att använda ett Drawing objekt.
Du kan visa den som en bild med hjälp av en DrawingImage och en Image kontroll.
Du kan använda det med en DrawingBrush för att måla ett objekt, till exempel Background för en Page.
Du kan använda den för att beskriva utseendet på en DrawingVisual.
Du kan använda den för att räkna upp innehållet i en Visual.
WPF innehåller andra typer av objekt som kan rita former, bitmappar, text och media. Du kan till exempel också använda Shape objekt för att rita former, och kontrollen MediaElement ger ett annat sätt att lägga till video i ditt program. Så när ska du använda Drawing objekt? När du kan offra funktioner på ramverksnivå för att få prestandafördelar eller när du behöver Freezable funktioner. Eftersom Drawing objekt saknar stöd för layout, indata och fokus ger de prestandafördelar som gör dem idealiska för att beskriva bakgrunder, ClipArt och för ritning på låg nivå med Visual objekt.
Eftersom de är ett typobjekt FreezableDrawing får objekt flera specialfunktioner, bland annat följande: 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.
Rita en figur
Om du vill rita en form använder du en GeometryDrawing. En geometriritnings Geometry egenskap beskriver formen att rita, dess Brush egenskap beskriver hur formens inre ska målas och dess Pen egenskap beskriver hur dess kontur ska ritas.
I följande exempel används en GeometryDrawing för att rita en form. Formen beskrivs av ett GeometryGroup och två EllipseGeometry objekt. Formens inre är målat med färgen LinearGradientBrush och dess kontur är ritad med färgen BlackPen.
I det här exemplet skapas följande GeometryDrawing.
En geometriritning
//
// Create the Geometry to draw.
//
GeometryGroup ellipses = new GeometryGroup();
ellipses.Children.Add(
new EllipseGeometry(new Point(50,50), 45, 20)
);
ellipses.Children.Add(
new EllipseGeometry(new Point(50, 50), 20, 45)
);
//
// Create a GeometryDrawing.
//
GeometryDrawing aGeometryDrawing = new GeometryDrawing();
aGeometryDrawing.Geometry = ellipses;
// Paint the drawing with a gradient.
aGeometryDrawing.Brush =
new LinearGradientBrush(
Colors.Blue,
Color.FromRgb(204,204,255),
new Point(0,0),
new Point(1,1));
// Outline the drawing with a solid color.
aGeometryDrawing.Pen = new Pen(Brushes.Black, 10);
<GeometryDrawing>
<GeometryDrawing.Geometry>
<!-- Create a composite shape. -->
<GeometryGroup>
<EllipseGeometry Center="50,50" RadiusX="45" RadiusY="20" />
<EllipseGeometry Center="50,50" RadiusX="20" RadiusY="45" />
</GeometryGroup>
</GeometryDrawing.Geometry>
<GeometryDrawing.Brush>
<!-- Paint the drawing with a gradient. -->
<LinearGradientBrush>
<GradientStop Offset="0.0" Color="Blue" />
<GradientStop Offset="1.0" Color="#CCCCFF" />
</LinearGradientBrush>
</GeometryDrawing.Brush>
<GeometryDrawing.Pen>
<!-- Outline the drawing with a solid color. -->
<Pen Thickness="10" Brush="Black" />
</GeometryDrawing.Pen>
</GeometryDrawing>
Det fullständiga exemplet finns i Skapa en GeometriRitning.
Andra Geometry klasser, till exempel PathGeometry gör att du kan skapa mer komplexa former genom att skapa kurvor och bågar. Mer information om Geometry objekt finns i översikten över geometri.
Mer information om andra sätt att rita former som inte använder Drawing objekt finns i Former och grundläggande ritning i WPF-översikt.
Rita en bild
Om du vill rita en bild använder du en ImageDrawing. Ett ImageDrawing objekts ImageSource egenskap beskriver bilden som ska ritas och dess Rect egenskap definierar den region där bilden ritas.
I följande exempel ritas en bild till en rektangel på (75,75) som är 100 x 100 bildpunkter. Följande bild visar den ImageDrawing som skapats av exemplet. En grå kantlinje lades till för att visa gränserna för ImageDrawing.
En bildritning i storleken 100x100
// Create a 100 by 100 image with an upper-left point of (75,75).
ImageDrawing bigKiwi = new ImageDrawing();
bigKiwi.Rect = new Rect(75, 75, 100, 100);
bigKiwi.ImageSource = new BitmapImage(
new Uri(@"sampleImages\kiwi.png", UriKind.Relative));
<!-- The Rect property specifies that the image only fill a 100 by 100
rectangular area. -->
<ImageDrawing Rect="75,75,100,100" ImageSource="sampleImages\kiwi.png"/>
Mer information om bilder finns i Översikt över avbildningar.
Spela upp media (endast kod)
Anmärkning
Även om du kan deklarera ett VideoDrawing i XAML (Extensible Application Markup Language) kan du bara läsa in och spela upp dess media med hjälp av kod. Om du vill spela upp video i XAML (Extensible Application Markup Language) använder du en MediaElement i stället.
Om du vill spela upp en ljud- eller videofil använder du en VideoDrawing och en MediaPlayer. Det finns två sätt att läsa in och spela upp media. Det första är att använda en MediaPlayer och en VideoDrawing på egen hand, och det andra sättet är att skapa egna MediaTimeline att använda med MediaPlayer och VideoDrawing.
Anmärkning
När du distribuerar media med ditt program kan du inte använda en mediefil som en projektresurs, som en bild. I projektfilen måste du i stället ange medietypen till Content
och ange CopyToOutputDirectory
till PreserveNewest
eller Always
.
Om du vill spela upp media utan att skapa egna MediaTimelineutför du följande steg.
Skapa ett MediaPlayer objekt.
MediaPlayer player = new MediaPlayer();
Använd Open-metoden för att läsa in mediefilen.
player.Open(new Uri(@"sampleMedia\xbox.wmv", UriKind.Relative));
Skapa en VideoDrawing.
VideoDrawing aVideoDrawing = new VideoDrawing();
Ange storlek och plats för att rita mediet genom att ange Rect egenskapen för VideoDrawing.
aVideoDrawing.Rect = new Rect(0, 0, 100, 100);
Player Ange egenskapen för VideoDrawing med den MediaPlayer som du skapade.
aVideoDrawing.Player = player;
Använd Play-metoden av MediaPlayer för att börja spela upp mediet.
// Play the video once. player.Play();
I följande exempel används en VideoDrawing och en MediaPlayer för att spela upp en videofil en gång.
//
// Create a VideoDrawing.
//
MediaPlayer player = new MediaPlayer();
player.Open(new Uri(@"sampleMedia\xbox.wmv", UriKind.Relative));
VideoDrawing aVideoDrawing = new VideoDrawing();
aVideoDrawing.Rect = new Rect(0, 0, 100, 100);
aVideoDrawing.Player = player;
// Play the video once.
player.Play();
Använd en MediaTimeline med objekten MediaPlayer och VideoDrawing för att få ytterligare tidskontroll över mediet. Med MediaTimeline kan du ange om videon ska upprepas. Om du vill använda en MediaTimeline tillsammans med en VideoDrawing utför du följande steg:
Deklarera MediaTimeline och ange dess tidsbeteenden.
// Create a MediaTimeline. MediaTimeline mTimeline = new MediaTimeline(new Uri(@"sampleMedia\xbox.wmv", UriKind.Relative)); // Set the timeline to repeat. mTimeline.RepeatBehavior = RepeatBehavior.Forever;
Skapa en MediaClock från MediaTimeline.
// Create a clock from the MediaTimeline. MediaClock mClock = mTimeline.CreateClock();
Skapa en MediaPlayer och använd MediaClock för att ange dess Clock-egenskap.
MediaPlayer repeatingVideoDrawingPlayer = new MediaPlayer(); repeatingVideoDrawingPlayer.Clock = mClock;
Skapa en VideoDrawing och tilldela MediaPlayer till Player-egenskapen hos VideoDrawing.
VideoDrawing repeatingVideoDrawing = new VideoDrawing(); repeatingVideoDrawing.Rect = new Rect(150, 0, 100, 100); repeatingVideoDrawing.Player = repeatingVideoDrawingPlayer;
I följande exempel används en MediaTimeline med en MediaPlayer och en VideoDrawing för att spela upp en video upprepade gånger.
//
// Create a VideoDrawing that repeats.
//
// Create a MediaTimeline.
MediaTimeline mTimeline =
new MediaTimeline(new Uri(@"sampleMedia\xbox.wmv", UriKind.Relative));
// Set the timeline to repeat.
mTimeline.RepeatBehavior = RepeatBehavior.Forever;
// Create a clock from the MediaTimeline.
MediaClock mClock = mTimeline.CreateClock();
MediaPlayer repeatingVideoDrawingPlayer = new MediaPlayer();
repeatingVideoDrawingPlayer.Clock = mClock;
VideoDrawing repeatingVideoDrawing = new VideoDrawing();
repeatingVideoDrawing.Rect = new Rect(150, 0, 100, 100);
repeatingVideoDrawing.Player = repeatingVideoDrawingPlayer;
Observera att när du använder en MediaTimelineanvänder du den interaktiva ClockController som returneras från egenskapen Controller för MediaClock för att styra medieuppspelningen i stället för de interaktiva metoderna för MediaPlayer.
Rita texten
Om du vill rita text använder du en GlyphRunDrawing och en GlyphRun. I följande exempel används en GlyphRunDrawing för att rita texten "Hello World".
GlyphRun theGlyphRun = new GlyphRun(
new GlyphTypeface(new Uri(@"C:\WINDOWS\Fonts\TIMES.TTF")),
0,
false,
13.333333333333334,
new ushort[]{43, 72, 79, 79, 82, 3, 58, 82, 85, 79, 71},
new Point(0, 12.29),
new double[]{
9.62666666666667, 7.41333333333333, 2.96,
2.96, 7.41333333333333, 3.70666666666667,
12.5866666666667, 7.41333333333333,
4.44, 2.96, 7.41333333333333},
null,
null,
null,
null,
null,
null
);
GlyphRunDrawing gDrawing = new GlyphRunDrawing(Brushes.Black, theGlyphRun);
<GlyphRunDrawing ForegroundBrush="Black">
<GlyphRunDrawing.GlyphRun>
<GlyphRun
CaretStops="{x:Null}"
ClusterMap="{x:Null}"
IsSideways="False"
GlyphOffsets="{x:Null}"
GlyphIndices="43 72 79 79 82 3 58 82 85 79 71"
BaselineOrigin="0,12.29"
FontRenderingEmSize="13.333333333333334"
DeviceFontName="{x:Null}"
AdvanceWidths="9.62666666666667 7.41333333333333 2.96 2.96 7.41333333333333 3.70666666666667 12.5866666666667 7.41333333333333 4.44 2.96 7.41333333333333"
BidiLevel="0">
<GlyphRun.GlyphTypeface>
<GlyphTypeface FontUri="C:\WINDOWS\Fonts\TIMES.TTF" />
</GlyphRun.GlyphTypeface>
</GlyphRun>
</GlyphRunDrawing.GlyphRun>
</GlyphRunDrawing>
A GlyphRun är ett objekt på låg nivå som är avsett att användas med scenarier med dokumentpresentation och utskrift i fast format. Ett enklare sätt att rita text på skärmen är att använda en Label eller en TextBlock. Mer information om GlyphRunfinns i översikten Introduktion till GlyphRun-objektet och Glyphs-elementet .
Sammansatta ritningar
Med A DrawingGroup kan du kombinera flera ritningar till en enda sammansatt ritning. Med hjälp av kan DrawingGroupdu kombinera former, bilder och text till ett enda Drawing objekt.
I följande exempel används en DrawingGroup för att kombinera två GeometryDrawing objekt och ett ImageDrawing objekt. Det här exemplet genererar följande utdata.
En sammansatt ritning
//
// Create three drawings.
//
GeometryDrawing ellipseDrawing =
new GeometryDrawing(
new SolidColorBrush(Color.FromArgb(102, 181, 243, 20)),
new Pen(Brushes.Black, 4),
new EllipseGeometry(new Point(50,50), 50, 50)
);
ImageDrawing kiwiPictureDrawing =
new ImageDrawing(
new BitmapImage(new Uri(@"sampleImages\kiwi.png", UriKind.Relative)),
new Rect(50,50,100,100));
GeometryDrawing ellipseDrawing2 =
new GeometryDrawing(
new SolidColorBrush(Color.FromArgb(102,181,243,20)),
new Pen(Brushes.Black, 4),
new EllipseGeometry(new Point(150, 150), 50, 50)
);
// Create a DrawingGroup to contain the drawings.
DrawingGroup aDrawingGroup = new DrawingGroup();
aDrawingGroup.Children.Add(ellipseDrawing);
aDrawingGroup.Children.Add(kiwiPictureDrawing);
aDrawingGroup.Children.Add(ellipseDrawing2);
<DrawingGroup>
<GeometryDrawing Brush="#66B5F314">
<GeometryDrawing.Geometry>
<EllipseGeometry Center="50,50" RadiusX="50" RadiusY="50"/>
</GeometryDrawing.Geometry>
<GeometryDrawing.Pen>
<Pen Brush="Black" Thickness="4" />
</GeometryDrawing.Pen>
</GeometryDrawing>
<ImageDrawing ImageSource="sampleImages\kiwi.png" Rect="50,50,100,100"/>
<GeometryDrawing Brush="#66B5F314">
<GeometryDrawing.Geometry>
<EllipseGeometry Center="150,150" RadiusX="50" RadiusY="50"/>
</GeometryDrawing.Geometry>
<GeometryDrawing.Pen>
<Pen Brush="Black" Thickness="4" />
</GeometryDrawing.Pen>
</GeometryDrawing>
</DrawingGroup>
Med A DrawingGroup kan du också använda ogenomskinlighetsmasker, transformeringar, bitmappseffekter och andra åtgärder för dess innehåll. DrawingGroup åtgärder tillämpas i följande ordning: OpacityMask, Opacity, BitmapEffect, ClipGeometry, GuidelineSetoch sedan Transform.
Följande bild visar i vilken DrawingGroup ordning åtgärderna tillämpas.
Ordningen på DrawingGroup-åtgärder
I följande tabell beskrivs de egenskaper som du kan använda för att ändra ett DrawingGroup objekts innehåll.
Fastighet | Beskrivning | Illustration |
---|---|---|
OpacityMask | Ändrar opaciteten för valda delar av DrawingGroup innehållet. Ett exempel finns i How to: Control the Opacity of a Drawing (Så här gör du: Kontrollera opaciteten för en ritning). |
![]() |
Opacity | Ändrar DrawingGroup innehållets opacitet uniformt. Använd den här egenskapen för att göra en Drawing transparent eller delvis transparent. Ett exempel finns i How to: Apply an Opacity Mask to a Drawing (Använda en opacitetsmask på en ritning). |
![]() |
BitmapEffect | Applicerar ett BitmapEffect på DrawingGroup-innehållet. Ett exempel finns i How to: Apply a BitmapEffect to a Drawing (Använda en BitmapEffect på en ritning). |
![]() |
ClipGeometry | Klipper innehållet DrawingGroup till en region som du beskriver med hjälp av en Geometry. Ett exempel finns i How to: Clip a Drawing (Klipp ut en ritning ). |
![]() |
GuidelineSet | Fäster enhetsoberoende bildpunkter på enhetspixlar längs de angivna riktlinjerna. Den här egenskapen är användbar för att säkerställa att detaljerad grafik återges skarpt på låg-DPI-skärmar. Ett exempel finns i Tillämpa en riktlinjeuppsättning på en ritning. |
![]() |
Transform | Transformerar DrawingGroup-innehållet. Ett exempel finns i Så här: Tillämpa en transformering på en ritning. |
![]() |
Visa en ritning som en bild
Om du vill visa en Drawing med en Image-kontroll använder du en DrawingImage som Image-kontrollens Source och ställer in DrawingImage-objektets DrawingImage.Drawing-egenskap till den ritning som du vill visa.
I följande exempel används en DrawingImage och en Image-kontroll för att visa en GeometryDrawing. Det här exemplet genererar följande utdata.
En ritningsbild
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
namespace SDKSample
{
public class DrawingImageExample : Page
{
public DrawingImageExample()
{
//
// Create the Geometry to draw.
//
GeometryGroup ellipses = new GeometryGroup();
ellipses.Children.Add(
new EllipseGeometry(new Point(50,50), 45, 20)
);
ellipses.Children.Add(
new EllipseGeometry(new Point(50, 50), 20, 45)
);
//
// Create a GeometryDrawing.
//
GeometryDrawing aGeometryDrawing = new GeometryDrawing();
aGeometryDrawing.Geometry = ellipses;
// Paint the drawing with a gradient.
aGeometryDrawing.Brush =
new LinearGradientBrush(
Colors.Blue,
Color.FromRgb(204,204,255),
new Point(0,0),
new Point(1,1));
// Outline the drawing with a solid color.
aGeometryDrawing.Pen = new Pen(Brushes.Black, 10);
//
// Use a DrawingImage and an Image control
// to display the drawing.
//
DrawingImage geometryImage = new DrawingImage(aGeometryDrawing);
// Freeze the DrawingImage for performance benefits.
geometryImage.Freeze();
Image anImage = new Image();
anImage.Source = geometryImage;
anImage.HorizontalAlignment = HorizontalAlignment.Left;
//
// Place the image inside a border and
// add it to the page.
//
Border exampleBorder = new Border();
exampleBorder.Child = anImage;
exampleBorder.BorderBrush = Brushes.Gray;
exampleBorder.BorderThickness = new Thickness(1);
exampleBorder.HorizontalAlignment = HorizontalAlignment.Left;
exampleBorder.VerticalAlignment = VerticalAlignment.Top;
exampleBorder.Margin = new Thickness(10);
this.Margin = new Thickness(20);
this.Background = Brushes.White;
this.Content = exampleBorder;
}
}
}
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:PresentationOptions="http://schemas.microsoft.com/winfx/2006/xaml/presentation/options"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="PresentationOptions"
Background="White" Margin="20">
<Border BorderBrush="Gray" BorderThickness="1"
HorizontalAlignment="Left" VerticalAlignment="Top"
Margin="10">
<!-- This image uses a Drawing object for its source. -->
<Image>
<Image.Source>
<DrawingImage PresentationOptions:Freeze="True">
<DrawingImage.Drawing>
<GeometryDrawing>
<GeometryDrawing.Geometry>
<GeometryGroup>
<EllipseGeometry Center="50,50" RadiusX="45" RadiusY="20" />
<EllipseGeometry Center="50,50" RadiusX="20" RadiusY="45" />
</GeometryGroup>
</GeometryDrawing.Geometry>
<GeometryDrawing.Brush>
<LinearGradientBrush>
<GradientStop Offset="0.0" Color="Blue" />
<GradientStop Offset="1.0" Color="#CCCCFF" />
</LinearGradientBrush>
</GeometryDrawing.Brush>
<GeometryDrawing.Pen>
<Pen Thickness="10" Brush="Black" />
</GeometryDrawing.Pen>
</GeometryDrawing>
</DrawingImage.Drawing>
</DrawingImage>
</Image.Source>
</Image>
</Border>
</Page>
Måla ett objekt med en ritning
A DrawingBrush är en typ av pensel som målar ett område med ett ritobjekt. Du kan använda den för att måla nästan alla grafiska objekt med en ritning. Egenskapen Drawing för en DrawingBrush beskriver dess Drawing. Om du vill rendera en Drawing med en DrawingBrushlägger du till den i penseln med hjälp av penselns Drawing egenskap och använder penseln för att måla ett grafiskt objekt, till exempel en kontroll eller panel.
I följande exempel används en DrawingBrush för att måla Fill på en Rectangle med ett mönster som skapats från en GeometryDrawing. Det här exemplet genererar följande utdata.
En GeometryDrawing som används med en DrawingBrush
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
namespace SDKSample
{
public class DrawingBrushExample : Page
{
public DrawingBrushExample()
{
//
// Create the Geometry to draw.
//
GeometryGroup ellipses = new GeometryGroup();
ellipses.Children.Add(
new EllipseGeometry(new Point(50,50), 45, 20)
);
ellipses.Children.Add(
new EllipseGeometry(new Point(50, 50), 20, 45)
);
//
// Create a GeometryDrawing.
//
GeometryDrawing aGeometryDrawing = new GeometryDrawing();
aGeometryDrawing.Geometry = ellipses;
// Paint the drawing with a gradient.
aGeometryDrawing.Brush =
new LinearGradientBrush(
Colors.Blue,
Color.FromRgb(204,204,255),
new Point(0,0),
new Point(1,1));
// Outline the drawing with a solid color.
aGeometryDrawing.Pen = new Pen(Brushes.Black, 10);
DrawingBrush patternBrush = new DrawingBrush(aGeometryDrawing);
patternBrush.Viewport = new Rect(0, 0, 0.25, 0.25);
patternBrush.TileMode = TileMode.Tile;
patternBrush.Freeze();
//
// Create an object to paint.
//
Rectangle paintedRectangle = new Rectangle();
paintedRectangle.Width = 100;
paintedRectangle.Height = 100;
paintedRectangle.Fill = patternBrush;
//
// Place the image inside a border and
// add it to the page.
//
Border exampleBorder = new Border();
exampleBorder.Child = paintedRectangle;
exampleBorder.BorderBrush = Brushes.Gray;
exampleBorder.BorderThickness = new Thickness(1);
exampleBorder.HorizontalAlignment = HorizontalAlignment.Left;
exampleBorder.VerticalAlignment = VerticalAlignment.Top;
exampleBorder.Margin = new Thickness(10);
this.Margin = new Thickness(20);
this.Background = Brushes.White;
this.Content = exampleBorder;
}
}
}
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:PresentationOptions="http://schemas.microsoft.com/winfx/2006/xaml/presentation/options"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="PresentationOptions"
Margin="20" Background="White">
<Border BorderBrush="Gray" BorderThickness="1"
HorizontalAlignment="Left" VerticalAlignment="Top"
Margin="10">
<Rectangle Width="100" Height="100">
<Rectangle.Fill>
<DrawingBrush PresentationOptions:Freeze="True"
Viewport="0,0,0.25,0.25" TileMode="Tile">
<DrawingBrush.Drawing>
<GeometryDrawing>
<GeometryDrawing.Geometry>
<GeometryGroup>
<EllipseGeometry Center="50,50" RadiusX="45" RadiusY="20" />
<EllipseGeometry Center="50,50" RadiusX="20" RadiusY="45" />
</GeometryGroup>
</GeometryDrawing.Geometry>
<GeometryDrawing.Brush>
<LinearGradientBrush>
<GradientStop Offset="0.0" Color="Blue" />
<GradientStop Offset="1.0" Color="#CCCCFF" />
</LinearGradientBrush>
</GeometryDrawing.Brush>
<GeometryDrawing.Pen>
<Pen Thickness="10" Brush="Black" />
</GeometryDrawing.Pen>
</GeometryDrawing>
</DrawingBrush.Drawing>
</DrawingBrush>
</Rectangle.Fill>
</Rectangle>
</Border>
</Page>
Klassen DrawingBrush erbjuder en mängd olika alternativ för att sträcka ut och kakla dess innehåll. Mer information om DrawingBrushfinns i översikten Målning med bilder, ritningar och visuella objekt .
Rendera en ritning med en visualisering
A DrawingVisual är en typ av visuellt objekt som utformats för att återge en ritning. Att arbeta direkt på det visuella lagret är ett alternativ för utvecklare som vill skapa en mycket anpassad grafisk miljö och som inte beskrivs i den här översikten. Mer information finns i översikten Använda DrawingVisual Objects .
DrawingContext-objekt
Med DrawingContext klassen kan du fylla i en Visual eller en Drawing med visuellt innehåll. Många sådana grafikobjekt på lägre nivå använder ett DrawingContext eftersom det beskriver grafiskt innehåll mycket effektivt.
Även om dragningsmetoderna DrawingContext ser ut ungefär som dragningsmetoderna av typen System.Drawing.Graphics , är de faktiskt mycket olika. DrawingContext används med ett bevarat lägesgrafiksystem, medan typen System.Drawing.Graphics används med ett omedelbart lägesgrafiksystem. När du använder ett DrawingContext objekts ritningskommandon lagrar du faktiskt en uppsättning återgivningsinstruktioner (även om den exakta lagringsmekanismen beror på vilken typ av objekt som tillhandahåller DrawingContext) som senare kommer att användas av grafiksystemet. Du ritar inte till skärmen i realtid. Mer information om hur wpf-grafiksystemet (Windows Presentation Foundation) fungerar finns i översikten över WPF-grafikrendering.
Du instansierar aldrig direkt en DrawingContext; Du kan dock hämta en ritningskontext från vissa metoder, till exempel DrawingGroup.Open och DrawingVisual.RenderOpen.
Räkna upp innehållet i ett visuellt objekt
Förutom andra användningsområden tillhandahåller Drawing objekt också en objektmodell för att räkna upp innehållet i en Visual.
I följande exempel används metoden GetDrawing för att hämta DrawingGroup värdet för en Visual och räkna upp den.
public void RetrieveDrawing(Visual v)
{
DrawingGroup drawingGroup = VisualTreeHelper.GetDrawing(v);
EnumDrawingGroup(drawingGroup);
}
// Enumerate the drawings in the DrawingGroup.
public void EnumDrawingGroup(DrawingGroup drawingGroup)
{
DrawingCollection dc = drawingGroup.Children;
// Enumerate the drawings in the DrawingCollection.
foreach (Drawing drawing in dc)
{
// If the drawing is a DrawingGroup, call the function recursively.
if (drawing is DrawingGroup group)
{
EnumDrawingGroup(group);
}
else if (drawing is GeometryDrawing)
{
// Perform action based on drawing type.
}
else if (drawing is ImageDrawing)
{
// Perform action based on drawing type.
}
else if (drawing is GlyphRunDrawing)
{
// Perform action based on drawing type.
}
else if (drawing is VideoDrawing)
{
// Perform action based on drawing type.
}
}
}
Se även
.NET Desktop feedback