Transformations
Support for high-resolution displays is an important feature of WPF. This is enabled in part by the emphasis on the use of scalable vector graphics rather than bitmaps. But as experience with GDI+ and GDI32 has shown, if scalability is not integrated completely into the graphics architecture, resolution independence is very hard to achieve consistently in practice.
WPF's support for scaling is built in at a fundamental level. Any element in the user interface can have a transformation applied, making it easy to scale or rotate anything in the user interface.
As we saw in Chapter 3, all user interface
elements have RenderTransform and
LayoutTransform properties. These are
of type Transform, which is an
abstract base class. There are derived classes implementing various
affine transformations,[95] listed in Table 13-8.
Table 13-8. Transform types
Transform class | Usage |
|---|---|
| General-purpose transform based on 3 × 3 matrix |
| Rotates around a point |
| Scales in x and/or y |
| Shears (e.g., converts a square into a rhombus) |
| Combines several transforms into one |
| Moves items by a specified vector |
Most of these are just convenience classes—you can represent all
supported transformations by the MatrixTransform class. This contains a 3 × 3
matrix, allowing any affine transformation to be used. However, the
other transform types are often easier to work with than the set of
numbers in a matrix.