本主题介绍如何使用 ImageBrush、DrawingBrush 和 VisualBrush 对象通过图像、Drawing 或 Visual 绘制区域。
先决条件要了解本主题,应熟悉 Windows Presentation Foundation (WPF) 提供的不同画笔类型及其基本功能。 有关介绍,请参阅 WPF 画笔概述。
在区域内画上图像ImageBrush 使用 ImageSource 绘制区域。 和 ImageBrush 一起最常使用的 ImageSource 类型是描述位图图形的 BitmapImage。 可以使用 DrawingImage 通过 Drawing 对象进行绘制,但是改用 DrawingBrush 会更简单。 有关 ImageSource 对象的详细信息,请参阅图像处理概述。
要使用 ImageBrush 进行绘制,请创建 BitmapImage 并将其加载到位图内容。 然后,使用 BitmapImage 设置 ImageBrush 的 ImageSource 属性。 最后,将 ImageBrush 应用到想绘制的对象。 在 Extensible Application Markup Language (XAML) 中,还可以使用要加载图像的路径设置 ImageBrush 的 ImageSource 属性。
像所有的 Brush 对象一样,ImageBrush 可用于绘制形状、面板、控件和文本等对象。 下图显示了可以通过 ImageBrush 达到的一些效果。
使用 ImageBrush 绘制的对象
默认情况下,ImageBrush 将图像拉伸至可以完全填充所绘制的区域,如果绘制区域的纵横比与图像不同,很可能会扭曲图像。 可以通过将 Stretch 属性从其默认值 Fill 更改为 None、Uniform 或 UniformToFill 来更改此行为。 因为 ImageBrush 是一种 TileBrush,可以确切指定图像画笔如何填充输出区域,甚至创建图案。 有关高级 TileBrush 功能的详细信息,请参阅 TileBrush 概述。
示例:用位图图像绘制对象以下示例使用 ImageBrush 来绘制 Canvas 的 Background。
using System;using System.Windows;using System.Windows.Controls;using System.Windows.Media;using System.Windows.Media.Imaging;namespace Microsoft.Samples.BrushExamples{public class ImageBrushExample : Page{public ImageBrushExample(){StackPanel mainPanel = new StackPanel();canvasBackgroundExample(mainPanel);this.Content = mainPanel;}private void canvasBackgroundExample(Panel mainPanel){BitmapImage theImage = new BitmapImage(new Uri("sampleImages\\Waterlilies.jpg", UriKind.Relative));ImageBrush myImageBrush = new ImageBrush(theImage);Canvas myCanvas = new Canvas();myCanvas.Width = 300;myCanvas.Height = 200;myCanvas.Background = myImageBrush;mainPanel.Children.Add(myCanvas);}}}Imports System.WindowsImports System.Windows.ControlsImports System.Windows.MediaImports System.Windows.Media.ImagingNamespace Microsoft.Samples.BrushExamplesPublic Class ImageBrushExampleInherits PagePublic Sub New()Dim mainPanel As New StackPanel()canvasBackgroundExample(mainPanel)Me.Content = mainPanelEnd SubPrivate Sub canvasBackgroundExample(ByVal mainPanel As Panel)Dim theImage As New BitmapImage(New Uri("sampleImages\Waterlilies.jpg", UriKind.Relative))Dim myImageBrush As New ImageBrush(theImage)Dim myCanvas As New Canvas()myCanvas.Width = 300myCanvas.Height = 200myCanvas.Background = myImageBrushmainPanel.Children.Add(myCanvas)End SubEnd ClassEnd Namespace在区域内画上绘图DrawingBrush 支持使用形状、文本、图像和视频绘制区域。 图形画笔内部的形状可使用纯色、渐变、图像甚至另一个 DrawingBrush 进行绘制。 下图展示了 DrawingBrush 的一些用法。
使用 DrawingBrush 绘制的对象
DrawingBrush 使用 Drawing 对象绘制区域。 Drawing 对象描述可见内容,如形状、位图、视频或文本行。 不同类型的图形描述不同类型的内容。 下面是不同类型图形对象的列表。
GeometryDrawing - 绘制形状。
ImageDrawing - 绘制图像。
GlyphRunDrawing - 绘制文本。
VideoDrawing - 播放音频或视频文件。
DrawingGroup - 绘制其他图形。 使用绘图组将其他绘图合并到单个复合绘图。
有关 Drawing 对象的详细信息,请参阅绘制对象概述。
与 ImageBrush 一样,DrawingBrush 会拉伸其 Drawing 以填充其输出区域。 可以通过更改 Stretch 属性的默认设置 Fill 来替代此行为。 有关