此示例演示如何设置 TileBrush的磁贴大小。 默认情况下,TileBrush 生成一个可完全填充要绘制区域的平铺。 可以通过设置 Viewport 和 ViewportUnits 属性来替代此行为。
Viewport 属性指定 TileBrush 的平铺大小。 默认情况下,Viewport 属性的值相对于所绘制区域的大小。 若要使 Viewport 属性指定绝对磁贴大小,请将 ViewportUnits 属性设置为 Absolute。
示例:
以下示例使用 ImageBrush(一种 TileBrush类型)绘制带有磁贴的矩形。 此示例将每个平铺设置为在长宽方向上分别占输出区域(矩形)的 50%。 因此,该矩形使用图像的四个投影绘制。
下图显示了示例生成的输出:
//
// Create an ImageBrush and set the size of each
// tile to 50% by 50% of the area being painted.
//
ImageBrush relativeTileSizeImageBrush = new ImageBrush();
relativeTileSizeImageBrush.ImageSource =
new BitmapImage(new Uri(@"sampleImages\cherries_larger.jpg", UriKind.Relative));
relativeTileSizeImageBrush.TileMode = TileMode.Tile;
// Specify the size of the base tile.
// By default, the size of the Viewport is
// relative to the area being painted,
// so a value of 0.5 indicates 50% of the output
// area.
relativeTileSizeImageBrush.Viewport = new Rect(0, 0, 0.5, 0.5);
// Create a rectangle and paint it with the ImageBrush.
Rectangle relativeTileSizeExampleRectangle = new Rectangle();
relativeTileSizeExampleRectangle.Width = 200;
relativeTileSizeExampleRectangle.Height = 150;
relativeTileSizeExampleRectangle.Stroke = Brushes.LimeGreen;
relativeTileSizeExampleRectangle.StrokeThickness = 1;
relativeTileSizeExampleRectangle.Fill = relativeTileSizeImageBrush;
下一个示例创建一个 ImageBrush,将其 Viewport 设置为 0,0,25,25
,并将其 ViewportUnits 设置为 Absolute,并使用它绘制另一个矩形。 因此,画笔生成宽度为 25 像素且高度为 25 像素的磁贴。
下图显示了示例生成的输出:
//
// Create an ImageBrush and set the size of each
// tile to 25 by 25 pixels.
//
ImageBrush absoluteTileSizeImageBrush = new ImageBrush();
absoluteTileSizeImageBrush.ImageSource =
new BitmapImage(new Uri(@"sampleImages\cherries_larger.jpg", UriKind.Relative));
absoluteTileSizeImageBrush.TileMode = TileMode.Tile;
// Specify that the Viewport is to be interpreted as
// an absolute value.
absoluteTileSizeImageBrush.ViewportUnits = BrushMappingMode.Absolute;
// Set the size of the base tile. Had we left ViewportUnits set
// to RelativeToBoundingBox (the default value),
// each tile would be 25 times the size of the area being
// painted. Because ViewportUnits is set to Absolute,
// the following line creates tiles that are 25 by 25 pixels.
absoluteTileSizeImageBrush.Viewport = new Rect(0, 0, 25, 25);
// Create a rectangle and paint it with the ImageBrush.
Rectangle absoluteTileSizeExampleRectangle = new Rectangle();
absoluteTileSizeExampleRectangle.Width = 200;
absoluteTileSizeExampleRectangle.Height = 150;
absoluteTileSizeExampleRectangle.Stroke = Brushes.LimeGreen;
absoluteTileSizeExampleRectangle.StrokeThickness = 1;
absoluteTileSizeExampleRectangle.Fill = absoluteTileSizeImageBrush;
前面的示例是较大示例的一部分。 有关完整示例,请参阅 ImageBrush 示例。
尽管此示例使用 ImageBrush 类,但 Viewport 和 ViewportUnits 属性与其他 TileBrush 对象的行为相同,即 DrawingBrush 和 VisualBrush。 有关 ImageBrush 和其他 TileBrush 对象的详细信息,请参阅使用图像、绘图和视觉对象进行绘制。
另请参阅
- TileBrush
- 使用图像、绘图和视觉对象进行绘制
- 使用 TileBrush 创建不同的磁贴模式