Общие сведения о преобразованиях объекта Brush
Класс Brush предоставляет два свойства для преобразований: Transform и Relative
Предварительные требования
Чтобы разобраться в этом разделе, пользователь должен понимать возможности преобразуемой кисти. Для Linear
Различия между свойствами Transform и RelativeTransform
При применении преобразования к кисти Transform свойство, необходимо знать размер закрашиваемой области, если вы хотите преобразовать содержимое кисти относительно ее центра. Предположим, что область рисования имеет ширину 200 аппаратно-независимых пикселей и высоту 150 пикселей. Если вы использовали Rotate
При применении преобразования к кисти Relative
Обработка содержимого кисти. Для Gradient
Brush , это означает определение области градиента. Для TileBrush , Viewbox сопоставляется Viewport. Это становится результатом работы кисти.Проекция результата работы кисти на прямоугольник преобразования 1 x 1.
Применение кисти Relative
Transform , если он имеется.Проекция преобразованного результата работы на закрашиваемую область.
Применение кисти Transform, если он имеется.
Так как Relative
На следующем рисунке показан результат выполнения нескольких кистей, повернутых на 45 градусов с помощью Relative

Использование RelativeTransform с TileBrush
Так как мозаичные кисти являются более сложные, чем другие, применение Relative

В следующем примере используется Image
<Rectangle Width="200" Height="100" Stroke="Black" StrokeThickness="1">
<Rectangle.Fill>
<ImageBrush Stretch="UniformToFill">
<ImageBrush.ImageSource>
<BitmapImage UriSource="sampleImages\square.jpg" />
</ImageBrush.ImageSource>
<ImageBrush.RelativeTransform>
<RotateTransform CenterX="0.5" CenterY="0.5" Angle="90" />
</ImageBrush.RelativeTransform>
</ImageBrush>
</Rectangle.Fill>
</Rectangle>
В этом примере выводятся следующие данные:

Обратите внимание на то, что изображение искажено, даже если кисти Stretch было присвоено Uniform
Проект содержимого кисти (Viewbox) на базовую плитку (Viewport) с помощью кисти Stretch параметр.

Проекция базового мозаичного элемента на прямоугольник преобразования 1 x 1.

Применить Rotate
Transform .
Проекция преобразованного базового мозаичного элемента на закрашиваемую область.

Пример Поворот ImageBrush на 45 градусов
В следующем примере применяется Rotate
//
// Create an ImageBrush with a relative transform and
// use it to paint a rectangle.
//
ImageBrush relativeTransformImageBrush = new ImageBrush();
relativeTransformImageBrush.ImageSource =
new BitmapImage(new Uri(@"sampleImages\pinkcherries.jpg", UriKind.Relative));
// Create a 45 rotate transform about the brush's center
// and apply it to the brush's RelativeTransform property.
RotateTransform aRotateTransform = new RotateTransform();
aRotateTransform.CenterX = 0.5;
aRotateTransform.CenterY = 0.5;
aRotateTransform.Angle = 45;
relativeTransformImageBrush.RelativeTransform = aRotateTransform;
// Use the brush to paint a rectangle.
Rectangle relativeTransformImageBrushRectangle = new Rectangle();
relativeTransformImageBrushRectangle.Width = 175;
relativeTransformImageBrushRectangle.Height = 90;
relativeTransformImageBrushRectangle.Stroke = Brushes.Black;
relativeTransformImageBrushRectangle.Fill = relativeTransformImageBrush;
<Rectangle Width="175" Height="90" Stroke="Black">
<Rectangle.Fill>
<ImageBrush ImageSource="sampleImages\pinkcherries.jpg">
<ImageBrush.RelativeTransform>
<RotateTransform CenterX="0.5" CenterY="0.5" Angle="45" />
</ImageBrush.RelativeTransform>
</ImageBrush>
</Rectangle.Fill>
</Rectangle>
В следующем примере также применяется Rotate
//
// Create an ImageBrush with a transform and
// use it to paint a rectangle.
//
ImageBrush transformImageBrush = new ImageBrush();
transformImageBrush.ImageSource =
new BitmapImage(new Uri(@"sampleImages\pinkcherries.jpg", UriKind.Relative));
// Create a 45 rotate transform about the brush's center
// and apply it to the brush's Transform property.
RotateTransform anotherRotateTransform = new RotateTransform();
anotherRotateTransform.CenterX = 87.5;
anotherRotateTransform.CenterY = 45;
anotherRotateTransform.Angle = 45;
transformImageBrush.Transform = anotherRotateTransform;
// Use the brush to paint a rectangle.
Rectangle transformImageBrushRectangle = new Rectangle();
transformImageBrushRectangle.Width = 175;
transformImageBrushRectangle.Height = 90;
transformImageBrushRectangle.Stroke = Brushes.Black;
transformImageBrushRectangle.Fill = transformImageBrush;
<Rectangle Width="175" Height="90" Stroke="Black">
<Rectangle.Fill>
<ImageBrush ImageSource="sampleImages\pinkcherries.jpg">
<ImageBrush.Transform>
<RotateTransform CenterX="87.5" CenterY="45" Angle="45" />
</ImageBrush.Transform>
</ImageBrush>
</Rectangle.Fill>
</Rectangle>
На следующем рисунке показана кисть без преобразования, с преобразованием, примененным к Relative

Данный пример является частью большого примера. Полный пример см. в разделе Пример использования кистей. Более подробные сведения о кистях см. в разделе Общие сведения о кистях WPF.