Çizim Nesnelerine Genel Bakış

Bu konu başlığında nesneleri tanıtıyor ve şekilleri, bit eşlemleri, metinleri ve medyayı verimli bir şekilde Drawing çizmek için bunları nasıl kullanabileceğiniz açıklanmıştır. Küçük Drawing resim ürken nesneleri kullanın, ile boyayın DrawingBrush veya nesneleri Visual kullanın.

Çizim Nesnesi Nedir?

Nesne, şekil, bit eşlem, video veya metin satırı Drawing gibi görünür içeriği açıklar. Farklı çizim türleri, farklı içerik türlerini açıklar. Aşağıda, farklı çizim nesneleri türlerinin bir listesi ve ardından yer alan liste ve bir liste yer alıyor.

Drawing nesneleri çok yönlüdür; bir nesneyi kullanabileceğiniz birçok yol Drawing vardır.

  • Ve denetimi kullanarak bunu görüntü olarak DrawingImageImage görüntüebilirsiniz.

  • bir nesnesini boyamak DrawingBrush için ile birlikte kullanabilirsiniz, örneğin , bir BackgroundPage .

  • Bir görünümünü açıklamak için bunu DrawingVisual kullanabilirsiniz.

  • Bunu kullanarak bir içeriğini numaralara Visual abilirsiniz.

WPF şekil, bit eşlem, metin ve medya çizebilecek diğer nesne türlerini sağlar. Örneğin, şekiller çizmek için Shape nesneleri de kullanabilirsiniz ve MediaElement denetim, uygulamanıza video eklemek için başka bir yol sağlar. Peki nesneleri ne zaman Drawing kullanasınız? Performans avantajları elde etmek için çerçeve düzeyindeki özelliklerden faydalanma veya özelliklere ihtiyacınız Freezable olduğunda. Nesneler Düzen, giriş ve odak desteğine sahip olmadığı için arka plan, küçük resim ve nesnelerle alt düzey çizim için ideal olan performans Drawing avantajları DrawingVisual sağlar.

Bunlar bir tür nesnesi olduğundan, nesneler aşağıdakileri içeren birkaç özel özellik elde eder: bunlar kaynak olarak bildirebilir, birden çok nesne arasında paylaşılır, performansı artırmak için salt okunur yapılır, kopyalanmış ve iş parçacığı güvenli FreezableDrawing yapılır. Freezable Nesneler tarafından sağlanan farklı özellikler hakkında daha fazla bilgi Freezable için bkz. Freezable

Şekil Çizme

Şekil çizmek için bir GeometryDrawing kullanırsiniz. Geometri çiziminin özelliği çizilecek şekli, özelliği şeklin iç şeklinin nasıl boyanmış olması gerektiğini, özelliği ise ana hatlarının nasıl GeometryBrushPen çizileceklerini açıklar.

Aşağıdaki örnek, şekil GeometryDrawing çizmek için kullanır. Şekil ve iki nesnesi GeometryGroup tarafından EllipseGeometry açıklanmıştır. Şeklin iç resmi ile boyanmış LinearGradientBrush ve ana hatları bir ile çizilir. BlackPen

Bu örnek aşağıdakini GeometryDrawing oluşturur.

A GeometryDrawing of two ellipses
A GeometryDrawing

//
// 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>

Tam örnek için bkz. GeometryDrawing oluşturma.

Gibi Geometry diğer sınıflar, PathGeometry eğriler ve yaylar oluşturarak daha karmaşık şekiller oluşturmanıza olanak sağlar. Nesneler hakkında daha fazla Geometry bilgi için bkz. Geometry

Nesne kullanmayan şekiller çizmenin diğer yolları hakkında daha fazla bilgi için bkz. WPF'de Şekiller ve Temel DrawingDrawing

Görüntü Çizme

Bir görüntü çizmek için bir ImageDrawing kullanırsiniz. ImageDrawingNesnenin ImageSource özelliği, çizilecek görüntüyü, özelliği ise Rect görüntünün çekilecek bölgeyi tanımlar.

Aşağıdaki örnek, 100 ile 100 piksel arasında (75.75) konumdaki bir dikdörtgene bir görüntü çizer. Aşağıdaki çizimde örnek ImageDrawing tarafından oluşturulan gösterilmiştir. sınırlarını göstermek için gri bir kenarlık ImageDrawing eklendi.

A 100 by 100 ImageDrawing drawn at (75,75)
A 100 by 100 ImageDrawing

// 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"/>

Görüntüler hakkında daha fazla bilgi için bkz. Imaging'e Genel Bakış.

Medya Oynatma (Yalnızca Kod)

Not

VideoDrawing(XAML) içinde bir Extensible Application Markup Language, ancak kod kullanarak medyasını yükp oynatabilirsiniz. Video oynatmak için Extensible Application Markup Language (XAML) MediaElement kullanın.

Ses veya video dosyası oynatmak için ve VideoDrawingMediaPlayer kullanın. Medyayı yüklemenin ve oynatmanın iki yolu vardır. Birincisi, ve bir'i kendi başına kullanmak, ikinci yol ise ve ile kullanmak üzere kendi ve MediaPlayerVideoDrawingMediaTimeline 'nizi MediaPlayerVideoDrawing oluşturmaktır.

Not

Medyayı uygulamanıza dağıtırken, görüntüde olduğu gibi bir medya dosyasını proje kaynağı olarak kullanılamaz. Proje dosyanız içinde bunun yerine medya türünü olarak ve veya Content olarak CopyToOutputDirectoryPreserveNewest ayarlayabilirsiniz. Always

Kendi ortamınızı oluşturmadan medya MediaTimeline oynatmak için aşağıdaki adımları gerçekleştirin.

  1. Bir nesnesi MediaPlayer oluşturun.

    MediaPlayer player = new MediaPlayer();
    
  2. Medya Open dosyasını yüklemek için yöntemini kullanın.

    player.Open(new Uri(@"sampleMedia\xbox.wmv", UriKind.Relative));
    
  3. Oluşturun. VideoDrawing

    VideoDrawing aVideoDrawing = new VideoDrawing();
    
  4. ortamının özelliğini ayarerek medyayı çizmek için boyutu Rect ve konumu VideoDrawing belirtin.

    aVideoDrawing.Rect = new Rect(0, 0, 100, 100);
    
  5. özelliğini Player oluşturduğunuz VideoDrawing ile MediaPlayer ayarlayın.

    aVideoDrawing.Player = player;
    
  6. Medyayı Play çalmaya MediaPlayer başlamak için yöntemini kullanın.

    // Play the video once.
    player.Play();
    

Aşağıdaki örnekte, bir video VideoDrawing dosyasını bir kez MediaPlayer oynatmak için ve kullanır.

//
// 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();

Medya üzerinde ek zamanlama denetimi elde etmek için ve MediaTimeline nesneleriyle MediaPlayerVideoDrawing kullanın. , MediaTimeline videonun tekrarlamalı olup olmadığını belirtmenizi sağlar. ile kullanmak MediaTimeline için aşağıdaki adımları VideoDrawing gerçekleştirin:

  1. ve MediaTimeline zamanlama davranışlarını ayarlayın.

    // Create a MediaTimeline.
    MediaTimeline mTimeline =
        new MediaTimeline(new Uri(@"sampleMedia\xbox.wmv", UriKind.Relative));
    
    // Set the timeline to repeat.
    mTimeline.RepeatBehavior = RepeatBehavior.Forever;
    
  2. 'den MediaClock bir MediaTimeline oluşturun.

    // Create a clock from the MediaTimeline.
    MediaClock mClock = mTimeline.CreateClock();
    
  3. bir oluşturun MediaPlayer ve özelliğini ayarlamak için MediaClockClock kullanın.

    MediaPlayer repeatingVideoDrawingPlayer = new MediaPlayer();
    repeatingVideoDrawingPlayer.Clock = mClock;
    
  4. oluşturma VideoDrawing ve MediaPlayer özelliğine PlayerVideoDrawing atama.

    VideoDrawing repeatingVideoDrawing = new VideoDrawing();
    repeatingVideoDrawing.Rect = new Rect(150, 0, 100, 100);
    repeatingVideoDrawing.Player = repeatingVideoDrawingPlayer;
    

Aşağıdaki örnekte, video tekrar MediaTimeline tekrar MediaPlayer oynatmak için ve VideoDrawing ile birlikte bir 1 2011 2444 2444 2444 2004 2004 04:

//
// 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;

bir kullanırsanız, etkileşimli yöntemleri yerine medya kayıttan yürütmeyi kontrol etmek için özelliğinden döndürülen MediaTimelineClockController etkileşimli özelliğini ControllerMediaClockMediaPlayer kullanırsınız.

Metin Çizme

Metin çizmek için ve GlyphRunDrawingGlyphRun kullanın. Aşağıdaki örnekte GlyphRunDrawing "Merhaba Dünya" metnini çizmek için bir 2000000000000000000000000000000000000

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>

, GlyphRun sabit biçimli belge sunumu ve yazdırma senaryolarında kullanılmak üzere tasarlanmış alt düzey bir nesnedir. Ekrana metin çizmenin daha basit bir yolu veya LabelTextBlock kullanmaktır. hakkında daha fazla bilgi GlyphRun için GlyphRun Öğesine Genel Bakış.

Bileşik Çizimler

, DrawingGroup birden çok çizimi tek bir bileşik çizimde birleştirmeye olanak sağlar. kullanarak DrawingGroup şekilleri, resimleri ve metinleri tek bir nesnede Drawing birleştirebilirsiniz.

Aşağıdaki örnekte iki nesneyi DrawingGroup ve bir nesneyi birleştirmek için bir GeometryDrawingImageDrawing kullanılır. Bu örnek aşağıdaki çıkışı üretir.

A DrawingGroup with multiple drawings
Bileşik çizim

//
// 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>

ayrıca opaklık maskelerini, dönüşümleri, bit eşlem etkilerini ve diğer işlemleri DrawingGroup içeriğine uygulamana olanak sağlar. DrawingGroup işlemleri şu sırayla uygulanır: OpacityMask , , , , ve ardından OpacityBitmapEffectClipGeometryGuidelineSetTransform .

Aşağıdaki çizimde işlemlerin uygulanma DrawingGroup sırası gösterilmiştir.

DrawingGroup order of operations
DrawingGroup işlemlerinin sırası

Aşağıdaki tabloda, bir nesnenin içeriğini işlemek için DrawingGroup kullanabileceğiniz özellikler açık almaktadır.

Özellik Açıklama Illüstrasyon
OpacityMask İçeriğin seçili bölümlerinin opaklığını DrawingGroup değiştirme. Bir örnek için, bkz. How to: Control the Opaklık of a Drawing. A DrawingGroup with an opacity mask
Opacity İçeriğin opaklığını tek tek DrawingGroup değiştirir. Saydam veya kısmen saydam Drawing hale yapmak için bu özelliği kullanın. Bir örnek için bkz. Nasıl yapılır: Çizime Opaklık Maskesi Uygulama. DrawingGroups with different opacity settings
BitmapEffect İçeriğine BitmapEffect bir DrawingGroup uygular. Bir örnek için bkz. Nasıl yapılır: Çizime BitmapEffect Uygulama. DrawingGroup with a BlurBitmapEffect
ClipGeometry DrawingGroupİçeriğini, kullanarak tanımda bulundurarak bir bölgeye klipleri Geometry ekleyin. Bir örnek için, bkz. How to: Clip a Drawing . DrawingGroup with a defined clip region
GuidelineSet Cihazdan bağımsız pikselleri belirtilen yönergelere göre cihaz piksellerini yaslar. Bu özellik, düşük DPI ekranlarında ince ayrıntılı grafiklerin net bir şekilde işlemesini sağlamak için kullanışlıdır. Bir örnek için bkz. Çizime GuidelineSet Uygulama. A DrawingGroup with and without a GuidelineSet
Transform İçeriğini DrawingGroup dönüştürer. Bir örnek için bkz. Nasıl yapılır: Çizime Dönüşüm Uygulama. A rotated DrawingGroup

Çizimi Görüntü Olarak Görüntüleme

Denetime sahip bir görüntülemek için denetimin özelliği olarak kullanın ve nesnenin DrawingImage özelliğini görüntülemek istediğiniz DrawingImageImageSourceDrawingImageDrawingImage.Drawing çizime ayarlayın.

Aşağıdaki örnekte, bir görüntülemek DrawingImage için bir ve denetimi Image 2. GeometryDrawing Bu örnek aşağıdaki çıkışı üretir.

A GeometryDrawing of two ellipses
A DrawingImage

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>

Paint Çizim ile Nesne Oluşturma

, DrawingBrush bir alanı çizim nesnesiyle boyanan bir fırça t t tür. Çizimle herhangi bir grafik nesnesini boyamak için kullanabilirsiniz. Drawingözelliğinin DrawingBrushDrawing açıklamasıdır. ile işlemek için, fırça özelliğini kullanarak fırçaya ekleyin ve fırça kullanarak denetim veya panel gibi bir grafik nesnesini DrawingDrawingBrushDrawing boyamak için fırçayı kullanın.

Aşağıdaki örneklerde, bir DrawingBrush desenden Fill oluşturulan bir ile bir boya için bir RectangleGeometryDrawing kullanır. Bu örnek aşağıdaki çıkışı üretir.

A tiled DrawingBrush
DrawingBrush ile kullanılan GeometryDrawing

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>

DrawingBrushsınıfı, içeriğini esndirme ve tiling için çeşitli seçenekler sağlar. hakkında daha fazla bilgi DrawingBrush için DrawingBrush bakış.

Görselle Çizim İşleme

, DrawingVisual çizimi işlemek için tasarlanmış bir görsel nesne t t'tir. Görsel katmanında doğrudan çalışmak, yüksek oranda özelleştirilmiş bir grafik ortamı oluşturmak isteyen geliştiriciler için bir seçenektir ve bu genel bakışta açıklanmaz. Daha fazla bilgi için bkz. DrawingVisual Nesnelerini Kullanma'ya genel bakış.

DrawingContext Nesneleri

sınıfı, DrawingContext bir veya'i görsel Visual içerikle Drawing doldurmak için olanak sağlar. Grafik içeriğini çok verimli bir şekilde açık DrawingContext olduğundan, bu tür alt düzey grafik nesnelerinin çoğu kullanır.

Draw DrawingContext yöntemleri, türün çizim yöntemlerine benzer görünse de System.Drawing.Graphics aslında çok farklıdır. DrawingContext , bir tutma modu grafik sistemiyle, tür System.Drawing.Graphics ise anlık mod grafik sistemiyle kullanılır. Bir nesnenin çizim komutlarını kullanırken aslında bir işleme yönergeleri kümesi depolarsınız (tam depolama mekanizması, daha sonra grafik sistemi tarafından kullanılacak olan nesnesinin türüne bağlı olsa da), ekrana gerçek zamanlı olarak DrawingContextDrawingContext çizmezsiniz. Windows Presentation Foundation (WPF) grafik sisteminin nasıl çalıştığını görmek için bkz. WPF Grafik İşlemeye Genel Bakış.

Bir örneğini doğrudan hiçbir zaman doğrudan örneğiz; ancak, ve gibi belirli yöntemlerden bir çizim DrawingContext bağlamı DrawingGroup.OpenDrawingVisual.RenderOpen edinebilirsiniz.

Görselin İçeriğini Numarala

Diğer kullanımlarına ek olarak, Drawing nesneler bir içeriğinin numaralandırı için bir nesne modeli de Visual sağlar.

Aşağıdaki örnek, GetDrawing değerini almak ve DrawingGroup bunu Visual numaralara almak için yöntemini kullanır.

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.
        }
    }
}

Ayrıca bkz.