Çizim Nesnelerine Genel Bakış

Bu konu nesneleri tanıtır Drawing ve şekilleri, bit eşlemleri, metinleri ve medyayı verimli bir şekilde çizmek için bunların nasıl kullanılacağını açıklar. Drawing Küçük resim oluştururken, bir DrawingBrushile boyarken veya nesneleri kullanırken nesneleri kullanınVisual.

Çizim Nesnesi Nedir?

Nesne Drawing şekil, bit eşlem, video veya metin satırı 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 nesnelerinin listesi yer alır.

Drawing nesneler çok yönlü; bir Drawing nesneyi kullanmanın birçok yolu vardır.

  • ve denetimini kullanarak DrawingImageImage görüntü olarak görüntü olarak görüntüleyebilirsiniz.

  • bir nesnesini boyamak için ile DrawingBrush kullanabilirsiniz; örneğin Background , bir Page.

  • Bir görünümünü DrawingVisualaçıklamak için kullanabilirsiniz.

  • Bir öğesinin içeriğini Visualnumaralandırmak için kullanabilirsiniz.

WPF şekiller, bit eşlemler, metin ve medya çizebilen diğer nesne türlerini sağlar. Örneğin, şekiller çizmek için nesneleri de kullanabilirsiniz Shape ve MediaElement denetim, uygulamanıza video eklemenin başka bir yolunu sağlar. Peki nesneleri ne zaman kullanmalısınız Drawing ? Performans avantajları elde etmek için çerçeve düzeyinde özelliklerden ödün verebilirsiniz ya da özelliklere ihtiyacınız Freezable olduğunda. Nesneler Düzen, giriş ve odak desteğine sahip olmadığındanDrawing, arka planları, küçük resimleri ve nesnelerle Visual alt düzey çizimleri tanımlamak için ideal hale getiren performans avantajları sağlar.

Bunlar bir tür Freezable nesnesi olduğundan, Drawing nesneler aşağıdakileri içeren çeşitli özel özellikler elde eder: bunlar kaynak olarak bildirilebilir, birden çok nesne arasında paylaşılabilir, performansı geliştirmek için salt okunur hale getirilebilir, kopyalanabilir ve iş parçacığı güvenli hale getirilebilir. Nesneler tarafından Freezable sağlanan farklı özellikler hakkında daha fazla bilgi için bkz . Freezable Objects Overview.

Şekil Çizme

Şekil çizmek için kullanın GeometryDrawing. Geometri çiziminin Geometry özelliği çizilecek şekli, Brush özelliği şeklin iç kısmının nasıl boyanması gerektiğini ve Pen özelliği de ana hattının nasıl çizilmesi gerektiğini açıklar.

Aşağıdaki örnekte şekil çizmek için bir kullanılır GeometryDrawing . Şekil bir GeometryGroup ve iki EllipseGeometry nesne tarafından tanımlanır. Şeklin iç kısmı ile LinearGradientBrush boyanmış ve ana hattı ile BlackPençizilmiştir.

Bu örnek aşağıdakini GeometryDrawingoluş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.

Diğer Geometry sınıflar, örneğin PathGeometry eğriler ve yaylar oluşturarak daha karmaşık şekiller oluşturmanıza olanak tanır. Nesneler hakkında Geometry daha fazla bilgi için bkz. Geometriye Genel Bakış.

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

Resim Çizme

Resim çizmek için kullanırsınız ImageDrawing. Bir ImageDrawing nesnenin ImageSource özelliği çizilecek görüntüyü açıklar ve Rect özelliği görüntünün çizildiği bölgeyi tanımlar.

Aşağıdaki örnek, 100'e 100 piksel olan (75.75) konumundaki bir dikdörtgene bir görüntü çizer. Aşağıdaki çizimde ImageDrawing , örnek tarafından oluşturulan gösterilmektedir. sınırlarını ImageDrawinggöstermek için gri bir kenarlık 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. Görüntülemeye Genel Bakış.

Yürütme Medyası (Yalnızca Kod)

Dekont

Genişletilebilir Uygulama biçimlendirme dili (XAML) içinde bir VideoDrawing bildirebilmenize rağmen, medyasını yalnızca kod kullanarak yükleyip yürütebilirsiniz. Genişletilebilir Uygulama biçimlendirme dilinde (XAML) video oynatmak için bunun yerine bir MediaElement kullanın.

Bir ses veya video dosyasını yürütmek için ve MediaPlayerkullanırsınızVideoDrawing. Medyayı yüklemenin ve yürütmenin iki yolu vardır. İlki ve'yi MediaPlayerVideoDrawing kendi başına kullanmak, ikinci yol ise ve VideoDrawingile MediaPlayer kullanmak üzere kendi MediaTimeline yönteminizi oluşturmaktır.

Dekont

Medyayı uygulamanızla dağıtırken, görüntü gibi bir medya dosyasını proje kaynağı olarak kullanamazsınız. Proje dosyanızda medya türünü Content veya olarak ayarlamanız CopyToOutputDirectoryPreserveNewestAlwaysgerekir.

Kendi MediaTimelineortamınızı oluşturmadan medya yürütmek için aşağıdaki adımları gerçekleştirin.

  1. Bir MediaPlayer nesne oluşturun.

    MediaPlayer player = new MediaPlayer();
    
  2. Open Medya 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. özelliğini VideoDrawingayarlayarak Rect medyanın çizilmesi için boyutu ve konumu belirtin.

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

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

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

Aşağıdaki örnek VideoDrawingMediaPlayer , bir video dosyasını bir kez 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 VideoDrawing nesneleriyle birlikte MediaPlayer kullanınMediaTimeline. , MediaTimeline videonun yinelenip yinelenmeyeceğini belirtmenizi sağlar. ile VideoDrawingkullanmak MediaTimeline için aşağıdaki adımları gerçekleştirin:

  1. MediaTimeline öğesini bildirin ve 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. içinden MediaTimelinebir MediaClock oluşturun.

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

    MediaPlayer repeatingVideoDrawingPlayer = new MediaPlayer();
    repeatingVideoDrawingPlayer.Clock = mClock;
    
  4. bir VideoDrawing oluşturun ve özelliğini atayın PlayerMediaPlayerVideoDrawing.

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

Aşağıdaki örnek, videoyu tekrar tekrar oynatmak için ile ve MediaPlayerVideoDrawing ile kullanırMediaTimeline.

//
// 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 kullandığınızda MediaTimeline, 'nin etkileşimli ClockController yöntemleri yerine medya kayıttan yürütmeyi denetlemek için özelliğinden ControllerMediaClock döndürülen etkileşimliyi kullandığınızı MediaPlayerunutmayın.

Metin Çiz

Metin çizmek için ve GlyphRunDrawingGlyphRunkullanırsınız. Aşağıdaki örnekte , "Merhaba Dünya" metnini çizmek için bir GlyphRunDrawing kullanılır.

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 , sabit biçimli belge sunusu ve yazdırma senaryolarıyla kullanılmak üzere tasarlanmış düşük düzeyli bir nesnedir. Ekrana metin çizmenin daha basit bir TextBlockyolu veya kullanmaktırLabel. hakkında GlyphRundaha fazla bilgi için bkz . GlyphRun Nesnesine ve Glif öğesine genel bakış.

Bileşik Çizimler

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

Aşağıdaki örnekte, iki GeometryDrawing nesneyle bir nesneyi birleştirmek için bir ImageDrawing kullanılırDrawingGroup. Bu örnek aşağıdaki çıkışı oluşturur.

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, DrawingGroup içeriğine opaklık maskeleri, dönüşümler, bit eşlem efektleri ve diğer işlemleri uygulamanıza da olanak tanır. DrawingGroupişlemleri şu sırayla uygulanır: , , , ClipGeometry, , GuidelineSetve sonra Transform. BitmapEffectOpacityOpacityMask

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

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

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

Özellik Tanım Çizim
OpacityMask İçeriğin seçili bölümlerinin DrawingGroup opaklığını değiştirir. Bir örnek için bkz . Nasıl yapılır: Çizimin Opaklığını Denetleme. A DrawingGroup with an opacity mask
Opacity İçeriğin opaklığını tekdüzen DrawingGroup olarak değiştirir. Saydam veya kısmen saydam yapmak Drawing için bu özelliği kullanın. Örnek için bkz . Nasıl yapılır: Çizime Opaklık Maskesi Uygulama. DrawingGroups with different opacity settings
BitmapEffect İçeriğine DrawingGroup bir BitmapEffect uygular. Bir örnek için bkz . Nasıl yapılır: Çizime BitmapEffect Uygulama. DrawingGroup with a BlurBitmapEffect
ClipGeometry İçeriğini DrawingGroup kullanarak tanımladığınız bir bölgeye klipler Geometry. Bir örnek için bkz . Nasıl yapılır: Çizim Kırpma . DrawingGroup with a defined clip region
GuidelineSet Belirtilen yönergeler boyunca cihazdan bağımsız pikselleri cihaz piksellerine yaslar. Bu özellik, düşük DPI ekranlarda ayrıntılı grafiklerin keskin bir şekilde işlenmesini sağlamak için kullanışlıdır. Örnek için bkz . Çizime GuidelineSet Uygulama. A DrawingGroup with and without a GuidelineSet
Transform İçeriği dönüştürür DrawingGroup . Örnek için bkz . Nasıl yapılır: Çizime Dönüşüm Uygulama. A rotated DrawingGroup

Çizimi Resim Olarak Görüntüleme

Bir denetimiyle görüntülemek Drawing için, denetimin ImageSource özelliği olarak bir DrawingImage kullanın ve nesnenin DrawingImage.DrawingDrawingImage özelliğini görüntülemek istediğiniz çizim olarak Image ayarlayın.

Aşağıdaki örnek, bir DrawingImage ve Image denetimini kullanarak bir GeometryDrawinggörüntüler. Bu örnek aşağıdaki çıkışı oluşturur.

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>

Çizimle Nesne Boyama

A DrawingBrush , bir alanı çizim nesnesiyle boyayan bir fırça türüdür. Bir çizimle hemen her grafik nesnesini boyamak için kullanabilirsiniz. özelliği Drawing , DrawingBrush özelliğini Drawingtanımlar. ile DrawingBrushişlemek Drawing için, fırçanın Drawing özelliğini kullanarak fırçaya ekleyin ve fırçayı kullanarak denetim veya panel gibi grafik bir nesneyi boyayın.

Aşağıdaki örneklerde' DrawingBrush den oluşturulmuş bir Rectangle desen ile öğesini boyamak Fill için bir GeometryDrawingkullanılır. Bu örnek aşağıdaki çıkışı oluşturur.

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>

sınıfı, DrawingBrush içeriğini esnetmek ve döşemek için çeşitli seçenekler sağlar. hakkında DrawingBrushdaha fazla bilgi için bkz . Resimler, Çizimler ve Görsellerle Boyamaya genel bakış.

Görselle Çizim İşleme

A DrawingVisual , bir çizimi işlemek için tasarlanmış bir görsel nesne türüdür. Doğrudan görsel katmanında ç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 Objects kullanmaya genel bakış.

DrawingContext Nesneleri

sınıfı, DrawingContext veya VisualDrawing öğesini görsel içerikle doldurmanızı sağlar. Bu tür alt düzey grafik nesnelerinin çoğu, grafik içeriğini çok verimli bir şekilde açıkladığı için kullanır DrawingContext .

Çizim yöntemleri, türün DrawingContext çizim yöntemlerine System.Drawing.Graphics benzer görünse de, aslında çok farklıdır. DrawingContext , korumalı mod grafik sistemiyle kullanılırken System.Drawing.Graphics , tür ise anlık mod grafik sistemiyle kullanılır. Bir DrawingContext nesnenin çizim komutlarını kullandığınızda, aslında daha sonra grafik sistemi tarafından kullanılacak bir dizi işleme yönergesini (tam depolama mekanizmasını sağlayan DrawingContextnesne türüne bağlı olsa da) depolarsınız; ekrana gerçek zamanlı olarak çizim yapılmaz. Windows Presentation Foundation (WPF) grafik sisteminin nasıl çalıştığı hakkında daha fazla bilgi için bkz. WPF Grafik İşlemeye Genel Bakış.

Hiçbir zaman doğrudan bir DrawingContextörneği oluşturmazsınız; ancak ve DrawingVisual.RenderOpengibi DrawingGroup.Open belirli yöntemlerden bir çizim bağlamı elde edebilirsiniz.

Görselin İçeriğini Numaralandırma

Nesneler, diğer kullanımlarına ek olarak, Drawing içeriğini numaralandırmak için bir Visualnesne modeli de sağlar.

Aşağıdaki örnek, GetDrawing bir Visual değerini almak DrawingGroup ve numaralandırmak 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.