مشاركة عبر


نظرة عامة حول كائنات الرسم

يقدم هذا الموضوع كائنات Drawing كما يوضح كيفية استخدامهم لرسم الأشكال أو الصور النقطية أو النص، و الوسائط بكفاءة. قم باستخدام كائنات Drawing عند إنشاءك للقصاصات الفنية، قم بالرسم بـ DrawingBrush, أو استخدام كائنات Visual .

يشتمل هذا الموضوع على الأقسام التالية.

  • ما هو الكائن الرسومي ؟
  • رسم شكل
  • رسم صورة
  • تشغيل الوسائط (التعليمات البرمجية فقط)
  • رسم النص
  • رسومات مركّبة
  • عرض رسم على شكل صورة
  • دهان أحد الكائنات باستخدام الرسم
  • تقديم رسم مع Visual
  • كائنات DrawingContext
  • تعداد محتويات Visual
  • موضوعات ذات صلة

ما هو الكائن الرسومي ؟

كائن Drawing يصف محتوى مرئي مثل شكل ، صورة نقطية أو فيديو أو سطر من النص. أنواع مختلفة من الرسومات تصف أنواع مختلفة من المحتوى. التالي هو قائمة بأنواع مختلفة من الكائن الرسومي :

كائنات Drawing تكون versatile; هناك العديد من الطرق التي يمكنك بها استخدام الكائن Drawing .

  • يمكنك عرضه كصورة باستخدام عنصر التحكم DrawingImage و Image.

  • يمكنك استخدامه بــ DrawingBrush لرسم كائن، مثل Background من Page.

  • يمكنك استخدامه لوصف مظهر DrawingVisual.

  • يمكنك استخدامه لتعداد المحتويات لــ Visual.

يوفر WPF أنواع أخرى من الكائنات التي يمكنها رسم أشكال أو صور نقطية أو النص، و الوسائط. على سبيل المثال، يمكنك أيضاً استخدام كائنات Shape لرسم أشكال ، و عنصر التحكم MediaElement يوفر طريقة أخرى لإضافة الفيديو للتطبيق الخاص بك. لذلك متى يجب عليك استخدام كائنات Drawing ؟ عندما تقوم بتقديم ميزات من مستوى إطار العمل للحصول على مزايا الأداء أو عندما تحتاج إلى ميزات Freezable . بسبب إن كائنات Drawing تفتقر إلى الدعم لــ تخطيط النظام ، الإدخال و التركيز ، هي توفر مزايا الأداء التي تجعلهم مثاليين لوصف الخلفيات أو القصاصات الفنية، ومن أجل الرسم ذي المستوى المنخفض بكائنات Visual .

لأنهم كائن من النوع Freezable ، كائنات Drawing تقوم بالحصول على عدة ميزات خاصة، والتي تتضمن ما يلي: يمكن تعريفهم كـ موارد ، تم مشاركتها بين عدة كائنات ، تم إجراءها للقراءة فقط لتحسين الأداء ، تم استنساخها وتم اجراءها كمؤشر الترابط - الآمن. للحصول على مزيد من المعلومات حول الميزات المختلفة المتوفرة من قبل كائنات Freezable ، راجع نظرة عامة حول الكائنات المجمدة.

رسم شكل

لرسم شكل ، استخدام GeometryDrawing. خاصية Geometry الخاصة بالرسم الهندسي يقوم بوصف الشكل الصالح للرسم، خاصية Brush الخاصة به تقوم بوصف الخاصية كيفية يجب رسم ما داخل الشكل كما تصف الخاصية Pen الخاصة به كيفية رسم ما خارجه .

يستخدم المثال التالي GeometryDrawing لرسم الشكل. يتم وصف الشكل من قبل GeometryGroup و كائني EllipseGeometry. يتم تلوين الجزء الداخلي للشكل باستخدام LinearGradientBrush و رسم المخطط التفصيلي باستخدام Black Pen.

هذا المثال يقوم بإنشاء GeometryDrawing التالي .

GeometryDrawing

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>

للمثال الكامل، راجع كيفية القيام بما يلي: إنشاء GeometryDrawing.

فئات Geometry الأخرى مثل PathGeometry تتيح لك إنشاء أشكال أكثر تعقيداً عن طريق إنشاء المنحنيات و الأقواس. لمزيد من المعلومات حول كائنات Geometry، راجع نظرة عامة على هندسة.

للحصول على مزيد من المعلومات حول طرق أخرى لرسم الأشكال التي لا تستخدم كائنات Drawing ، راجع الأشكال و الرسم الأساسي في نظرة عامة WPF.

رسم صورة

لرسم صورة ، قم باستخدام ImageDrawing. خاصية ImageSource الخاصة بالكائن ImageDrawing تصف الصورة للرسم، ثم خاصية Rect الخاصة به تقوم بتعريف المنطقة حيث يتم رسم الصورة.

المثال التالي يقوم برسم صورة في المستطيل الموجود في (75,75) الذي هو 100 لـ 100 بكسل . يبين الرسم التوضيحي التالي ImageDrawing الذي تم إنشاؤه بواسطة هذا المثال. تمت إضافة حدود رمادية لإظهار حدود ImageDrawing.

ImageDrawing 100 × 100

ImageDrawing 100 × 100 مرسومًا عند (75,75)

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

. لمزيد من المعلومات حول الرسومات ، راجع نظرة عامة حول التصوير

تشغيل الوسائط (التعليمات البرمجية فقط)

ملاحظةملاحظة

وعلى الرغم من إمكانيتك لتعريف VideoDrawing في Extensible Application Markup Language (XAML) ، يمكنك فقط تحميل و تشغيل الوسائط الخاصة بها باستخدام التعليمات البرمجية.لتشغيل الفيديو في Extensible Application Markup Language (XAML) ، قم باستخدام MediaElement بدلاً من ذلك.

لتشغيل ملف صوت أو فيديو, استخدم VideoDrawing و MediaPlayer. هناك طريقتان لتحميل و تشغيل الوسائط. الأولى عن طريق استخدام MediaPlayer و VideoDrawing بنفسهم و الثانية عن طريق إنشاء MediaTimeline الخاص بك لاستخدامه مع MediaPlayer و VideoDrawing.

ملاحظةملاحظة

عند توزيع الوسائط مع التطبيق الخاص بك, لا يمكنك استخدام ملف الوسائط كمورد مشروع كما تفعل مع الصورة.في ملف المشروع الخاص بك, يجب عليك تعيين نوع الوسائط إلي Content وتعيين CopyToOutputDirectory إلي PreserveNewest أو Always.

لتشغيل الوسائط بدون إنشاء MediaTimeline الخاص بك ، قم بتنفيذ الخطوات التالية.

  1. إنشاء كائن MediaPlayer.

    MediaPlayer player = new MediaPlayer();
    
  2. قم باستخدام الأسلوب Open لتحميل ملف الوسائط.

    player.Open(new Uri(@"sampleMedia\xbox.wmv", UriKind.Relative));
    
  3. قم بإنشاء VideoDrawing

    VideoDrawing aVideoDrawing = new VideoDrawing();
    
  4. حدد الحجم والموقع لرسم الوسائط بواسطة إعداد الخاصية Rect لــ VideoDrawing.

    aVideoDrawing.Rect = new Rect(0, 0, 100, 100);
    
  5. قم بتعيين الخاصية Player لــ VideoDrawing مع MediaPlayer الذي قمت بإنشائه .

    aVideoDrawing.Player = player;
    
  6. قم باستخدام الأسلوب Play من MediaPlayer لبدء تشغيل الوسائط.

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

يستخدم المثال التالي VideoDrawing و MediaPlayer لتشغيل ملف الفيديو مرة واحدة.

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

للحصول على تحكم في التوقيت إضافي علي الوسائط استخدم MediaTimeline مع كائنات MediaPlayer و VideoDrawing. يٌمكّنك MediaTimelineمن تحديد ما إذا كان يجب على الفيديو أن يتكرر. لاستخدام MediaTimeline بــ VideoDrawing, نفذ الخطوات التالية:

  1. تقوم بتعريف MediaTimeline و تعيين سلوكيات التوقيت الخاص به.

    // Create a MediaTimeline.
    MediaTimeline mTimeline = 
        new MediaTimeline(new Uri(@"sampleMedia\xbox.wmv", UriKind.Relative)); 
    
    // Set the timeline to repeat.
    mTimeline.RepeatBehavior = RepeatBehavior.Forever;
    
  2. قم بإنشاء MediaClock من MediaTimeline.

    // Create a clock from the MediaTimeline.
    MediaClock mClock = mTimeline.CreateClock();
    
  3. قم بإنشاء MediaPlayer واستخدام MediaClock لتعيين الخاصية Clock الخاصة به .

    MediaPlayer repeatingVideoDrawingPlayer = new MediaPlayer();
    repeatingVideoDrawingPlayer.Clock = mClock;
    
  4. قم بإنشاء VideoDrawing وتعيين MediaPlayer إلى خاصية Player من VideoDrawing.

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

يستخدم المثال التالي MediaTimeline مع MediaPlayer و VideoDrawing لتشغيل الفيديو بشكل متكرر.

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

لاحظ أنه, عند استخدام MediaTimeline فانك تستخدم ClockController تفاعلية التي يتم إرجاعها من خاصية Controller التابعة إلي MediaClock للتحكم في تشغيل الوسائط بدلاً من الأساليب التفاعلية التابعة إلي MediaPlayer.

رسم النص

لرسم النص، استخدم GlyphRunDrawing و GlyphRun. يستخدم المثال التالي GlyphRunDrawing لرسم النص "مرحباً شبكة".

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 هو كائن ذو المستوى المنخفض للاستخدام مع العرض التقديمي للمستند ذي التنسيق الثابت و طباعة سيناريوهات. طريقة أسهل لرسم النص إلى الشاشة لاستخدام Label أو TextBlock. لمزيد من المعلومات حول GlyphRun، راجع النظرة العامة مقدمة حول كائن GlyphRun و عنصر Glyphs.

رسومات مركّبة

DrawingGroup تمكنك من ضم الرسومات المتعددة في الرسم المركّب الفردي . باستخدام DrawingGroup ، يمكنك تجميع أشكال "و" الصور "و" النص في كائن Drawing الفردي .

يستخدم المثال التالي DrawingGroup لضم اثنين من كائنات GeometryDrawing و كائن ImageDrawing . ينتج هذا المثال الإخراج التالي:

رسومات مركّبة

DrawingGroup بها عدة رسومات

            //
            // 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 also enables you إلى يطبق معدل الشفافية masks, transforms, صورة نقطية تأثيرات, و غير ذلك العمليات إلى its المحتويات. DrawingGroupتطبيق العمليات بالترتيب التالي: OpacityMask, Opacity, BitmapEffect, ClipGeometry, GuidelineSet, و من ثمTransform.

يبين الرسم التوضيحي التالي الترتيب في تطبيق أي من عمليات DrawingGroup .

ترتيب عمليات DrawingGroup

ترتيب عمليات DrawingGroup

يصف الجدول التالي الخصائص التي يمكنك استخدامها لمعالجة محتويات كائن DrawingGroup .

الخصائص

الوصف

توضيح

OpacityMask

تقوم بتغيير اللا شفافية من الأجزاء المحددة من محتويات DrawingGroup . على سبيل المثال ، راجع كيفية القيام بما يلي: التحكم بمعدل شفافية الرسم.

DrawingGroup بها قناع معدل شفافية

Opacity

تقوم بتغيير اللاشفافية لمحتويات DrawingGroup . استخدم هذة الخاصية لجعل Drawing شفافة أو شفافة جزئياً. على سبيل المثال ، راجع كيفية القيام بما يلي: تطبيق قناع معدل التعتيم للرسم.

DrawingGroups بإعدادات مختلفة لمعدل الشفافية

BitmapEffect

يقوم بتطبيق BitmapEffect لمحتويات DrawingGroup . على سبيل المثال ، راجع كيفية القيام بما يلي: تطبيق BitmapEffect إلى رسم.

DrawingGroup به BlurBitmapEffect

ClipGeometry

تقوم بقص محتويات DrawingGroup إلى المنطقة التي تصفها باستخدام Geometry. على سبيل المثال ، راجع كيفية القيام بما يلي: قص رسم.

DrawingGroup به منطقة قصاصات معرفة

GuidelineSet

ينطبق البكسل المستقلة عن الجهاز لجهاز وحدات البكسل الموجودة على طول جانب الإرشادات المحدد. هذة الخاصية مفيدة لضمان أن الرسومات المفصلة بدقة تقوم بالتقديم بشكل حاد على شاشات DPI منخفضة. على سبيل المثال ، راجع كيفية القيام بما يلي: تطبيق المبدأ التوجيهي لتعيين الرسم.

DrawingGroup بها GuidelineSet أو بدونها

Transform

تقوم بتحويل محتويات DrawingGroup . على سبيل المثال ، راجع كيفية القيام بما يلي: تطبيق تحويل إلى رسم.

DrawingGroup مدارة

عرض رسم على شكل صورة

لعرض Drawing مع Image عنصر تحكم, استخدم DrawingImage كما Image عنصر التحكم Source وتعيين DrawingImage خاصية الكائن DrawingImage.Drawing على الرسم الذي تريد عرضه.

يستخدم المثال التالي DrawingImage و Image عنصر تحكم لعرض GeometryDrawing. ينتج هذا المثال الإخراج التالي:

DrawingImage

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 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="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:PresentationOptions="https://schemas.microsoft.com/winfx/2006/xaml/presentation/options" 
  xmlns:mc="https://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>

دهان أحد الكائنات باستخدام الرسم

DrawingBrush هو نوع من الفرشاة سيرسم منطقة من الكائن الرسومي. يمكنك استخدامه للرسم فقط حول أي كائن رسومي بالرسم. خاصية Drawing الخاصة بــ DrawingBrush تقوم بوصف Drawing الخاص به . لتقديم Drawing بــ DrawingBrush، قم بإضافته إلى الفرشاة باستخدام خاصية Drawing الخاصة بالفرشاة واستخدم الفرشاة لرسم كائن رسومي مثل عنصر تحكم أو لوحة.

تستخدم الأمثلة التالية DrawingBrush لرسم Fill من Rectangle بنقش تم إنشاؤه من GeometryDrawing. ينتج هذا المثال الإخراج التالي:

GeometryDrawing المستخدم مع DrawingBrush

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="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:PresentationOptions="https://schemas.microsoft.com/winfx/2006/xaml/presentation/options" 
  xmlns:mc="https://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>

توفر فئة DrawingBrush مجموعة متنوعة من خيارات لتمديد و تجانب المحتوى الخاص به. لمزيد من المعلومات حول DrawingBrush، راجع النظرة العامة رسم صور و رسومات و صور.

تقديم رسم مع Visual

DrawingVisual هو نوع من الكائن المرئي الذي تم تصميمه لتقديم الرسم. العمل المباشر مع الطبقة المرئية هو خيار للمطورين الذين يرغبون في إنشاء بيئة رسومية مخصصة بشدة وغير الموضح في هذه النظرة العامة. للحصول على مزيد من المعلومات ، راجع النظرة العامة استخدام كائنات DrawingVisual

كائنات DrawingContext

تمكنك فئة DrawingContext من نشر Visual أو Drawing مع المحتوى المرئي الخاص به . العديد من الرسومات ذات المستوى المنخفض مثل استخدام DrawingContext لأنه يصف المحتوى الرسومي بكفاءة عالية.

Although the DrawingContext draw وظائف appear similar إلى the draw وظائف of the System.Drawing.Graphics نوع, they are actually very different. DrawingContextهو استخدامها مع النظام رسومات وضع retained، بينماSystem.Drawing.Graphicsنوع هو استخدامها مع عنصر الفوري لوضع رسومات الالنظام. عند استخدام أوامر الرسم الخاصة بكائن DrawingContext, تقوم فعلياً بتخزين مجموعة من إرشادات التقديم (على الرغم من اعتماد تقنية التخزين المظبوطة على نوع الكائن الذي يوفر DrawingContext) الذي سيتم استخدامه فيما بعد بواسطة نظام الرسومات; لا تقوم بالرسم إلى الشاشة في الوقت الحقيقي. للحصول على مزيد من المعلومات حول كيفية Windows Presentation Foundation (WPF) عمل نظام الرسومات ، راجع نظرة عامة حول تقديم رسومات WPF.

لا يمكنك ابداً إنشاء مثيل لــ DrawingContext بشكل مباشر , على الرغم من ذلك، يمكنك الحصول على سياق الرسم من بعض الطرق مثل DrawingGroup.Open و DrawingVisual.RenderOpen.

تعداد محتويات Visual

بالإضافة إلى الاستخدامات الأخرى الخاصة بهم ، توفر كائنات Drawing أيضاً طراز كائن لتعداد محتويات Visual.

يستخدم المثال التالي أسلوب GetDrawing لاسترداد قيمة DrawingGroup التابعة إلى Visual و تعدادها.

public void RetrieveDrawing(Visual v)
{
    DrawingGroup dGroup = VisualTreeHelper.GetDrawing(v);
    EnumDrawingGroup(dGroup);

}

 // 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.GetType() == typeof(DrawingGroup))
         {
             EnumDrawingGroup((DrawingGroup)drawing);
         }
         else if (drawing.GetType() == typeof(GeometryDrawing))
         {
             // Perform action based on drawing type.  
         }
         else if (drawing.GetType() == typeof(ImageDrawing))
         {
             // Perform action based on drawing type.
         }
         else if (drawing.GetType() == typeof(GlyphRunDrawing))
         {
             // Perform action based on drawing type.
         }
         else if (drawing.GetType() == typeof(VideoDrawing))
         {
             // Perform action based on drawing type.
         }
     }
 }

راجع أيضًا:

المرجع

Drawing

DrawingGroup

المبادئ

أمثلية الأداء: الرسومات ثنائية الأبعاد و التصوير

رسم صور و رسومات و صور

نظرة عامة على هندسة

الأشكال و الرسم الأساسي في نظرة عامة WPF

نظرة عامة حول تقديم رسومات WPF

نظرة عامة حول الكائنات المجمدة

موارد أخرى

المواضيع الإجرائية للرسومات