Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a témakör bemutatja Drawing objektumokat, és ismerteti, hogyan lehet hatékonyan alakzatokat, bitképeket, szöveget és médiatartalmakat rajzolni. ClipArt-elemek létrehozásakor Drawing objektumokat használhat, DrawingBrushfesthet, vagy Visual objektumokat használhat.
Mi az a rajzobjektum?
Egy Drawing objektum a látható tartalmat, például alakzatot, bitképet, videót vagy szövegsort írja le. A különböző típusú rajzok különböző típusú tartalmakat írnak le. Az alábbiakban felsoroljuk a különböző típusú rajzobjektumokat.
GeometryDrawing – Alakzatot rajzol.
ImageDrawing – Kép rajzolása.
GlyphRunDrawing – Szöveg rajzolása.
VideoDrawing – Hang- vagy videofájl lejátszása.
DrawingGroup – Más rajzokat rajzol. Más rajzok egyetlen összetett rajzba való összevonásához használjon rajzcsoportot.
Drawing objektumok sokoldalúak; A Drawing objektumok számos módon használhatók.
Megjelenítheti képként egy DrawingImage és egy Image vezérlőelem használatával.
Egy DrawingBrush-nal festhet egy objektumot, például egy BackgroundPage-et.
Segítségével leírhatja egy DrawingVisualmegjelenését.
Az segítségével felsorolhatja egy Visualtartalmát.
A WPF más típusú objektumokat is biztosít, amelyek alakzatokat, bitképeket, szöveget és médiatartalmakat képesek rajzolni. Használhat például Shape objektumokat alakzatok rajzolásához, és a MediaElement vezérlő egy másik módot kínál a videó alkalmazáshoz való hozzáadására. Mikor érdemes Drawing objektumokat használni? Amikor feláldozhatja a keretrendszerszintű funkciókat a teljesítménybeli előnyök eléréséhez, vagy ha Freezable funkciókra van szüksége. Mivel a Drawing objektumok nem támogatják az elrendezést (), a bemenetet és a fókuszt, teljesítménybeli előnyöket biztosítanak, amelyek ideálissá teszik a hátterek, a clip art ábrák és az alacsony szintű rajzok Visual objektumokkal való leírására.
Mivel Freezable típusú objektumok, az Drawing objektumok számos különleges funkciót kapnak, amelyek közé tartoznak a következők: erőforrásokkéntlehet őket deklarálni, megoszthatók több objektum között, írásvédetté tehetők a teljesítmény javítása érdekében, klónozhatók és szálbiztossá tehetők. Az Freezable objektumok által biztosított különböző funkciókról további információt a Fagyasztható objektumok áttekintésecímű témakörben talál.
Alakzat rajzolása
Alakzat rajzolásához GeometryDrawingkell használnia. A geometriai rajz Geometry tulajdonsága leírja a rajzolni kívánt alakzatot, Brush tulajdonsága leírja, hogyan kell festeni az alakzat belső terét, és Pen tulajdonsága leírja a körvonal rajzolásának módját.
Az alábbi példa egy GeometryDrawing-t használ egy alakzat megrajzolásához. Az alakzatot egy GeometryGroup és két EllipseGeometry objektum írja le. Az alakzat belső terét LinearGradientBrush színnel festik, és körvonalát BlackPenszínnel rajzolják meg.
Ez a példa a következő GeometryDrawing-t hozza létre.
Egy Geometriai Rajz
//
// 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>
A teljes példáért lásd a GeometryDrawing létrehozásarészt.
Más Geometry osztályok, például PathGeometry lehetővé teszik összetettebb alakzatok létrehozását görbék és ívek létrehozásával. Az Geometry objektumokról további információt a Geometria áttekintésecímű témakörben talál.
Az
Kép rajzolása
Kép rajzolásához használjon ImageDrawing. Egy ImageDrawing objektum ImageSource tulajdonsága a rajzolandó képet írja le, Rect tulajdonsága pedig azt a régiót határozza meg, ahol a rendszerképet megrajzolja.
Az alábbi példa egy képet egy (75,75) helyen lévő, 100-szor 100 képpontos téglalapba rajzol. Az alábbi ábrán a példa által létrehozott ImageDrawing látható. A rendszer szürke szegélyt adott hozzá a ImageDrawinghatárainak megjelenítéséhez.
Egy 100 x 100 képrészlet rajz
// 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"/>
További információ a képekről: Képalkotás áttekintése.
Média lejátszása (csak kód)
Megjegyzés:
Bár az XAML-ben (Extensible Application Markup Language, XAML) deklarálhat egy VideoDrawing elemet, annak médiáját csak kóddal töltheti be és játszhatja le. Ha videót szeretne lejátszani XAML-ben (Extensible Application Markup Language), használjon inkább egy MediaElement.
Hang- vagy videofájl lejátszásához egy VideoDrawing és egy MediaPlayerkell használnia. Kétféleképpen tölthet be és játszhat le médiatartalmakat. Az első módszer egy MediaPlayer és egy VideoDrawing használata önmagukban, a második módszer pedig a saját MediaTimeline létrehozása, hogy a MediaPlayer-mal és a VideoDrawing-val együtt használható legyen.
Megjegyzés:
Ha médiatartalmat oszt ki az alkalmazással, nem használhat médiafájlt projekterőforrásként, mint egy képet. A projektfájlban ehelyett a médiatípust Content
kell beállítania, és CopyToOutputDirectory
PreserveNewest
vagy Always
értékre kell állítania.
Média lejátszásához saját MediaTimelinelétrehozása nélkül hajtsa végre az alábbi lépéseket.
Hozzon létre egy MediaPlayer objektumot.
MediaPlayer player = new MediaPlayer();
A médiafájl betöltéséhez használja a Open metódust.
player.Open(new Uri(@"sampleMedia\xbox.wmv", UriKind.Relative));
Hozz létre egy VideoDrawing.
VideoDrawing aVideoDrawing = new VideoDrawing();
A RectVideoDrawing tulajdonságának beállításával adhatja meg a média rajzolásának méretét és pozícióját.
aVideoDrawing.Rect = new Rect(0, 0, 100, 100);
Állítsa be a Player tulajdonságát a VideoDrawing-nél a létrehozott MediaPlayer-vel.
aVideoDrawing.Player = player;
Használja a PlayMediaPlayer metódusát a média lejátszásához.
// Play the video once. player.Play();
Az alábbi példa egy VideoDrawing és egy MediaPlayer használ egy videofájl egyszeri lejátszásához.
//
// 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();
A médiatartalmak további időzítési vezérlésének megszerzéséhez használjon egy MediaTimeline-t a MediaPlayer és VideoDrawing objektumokkal. A MediaTimeline lehetővé teszi annak megadását, hogy a videó ismétlődjön-e. A MediaTimeline használatához VideoDrawing-el hajtsa végre a következő lépéseket:
Deklarálja a MediaTimeline-t, és állítsa be az időzítési viselkedését.
// Create a MediaTimeline. MediaTimeline mTimeline = new MediaTimeline(new Uri(@"sampleMedia\xbox.wmv", UriKind.Relative)); // Set the timeline to repeat. mTimeline.RepeatBehavior = RepeatBehavior.Forever;
Hozzon létre egy MediaClock a MediaTimeline-ből.
// Create a clock from the MediaTimeline. MediaClock mClock = mTimeline.CreateClock();
Hozzon létre egy MediaPlayer, és használja a MediaClock a Clock tulajdonság beállításához.
MediaPlayer repeatingVideoDrawingPlayer = new MediaPlayer(); repeatingVideoDrawingPlayer.Clock = mClock;
Hozzon létre egy VideoDrawing, és rendelje hozzá a MediaPlayer a PlayerVideoDrawing tulajdonságához.
VideoDrawing repeatingVideoDrawing = new VideoDrawing(); repeatingVideoDrawing.Rect = new Rect(150, 0, 100, 100); repeatingVideoDrawing.Player = repeatingVideoDrawingPlayer;
Az alábbi példa használ egy MediaTimeline-t egy MediaPlayer-gyel és egy VideoDrawing-vel a videó ismételt lejátszására.
//
// 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;
Vegye figyelembe, hogy amikor MediaTimeline-t használ, a médialejátszás szabályozására a ClockControllerController tulajdonságából visszaadott interaktív MediaClock-et használja, az MediaPlayerinteraktív módszerei helyett.
Szöveg rajzolása
A szöveg rajzolásához egy GlyphRunDrawing és egy GlyphRunkell használnia. Az alábbi példa egy GlyphRunDrawing-t használva a "Hello World" szöveget rajzolja meg.
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 egy alacsony szintű objektum, amely rögzített formátumú dokumentumbemutatókhoz és nyomtatási forgatókönyvekhez használható. A szöveg képernyőre rajzolásának egyszerűbb módja egy Label vagy egy TextBlockhasználata. A GlyphRun-ról további információt a "A GlyphRun objektum és a Glyphs elem bemutatása" áttekintésében talál.
Összetett rajzok
A DrawingGroup lehetővé teszi, hogy több rajzot egyetlen összetett rajzba egyesítsen. Egy DrawingGrouphasználatával alakzatokat, képeket és szöveget egyesíthet egyetlen Drawing objektumba.
Az alábbi példa egy DrawingGroup használ két GeometryDrawing objektum és egy ImageDrawing objektum kombinálásához. Ez a példa a következő kimenetet hozza létre.
Összetett rajz
//
// 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>
A DrawingGroup emellett átlátszatlansági maszkokat, átalakításokat, bitképeffektusokat és egyéb műveleteket is alkalmazhat a tartalmára. DrawingGroup műveletek alkalmazása a következő sorrendben történik: OpacityMask, Opacity, BitmapEffect, ClipGeometry, GuidelineSet, majd Transform.
Az alábbi ábrán a DrawingGroup műveletek alkalmazásának sorrendje látható.
A DrawingGroup-műveletek sorrendje
Az alábbi táblázat a DrawingGroup objektum tartalmának módosítására használható tulajdonságokat ismerteti.
Ingatlan | Leírás | Illusztráció |
---|---|---|
OpacityMask | Módosítja a DrawingGroup tartalmának kijelölt részeinek átlátszóságát. Például lásd: Hogyan szabályozzuk egy rajzátlátszatlanságát. |
![]() |
Opacity | Egységesen módosítja a DrawingGroup tartalmának átlátszóságát. Ezzel a tulajdonságot használva Drawing áttetszővé vagy részben áttetszővé teheti. Például, lásd: Hogyan lehet egy opacitásmaszkot alkalmazni egy rajzra. |
![]() |
BitmapEffect | Érvényesíti a BitmapEffect-át a DrawingGroup tartalmára. Példáért tekintse meg: Hogyan alkalmazzunk egy BitmapEffectet egy rajzra. |
![]() |
ClipGeometry | A DrawingGroup tartalmát egy Geometryhasználatával leírt régióba kapcsosozza. Példaként lásd: Hogyan: Kivágni egy rajzot. |
![]() |
GuidelineSet | Eszközfüggetlen képpontokat illeszt az eszköz képpontjaihoz a megadott irányelvek mentén. Ez a tulajdonság hasznos annak biztosításához, hogy a részletes ábrák élesen jelenjenek meg alacsony DPI-kijelzőkön. Példaként: irányelvegyüttes alkalmazása egy rajzra. |
![]() |
Transform | Átalakítja a DrawingGroup tartalmát. Példát lásd: Útmutató: Hogyan alkalmazzunk átalakítást egy rajzon. |
![]() |
Rajz megjelenítése képként
A Drawing megjelenítéséhez egy Image vezérlőelemmel, használjon egy DrawingImage-t a Image vezérlőelem Source-ként, és állítsa be a DrawingImage objektum DrawingImage.Drawing tulajdonságát a megjeleníteni kívánt rajzra.
Az alábbi példa egy DrawingImage és egy Image vezérlőelemet használ egy GeometryDrawingmegjelenítéséhez. Ez a példa a következő kimenetet hozza létre.
A Rajzkép
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>
Objektum festése rajztal
A DrawingBrush olyan ecsettípus, amely rajzobjektummal fest egy területet. A rajzokkal bármilyen grafikus objektumot festhet. Drawing tulajdonsága a DrawingBrush leírja a Drawing. Ha egy DrawingDrawingBrushszeretne megjeleníteni, adja hozzá az ecsethez az ecset Drawing tulajdonságával, és az ecsettel festsen grafikus objektumot, például vezérlőt vagy panelt.
Az alábbi példa egy DrawingBrusháltal létrehozott mintával festi ki a FillRectangle-ját egy GeometryDrawing segítségével. Ez a példa a következő kimenetet hozza létre.
A GeometryDrawing, amelyet egy DrawingBrush-al használnak
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>
A DrawingBrush osztály számos lehetőséget kínál a tartalom nyújtására és burkolására. A DrawingBrushtémakörrel kapcsolatos további információkért tekintse meg a Képek, rajzok és vizualizációk áttekintését.
Rajz megjelenítése vizualizációval
A DrawingVisual egy rajz renderelésére tervezett vizuális objektumtípus. A vizualizációs rétegen való közvetlen munka olyan fejlesztők számára ajánlott, akik magas szintű, testre szabott grafikus környezetet szeretnének létrehozni, és ezt az áttekintés nem ismerteti. További információ: A DrawingVisual Objects használata áttekintése.
Rajzkontext objektumok
A DrawingContext osztály lehetővé teszi egy Visual vagy egy Drawing vizualizációs tartalommal való feltöltését. Sok ilyen alacsonyabb szintű grafikus objektum DrawingContext használ, mert nagyon hatékonyan írja le a grafikus tartalmakat.
Bár a DrawingContext rajzolási metódusok a System.Drawing.Graphics típus rajzmetszeteihez hasonlóan jelennek meg, valójában nagyon eltérőek. DrawingContext egy megtartott módú grafikus rendszerhez használatos, míg a System.Drawing.Graphics típus az azonnali módú grafikus rendszerhez. Amikor egy DrawingContext objektum rajzparancsait használja, valójában renderelési utasítások készletét tárolja (bár a pontos tárolási mechanizmus attól függ, hogy milyen típusú objektumot biztosít a DrawingContext) amelyet később a grafikus rendszer fog használni; nem valós időben rajzol a képernyőre. A Windows Presentation Foundation (WPF) grafikus rendszer működésével kapcsolatos további információkért lásd a WPF grafikus megjelenítési áttekintését.
Soha ne példányosíts közvetlenül DrawingContext; azonban bizonyos metódusokból, például DrawingGroup.Open és DrawingVisual.RenderOpenis beszerezhet egy rajzkörnyezetet.
Vizualizáció tartalmának számbavétele
Az egyéb felhasználási módokon kívül Drawing objektumok objektummodellt is biztosítanak a Visualtartalmának számbavételéhez.
Az alábbi példa a GetDrawing metódust használja egy DrawingGroupVisual értékének lekéréséhez és számbavételéhez.
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.
}
}
}
Lásd még
.NET Desktop feedback