默认情况下,如果绘制ImageBrush区域的纵横比与图像不同,则拉伸其图像以完全填充要绘制的区域,从而扭曲图像。 可以通过Stretch将属性的Fill默认值更改为None来Uniform更改此行为。
<Canvas Height="200" Width="300"> <Canvas.Background> <ImageBrush ImageSource="sampleImages\Waterlilies.jpg" /> </Canvas.Background> </Canvas>
DrawingBrush使您能够使用形状、文本、图像和视频绘制区域。 下面是不同类型图形对象的列表。
-
GeometryDrawing• 绘制形状。
-
ImageDrawing• 绘制图像。
-
GlyphRunDrawing• 绘制文本。
-
VideoDrawing• 播放音频或视频文件。
-
DrawingGroup• 绘制其他绘图。 使用图形组将其他图形合并到单个复合图形。
<Button Content="A Button"> <Button.Background> <DrawingBrush> <DrawingBrush.Drawing> <GeometryDrawing Brush="LightBlue"> <GeometryDrawing.Geometry> <GeometryGroup> <EllipseGeometry RadiusX="12.5" RadiusY="25" Center="25,50" /> <EllipseGeometry RadiusX="12.5" RadiusY="25" Center="50,50" /> <EllipseGeometry RadiusX="12.5" RadiusY="25" Center="75,50" /> </GeometryGroup> </GeometryDrawing.Geometry> <GeometryDrawing.Pen> <Pen Thickness="1" Brush="Gray" /> </GeometryDrawing.Pen> </GeometryDrawing> </DrawingBrush.Drawing> </DrawingBrush> </Button.Background> </Button>
TileBrush可对图像、绘图或视觉对象绘制区域的方式进行大量控制。 例如,不使用单个拉伸图像绘制区域,而是使用创建图案的一系列平铺图像绘制区域。
Viewport确定基本磁贴的大小和位置,ViewportUnits该属性确定是使用绝对坐标还是相对坐标
在下面的示例中,使用一幅图像来创建一个宽度和高度均为 50% 的图块。 基本图块位于输出区域的 (0,0) 处。
<Rectangle Width="50" Height="100"> <Rectangle.Fill> <!-- Paints an area with 4 tiles. --> <ImageBrush ImageSource="sampleImages\cherries_larger.jpg" Viewport="0,0,0.5,0.5" ViewportUnits="RelativeToBoundingBox" TileMode="Tile" /> </Rectangle.Fill> </Rectangle>
下一个示例将 ImageBrush的切片设置为 25 x 25 个独立于设备的像素。
<Rectangle Width="50" Height="100"> <Rectangle.Fill> <!-- Paints an area with 25 x 25 tiles. --> <ImageBrush ImageSource="sampleImages\cherries_larger.jpg" Viewport="0,0,25,25" ViewportUnits="Absolute" TileMode="Tile" /> </Rectangle.Fill> </Rectangle>