Brush


默认情况下,如果绘制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>
    
    <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>
    
    <ImageBrush ImageSource="sampleImages\cherries_larger.jpg"
      Viewport="0,0,25,25"
      ViewportUnits="Absolute" 
      TileMode="Tile" />
  Rectangle.Fill>
Rectangle>
WPF