布局系統
在WPF中,許多繪圖任務通過使用變換(transform)可以變得更加簡單——變換是通過不加通告地切換形狀或元素使用的坐標系統來改變形狀或元素繪制方式的對象。在WPF中,變換的一些類大多繼承自System.Windows.Media.Trandform。下面是這些類的列表:
- TranslateTransform:將坐標系統移動一定的距離。
- RolateTransform:旋轉坐標系統。
- ScaleTransform:放大或最小坐標系統。
- SkewTransform:通過傾斜一定的角度扭曲坐標系統。
- MatrixTransform:使用提供的矩陣的乘積修改坐標系統。
- TransfromGroup:組合多個變換。
變換形狀
為了變換形狀,將RenderTransform屬性指定為希望使用的變換對象,根據使用的變換對象,需要填充不同的屬性以配置變換對象,也就是我們上面列舉的一些類。 列如:
1 <Button Content="I AM Rotated 35" Width="100"> 2 <Button.RenderTransform> 3 <RotateTransform Angle="35"></RotateTransform> 4 </Button.RenderTransform> 5 </Button>
這里我們將按鈕旋轉了35度。但是RenderTransform不是在WPF積累中定義的唯一與變換相關的屬性。FrameworkElement類還定義了一個LayoutTransform屬性。LayoutTransform屬性以相同的方式變換元素,但它是在布局之前執行工作,開銷比RenderTransform要大,那么我們看一下兩者的區別:
1 <Grid> 2 <Grid.RowDefinitions> 3 <RowDefinition/> 4 <RowDefinition/> 5 </Grid.RowDefinitions> 6 <StackPanel> 7 <Button Content="I AM Rotated 35" Width="100"> 8 <Button.RenderTransform> 9 <RotateTransform Angle="35"></RotateTransform> 10 </Button.RenderTransform> 11 </Button> 12 <Button>I am not</Button> 13 </StackPanel> 14 15 <StackPanel Grid.Row="1"> 16 <Button Content="I AM Rotated 35" Width="100"> 17 <Button.LayoutTransform> 18 <RotateTransform Angle="35"></RotateTransform> 19 </Button.LayoutTransform> 20 </Button> 21 <Button>I am not</Button> 22 </StackPanel> 23 </Grid>
該窗口包含兩個StackPanel,分別都有兩個按鈕,一個使用了RenderTransform屬性,另一個使用LayoutTransform,第一個StackPanel對兩個按鈕進行布局時,第一個按鈕正常定位,並且在即將呈現之前旋轉改按鈕。因此旋轉過的按鈕被重疊在下面。而第二個StackPanel容器中,第一個按鈕在呈現之后才進行旋轉,也就是LayoutTransform在布局之前執行其工作。看一下效果:
可以看出WPF在對圖形渲染方面的支持。