- •А.А. Волосевич
- •Содержание
- •2. Простейшее приложение wpf
- •4. Базовые концепции wpf
- •4.1. Иерархия классов
- •4.2. Свойства зависимостей и присоединённые свойства
- •4.3. Маршрутизируемые события
- •4.4. Многопоточность в wpf
- •5. Варианты организации приложений wpf
- •5.1. Класс Window
- •5.2. Класс Application
- •5.3. Приложения на основе страниц
- •5.4. Приложения xbap
- •5.5. Работа с панелью задач Windows 7
- •6. Компоновка
- •6.1. Размер и выравнивание
- •6.2. Встроенные контейнеры компоновки
- •6.3. Прокрутка и декорирование содержимого
- •7. Обзор элементов управления wpf
- •3. Цвета и окантовка.
- •4. Шрифт содержимого.
- •7.1. Элементы управления содержимым
- •7.2. Списковые элементы управления
- •7.3. Прочие элементы управления
- •8. Ресурсы
- •8.1. Двоичные ресурсы
- •8.2. Логические ресурсы
- •9. Привязка данных
- •9.1. Базовые концепции привязки данных
- •9.2. Источники и поставщики данных
- •9.3. Обновление данных и направление привязки
- •9.4. Конвертеры значений
- •9.5. Проверка данных
- •10. Работа с графикой
- •10.1. Представление цвета в wpf
- •10.2. Кисти
- •10.3. Трансформации
- •10.4. Эффекты
- •10.5. Прозрачность
- •10.6. Фигуры
- •11. Стили и триггеры
- •12. Шаблоны
- •12.1. Шаблоны элементов управления
- •12.2. Шаблоны данных
- •Литература
10.3. Трансформации
Трансформация – это заданное изменение координатной системы, в которой отображается элемент. Описание таких трансформаций на плоскости, как масштабирование, отражение и поворот, можно выполнить в терминах числовых матриц размером 2х2. Чтобы представить в матричной форме операцию сдвига координатной системы, используют однородные координаты.
Однородными координатами точки (x, y) является тройка вида (x, y, 1). Если дана тройка чисел (a, b, c), соответствующая точка в однородных координатах находится после применения нормировки – деления на c: (a/c, b/c, 1). Тройки (a, b, 0) описывают в однородных координатах бесконечно удалённую точку.
В терминах однородных координат основные трансформации можно выразить следующим образом:
1. Масштабирование (включая отражения): .
2. Поворот на угол φ: .
3. Сдвиг: .
Комбинация трансформаций выполняется как умножение матриц.
В WPF трансформации представлены классами, унаследованными от абстрактного класса System.Windows.Media.Transform. Набор предопределённых трансформаций перечислен в табл. 6.
Таблица 6
Классы трансформаций
Имя класса |
Описание |
Важные свойства |
TranslateTransform |
Смещает координатную систему на указанную величину |
X, Y |
RotateTransform |
Поворачивает координатную систему вокруг заданной точки |
Angle, CenterX, CenterY |
ScaleTransform |
Масштабирует координатную систему. Можно применять разную степень масштабирования по измерениям X и Y |
ScaleX, ScaleY, CenterX, CenterY |
SkewTransform |
Деформирует координатную систему, наклоняя её оси на заданное число градусов |
AngleX, AngleY, CenterX, CenterY |
MatrixTransform |
Выполняет трансформацию, используя указанную матрицу вида |
Matrix |
TransformGroup |
Комбинирует несколько трансформаций. Порядок трансформаций имеет значение |
Children |
Укажем некоторые способы задания трансформаций:
1. Класс UIElement определяет свойства RenderTransform и RenderTransformOrigin. RenderTransform – это трансформация, выполняемая после процесса компоновки непосредственно перед отображением элемента. RenderTransformOrigin задаёт стартовую (неподвижную) точку трансформации. По умолчанию это точка имеет координаты (0, 0) (координаты точки относительные, в терминах виртуального ограничивающего прямоугольника).
2. Класс FrameworkElement содержит свойство LayoutTransform для трансформации, применяемой до процесса компоновки.
3. Класс Brush имеет свойства RelativeTransform и Transform, позволяющие выполнить трансформацию кисти до и после её применения.
Следующий пример демонстрирует использование трансформаций.
<StackPanel Orientation="Horizontal">
<Button Height="40" Width="70" Content="Translate">
<Button.RenderTransform>
<TranslateTransform X="10" Y="-10"/>
</Button.RenderTransform>
</Button>
<Button Height="40" Width="70" Content="Rotate">
<Button.LayoutTransform>
<RotateTransform Angle="-45" />
</Button.LayoutTransform>
</Button>
<Button Height="40" Width="70" Content="Scale">
<Button.LayoutTransform>
<ScaleTransform ScaleX="-1" ScaleY="1.5" />
</Button.LayoutTransform>
</Button>
<Button Height="40" Width="70" Content="Skew">
<Button.RenderTransform>
<SkewTransform AngleX="20" AngleY="0" />
</Button.RenderTransform>
</Button>
<Button Height="40" Width="70" Content="Matrix">
<Button.LayoutTransform>
<MatrixTransform Matrix="1,0.5,1,-1,20,10" />
</Button.LayoutTransform>
</Button>
</StackPanel>
Рис. 32. Кнопки, подвергшиеся трансформации.