Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este tema se presentan objetos y se describe cómo usarlos Drawing para dibujar formas, mapas de bits, texto y medios de forma eficaz. Utilice objetos Drawing al crear imágenes prediseñadas, al pintar con DrawingBrush, o al usar objetos Visual.
Qué es un objeto de dibujo
Un Drawing objeto describe el contenido visible, como una forma, un mapa de bits, un vídeo o una línea de texto. Los diferentes tipos de dibujos describen diferentes tipos de contenido. A continuación se muestra una lista de los diferentes tipos de objetos de dibujo.
GeometryDrawing – Dibuja una forma.
ImageDrawing – Dibuja una imagen.
GlyphRunDrawing – Dibuja texto.
VideoDrawing – Reproduce un archivo de audio o vídeo.
DrawingGroup – Dibuja otros dibujos. Use un grupo de dibujos para combinar otros dibujos en un solo dibujo compuesto.
Drawing los objetos son versátiles; hay muchas maneras de usar un Drawing objeto .
Puede mostrarlo como una imagen mediante un control DrawingImage y un control Image.
Puede usarlo con DrawingBrush para pintar un objeto, como el Background de un Page.
Puede usarlo para describir la apariencia de un DrawingVisual.
Puede usarlo para enumerar los contenidos de un Visual.
WPF proporciona otros tipos de objetos que son capaces de dibujar formas, mapas de bits, texto y medios. Por ejemplo, también puede usar Shape objetos para dibujar formas y el MediaElement control proporciona otra manera de agregar vídeo a la aplicación. ¿Cuándo debe usar Drawing objetos? Cuando puede sacrificar las características de nivel de marco para obtener ventajas de rendimiento o cuando necesite Freezable características. Dado que los Drawing objetos no tienen soporte para Layout, entrada de datos y enfoque, ofrecen beneficios de rendimiento que los hacen ideales para describir fondos, clip art y para dibujo de nivel bajo con Visual objetos.
Dado que son un objeto de tipo Freezable , Drawing los objetos obtienen varias características especiales, entre las que se incluyen las siguientes: se pueden declarar como recursos, compartirse entre varios objetos, hacer de solo lectura para mejorar el rendimiento, clonar y hacer que sean seguros para subprocesos. Para obtener más información sobre las distintas características proporcionadas por Freezable objetos, vea Objetos Freezable: Información General.
Dibujar una forma
Para dibujar una forma, use un GeometryDrawing. Una propiedad de Geometry dibujo de geometría describe la forma que se va a dibujar, su Brush propiedad describe cómo se debe pintar el interior de la forma y su Pen propiedad describe cómo se debe dibujar su contorno.
En el ejemplo siguiente se usa un GeometryDrawing para dibujar una forma. La forma se describe mediante un GeometryGroup objeto y dos EllipseGeometry objetos. El interior de la forma se pinta con un LinearGradientBrush y su contorno se dibuja con un BlackPen.
En este ejemplo se crea el siguiente GeometryDrawing.
Un dibujo de geometría
//
// 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>
Para obtener el ejemplo completo, vea Crear un GeometryDrawing.
Otras Geometry clases, como PathGeometry permiten crear formas más complejas mediante la creación de curvas y arcos. Para obtener más información sobre Geometry los objetos, vea La información general sobre geometría.
Para obtener más información sobre otras formas de dibujar formas que no usan Drawing objetos, vea Shapes and Basic Drawing in WPF Overview( Información general sobre formas y dibujos básicos en WPF).
Dibujar una imagen
Para dibujar una imagen, utiliza un ImageDrawing. La propiedad de ImageDrawing un ImageSource objeto describe la imagen que se va a dibujar y su Rect propiedad define la región donde se dibuja la imagen.
En el ejemplo siguiente se dibuja una imagen en un rectángulo ubicado en (75 75) que es de 100 a 100 píxeles. En la ilustración siguiente se muestra el ImageDrawing creado por el ejemplo. Se agregó un borde gris para mostrar los límites del ImageDrawing.
Un Dibujo de Imagen de 100 por 100
// 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"/>
Para obtener más información sobre las imágenes, consulte Información general sobre imágenes.
Reproducir contenido multimedia (solo código)
Nota:
Aunque puedes declarar el Lenguaje de marcado extensible de aplicaciones (XAML) en VideoDrawing, solo puedes cargar y reproducir el contenido multimedia mediante código. Para reproducir vídeo en Lenguaje de Marcado de Aplicaciones Extensible (XAML), use MediaElement en su lugar.
Para reproducir un archivo de audio o vídeo, use un VideoDrawing y un MediaPlayer. Hay dos maneras de cargar y reproducir elementos multimedia. La primera consiste en usar un MediaPlayer y un VideoDrawing por separado, y la segunda forma es crear su propio MediaTimeline para usar con el MediaPlayer y el VideoDrawing.
Nota:
Al distribuir medios con la aplicación, no puede usar un archivo multimedia como un recurso de proyecto, como lo haría con una imagen. En el archivo del proyecto, debe establecer el tipo de medio en Content
y establecer CopyToOutputDirectory
en PreserveNewest
o Always
.
Para reproducir elementos multimedia sin crear su propio MediaTimeline, realice los pasos siguientes.
Cree un objeto MediaPlayer.
MediaPlayer player = new MediaPlayer();
Use el Open método para cargar el archivo multimedia.
player.Open(new Uri(@"sampleMedia\xbox.wmv", UriKind.Relative));
Cree un VideoDrawing.
VideoDrawing aVideoDrawing = new VideoDrawing();
Especifique el tamaño y la ubicación para dibujar el medio estableciendo la Rect propiedad de VideoDrawing.
aVideoDrawing.Rect = new Rect(0, 0, 100, 100);
Establezca la propiedad Player del VideoDrawing con el MediaPlayer que creó.
aVideoDrawing.Player = player;
Usa el Play método de MediaPlayer para empezar a reproducir el contenido multimedia.
// Play the video once. player.Play();
En el siguiente ejemplo, se utilizan VideoDrawing y MediaPlayer para reproducir un archivo de vídeo una vez.
//
// 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();
Para obtener un control de tiempo adicional sobre los medios, use un MediaTimeline con los objetos MediaPlayer y VideoDrawing. MediaTimeline permite especificar si el vídeo debe repetirse. Para usar un MediaTimeline con un VideoDrawing, realice los pasos siguientes:
Declare el MediaTimeline y configure sus parámetros de tiempo.
// Create a MediaTimeline. MediaTimeline mTimeline = new MediaTimeline(new Uri(@"sampleMedia\xbox.wmv", UriKind.Relative)); // Set the timeline to repeat. mTimeline.RepeatBehavior = RepeatBehavior.Forever;
Cree un MediaClock desde el MediaTimeline.
// Create a clock from the MediaTimeline. MediaClock mClock = mTimeline.CreateClock();
Cree un MediaPlayer y utilice el MediaClock para establecer su propiedad Clock.
MediaPlayer repeatingVideoDrawingPlayer = new MediaPlayer(); repeatingVideoDrawingPlayer.Clock = mClock;
Cree un VideoDrawing y asigne el MediaPlayer a la propiedad Player del VideoDrawing.
VideoDrawing repeatingVideoDrawing = new VideoDrawing(); repeatingVideoDrawing.Rect = new Rect(150, 0, 100, 100); repeatingVideoDrawing.Player = repeatingVideoDrawingPlayer;
En el ejemplo siguiente se usa un MediaTimeline con MediaPlayer y un VideoDrawing para reproducir un vídeo repetidamente.
//
// 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;
Tenga en cuenta que, cuando se usa MediaTimeline, se utiliza el elemento interactivo ClockController devuelto de la propiedad Controller del MediaClock para controlar la reproducción de medios en lugar de los métodos interactivos de MediaPlayer.
Dibujar texto
Para dibujar texto, use un GlyphRunDrawing y un GlyphRun. En el ejemplo siguiente se usa un GlyphRunDrawing para dibujar el texto "Hola mundo".
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 es un objeto de bajo nivel, diseñado para su uso en situaciones de impresión y presentación de documentos de formato fijo. Una manera más sencilla de dibujar texto en la pantalla es usar un Label o un TextBlock. Para obtener más información sobre GlyphRun, vea introducción al objeto GlyphRun y información general sobre el elemento Glyphs .
Dibujos compuestos
Un DrawingGroup permite combinar varios dibujos en un solo dibujo compuesto. Mediante el uso de un DrawingGroup, puede combinar formas, imágenes y texto en un solo objeto Drawing.
En el ejemplo siguiente se usa un DrawingGroup para combinar dos GeometryDrawing objetos y un ImageDrawing objeto . En este ejemplo se genera la siguiente salida.
Dibujo compuesto
//
// 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>
También DrawingGroup permite aplicar máscaras de opacidad, transformaciones, efectos de mapa de bits y otras operaciones a su contenido. DrawingGroup Las operaciones se aplican en el orden siguiente: OpacityMask, Opacity, BitmapEffect, ClipGeometry, GuidelineSety, a continuación Transform, .
En la siguiente ilustración se muestra el orden en el que DrawingGroup se aplican las operaciones.
Orden de operaciones del grupo de dibujo
En la tabla siguiente se describen las propiedades que puede usar para manipular el contenido de un DrawingGroup objeto.
Propiedad | Descripción | Ilustración |
---|---|---|
OpacityMask | Modifica la opacidad de las partes seleccionadas del DrawingGroup contenido. Para obtener un ejemplo, vea Cómo: Controlar la opacidad de un dibujo. |
![]() |
Opacity | Cambia uniformemente la opacidad del DrawingGroup contenido. Utilice esta propiedad para hacer transparente Drawing o parcialmente transparente. Para obtener un ejemplo, vea Cómo: Aplicar una máscara de opacidad a un dibujo. |
![]() |
BitmapEffect | Aplica un BitmapEffect al DrawingGroup contenido. Para obtener un ejemplo, vea Cómo: Aplicar un objeto BitmapEffect a un dibujo. |
![]() |
ClipGeometry | Recorta el contenido de DrawingGroup a una región que describes usando un Geometry. Para obtener un ejemplo, vea Cómo: Recortar un dibujo . |
![]() |
GuidelineSet | Ajusta los píxeles independientes del dispositivo a los píxeles del dispositivo según las directrices especificadas. Esta propiedad es útil para garantizar que los gráficos finamente detallados se representen de manera nítida en pantallas de bajo PPI. Para obtener un ejemplo, vea Aplicar un conjunto de directrices a un dibujo. |
![]() |
Transform | Transforma el DrawingGroup contenido. Para obtener un ejemplo, vea Cómo: Aplicar una transformación a un dibujo. |
![]() |
Mostrar un dibujo como una imagen
Para mostrar un Drawing con un control Image, use un DrawingImage como Image del control Source y establezca la propiedad DrawingImage del objeto DrawingImage.Drawing en el dibujo que desea mostrar.
En el ejemplo siguiente se usa un DrawingImage y un Image control para mostrar un GeometryDrawing. En este ejemplo se genera la siguiente salida.
Una Imagen de Dibujo
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>
Pintar un objeto con un dibujo
Un DrawingBrush es un tipo de pincel que pinta un área con un objeto de dibujo. Puede usarlo para pintar casi cualquier objeto gráfico con un dibujo. La Drawing propiedad de un objeto DrawingBrush describe su Drawing. Para renderizar un Drawing con un DrawingBrush, agrégalo al pincel utilizando la propiedad Drawing del pincel y usa el pincel para pintar un objeto gráfico, como puede ser un control o un panel.
En los siguientes ejemplos, se utiliza un DrawingBrush para pintar el Fill de un Rectangle con un patrón creado a partir de un GeometryDrawing. En este ejemplo se genera la siguiente salida.
Un GeometryDrawing usado con un DrawingBrush
using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
namespace SDKSample
{
public class DrawingBrushExample : Page
{
public DrawingBrushExample()
{
//
// Create the Geometry to draw.
//
GeometryGroup ellipses = new GeometryGroup();
ellipses.Children.Add(
new EllipseGeometry(new Point(50,50), 45, 20)
);
ellipses.Children.Add(
new EllipseGeometry(new Point(50, 50), 20, 45)
);
//
// Create a GeometryDrawing.
//
GeometryDrawing aGeometryDrawing = new GeometryDrawing();
aGeometryDrawing.Geometry = ellipses;
// Paint the drawing with a gradient.
aGeometryDrawing.Brush =
new LinearGradientBrush(
Colors.Blue,
Color.FromRgb(204,204,255),
new Point(0,0),
new Point(1,1));
// Outline the drawing with a solid color.
aGeometryDrawing.Pen = new Pen(Brushes.Black, 10);
DrawingBrush patternBrush = new DrawingBrush(aGeometryDrawing);
patternBrush.Viewport = new Rect(0, 0, 0.25, 0.25);
patternBrush.TileMode = TileMode.Tile;
patternBrush.Freeze();
//
// Create an object to paint.
//
Rectangle paintedRectangle = new Rectangle();
paintedRectangle.Width = 100;
paintedRectangle.Height = 100;
paintedRectangle.Fill = patternBrush;
//
// Place the image inside a border and
// add it to the page.
//
Border exampleBorder = new Border();
exampleBorder.Child = paintedRectangle;
exampleBorder.BorderBrush = Brushes.Gray;
exampleBorder.BorderThickness = new Thickness(1);
exampleBorder.HorizontalAlignment = HorizontalAlignment.Left;
exampleBorder.VerticalAlignment = VerticalAlignment.Top;
exampleBorder.Margin = new Thickness(10);
this.Margin = new Thickness(20);
this.Background = Brushes.White;
this.Content = exampleBorder;
}
}
}
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:PresentationOptions="http://schemas.microsoft.com/winfx/2006/xaml/presentation/options"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="PresentationOptions"
Margin="20" Background="White">
<Border BorderBrush="Gray" BorderThickness="1"
HorizontalAlignment="Left" VerticalAlignment="Top"
Margin="10">
<Rectangle Width="100" Height="100">
<Rectangle.Fill>
<DrawingBrush PresentationOptions:Freeze="True"
Viewport="0,0,0.25,0.25" TileMode="Tile">
<DrawingBrush.Drawing>
<GeometryDrawing>
<GeometryDrawing.Geometry>
<GeometryGroup>
<EllipseGeometry Center="50,50" RadiusX="45" RadiusY="20" />
<EllipseGeometry Center="50,50" RadiusX="20" RadiusY="45" />
</GeometryGroup>
</GeometryDrawing.Geometry>
<GeometryDrawing.Brush>
<LinearGradientBrush>
<GradientStop Offset="0.0" Color="Blue" />
<GradientStop Offset="1.0" Color="#CCCCFF" />
</LinearGradientBrush>
</GeometryDrawing.Brush>
<GeometryDrawing.Pen>
<Pen Thickness="10" Brush="Black" />
</GeometryDrawing.Pen>
</GeometryDrawing>
</DrawingBrush.Drawing>
</DrawingBrush>
</Rectangle.Fill>
</Rectangle>
</Border>
</Page>
La DrawingBrush clase proporciona una variedad de opciones para estirar y poner en mosaico su contenido. Para obtener más información acerca de DrawingBrush, vea la información general Pintura con imágenes, dibujos y objetos visuales.
Representar un dibujo con un visual
Es DrawingVisual un tipo de objeto visual diseñado para renderizar un dibujo. Trabajar directamente en la capa visual es una opción para los desarrolladores que desean crear un entorno gráfico altamente personalizado y no se describe en esta introducción. Para obtener más información, consulte la introducción al uso de objetos DrawingVisual .
Objetos de DrawingContext
La clase DrawingContext permite poblar un Visual o un Drawing con contenido visual. Muchos de estos objetos gráficos de nivel inferior usan un DrawingContext porque describe el contenido gráfico de forma muy eficaz.
Aunque los DrawingContext métodos draw aparecen similares a los métodos draw del System.Drawing.Graphics tipo , son realmente muy diferentes. DrawingContext se usa con un sistema gráfico de modo retenido, mientras que el tipo System.Drawing.Graphics se usa con un sistema gráfico de modo inmediato. Cuando usas los comandos de dibujo de un objeto DrawingContext, realmente estás almacenando un conjunto de instrucciones de representación (aunque el mecanismo de almacenamiento exacto depende del tipo de objeto que proporciona el DrawingContext objeto) que el sistema de gráficos usará más adelante; no estás dibujando en la pantalla en tiempo real. Para obtener más información sobre cómo funciona el sistema de gráficos de Windows Presentation Foundation (WPF), consulte información general sobre la representación de gráficos de WPF.
Nunca creas directamente una instancia de DrawingContext; sin embargo, puedes adquirir un contexto de dibujo a partir de ciertos métodos, como DrawingGroup.Open y DrawingVisual.RenderOpen.
Enumerar el contenido de un objeto visual
Además de sus otros usos, Drawing los objetos también proporcionan un modelo de objetos para enumerar el contenido de .Visual
En el siguiente ejemplo se usa el método GetDrawing para recuperar el valor DrawingGroup de un Visual y enumerarlo.
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.
}
}
}
Consulte también
- Drawing
- DrawingGroup
- Imágenes y gráficos 2D
- Pintar con imágenes, dibujos y objetos visuales
- Información general sobre geometría
- Información general sobre formas y dibujo básico en WPF
- Información general sobre la representación de gráficos de WPF
- Introducción a los objetos Freezable
- Temas de procedimiento
.NET Desktop feedback