Как установить размер мозаики для TileBrush
В этом примере показано, как задать размер мозаики для TileBrush. По умолчанию кисть TileBrush создает один фрагмент мозаики, который полностью заполняет область закрашивания. Такое поведение можно переопределить, задав свойства Viewport и ViewportUnits.
Свойство Viewport задает размер мозаики для TileBrush. По умолчанию значение свойства Viewport задается относительно размера закрашиваемой области. Чтобы свойство Viewport определяло размер в абсолютных значениях, задайте для свойства ViewportUnits значение Absolute.
Пример
В следующем примере используется кисть ImageBrush (разновидность кисти TileBrush) для заполнения прямоугольника мозаикой. В примере для фрагмента мозаики задаются размеры 50 % на 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, задается значение 0,0,25,25
для ее свойства Viewportи значение Absolute для свойства ViewportUnits, после чего эта кисть используется для закрашивания другого прямоугольника. В результате кисть создает мозаику размером 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, но свойства Viewport и ViewportUnits работают так же и с другими объектами TileBrush, то есть с кистями DrawingBrush и VisualBrush. Дополнительную информацию о классе ImageBrush и о других объектах TileBrush см. в разделе Рисование с использованием изображений, рисунков и визуальных элементов.
См. также
.NET Desktop feedback