您可以在 Silverlight 中使用二維 (2-D) Transform
類來旋轉、按比例縮放、扭曲和移動(平移)對象。下面的示例應用了可以旋轉和扭曲一行文本的變換。
XAML
<StackPanel>
<TextBlock FontSize="28" Text="Hello">
<TextBlock.RenderTransform>
<TransformGroup>
<RotateTransform Angle="45" />
<SkewTransform CenterX="0" CenterY="0" AngleX="60"/>
</TransformGroup>
</TextBlock.RenderTransform>
</TextBlock>
</StackPanel>
什麼是變換?
Transform 定義如何將一個座標空間中的點映射或變換到另一個座標空間。此映射由變換 Matrix(一個三行三列的 Double
值集合)來描述。
說明: |
Silverlight 使用行優先矩陣。矢量用行矢量(而不是列矢量)表示。 |
下表顯示了 Silverlight 矩陣的結構。
M11
默認值:1.0 | M12
默認值:0.0 | 0.0 |
M21
默認值:0.0 | M22
默認值:1.0 | 0.0 |
OffsetX
默認值:0.0 | OffsetY
默認值:0.0 | 1.0 |
通過處理矩陣值,您可以旋轉、按比例縮放、扭曲和移動(平移)對象。例如,如果將第三行第一列中的值(OffsetX 值)更改爲 100,則可以將某一對象沿
x 軸移動 100 個單位。如果將第二行第二列中的值更改爲 3,您可以將某一對象拉伸爲其當前高度的三倍。如果同時更改兩個值,則可將對象沿 x 軸移動 100
個單位並將其高度拉伸爲原來的 3 倍。由於 Silverlight 僅支持仿射變換,因此右列中的值始終爲 0、0、1。
儘管 Silverlight 使您能夠直接處理矩陣值,但它還提供了許多 Transform
類,您可以使用這些類來變換對象,而無需瞭解基礎矩陣結構的配置方式。例如,利用 ScaleTransform 類,您可以通過設置對象的 ScaleX 和
ScaleY 屬性來按比例縮放對象,而不用處理變換矩陣。同樣,利用 RotateTransform 類,您只需通過設置對象的 Angle
屬性即可旋轉對象。
變換類
Silverlight 爲常見變換操作提供了以下二維 Transform 類。
類 | 說明 | Illustration |
RotateTransform | 按指定的 Angle 旋轉元素。 | |
ScaleTransform | 按指定的 ScaleX 和 ScaleY 量按比例縮放元素。 | |
SkewTransform | 按指定的 AngleX 和 AngleY 量扭曲元素。 | |
TranslateTransform | 按指定的 X 和 Y 量移動(平移)元素。 |
爲了創建更復雜的變換,Silverlight 提供瞭如下兩個類。
類 | 說明 |
TransformGroup | 將多個 TransformGroup 對象組合爲可以隨後應用於變換屬性的單一 Transform。 |
MatrixTransform | 創建其他 Transform 類未提供的自定義變換。在使用 MatrixTransform 時,將直接處理矩陣。 |
常見變換屬性
變換對象的一種方法是聲明適當的 Transform 類型,並將其應用於對象的變換屬性。不同類型的對象具有不同類型的變換屬性。下表列出了若干常用的
Silverlight 類型及其變換屬性。
類型 | 變換屬性 |
Brush | Transform,RelativeTransform |
Geometry | Transform |
UIElement | RenderTransform |
變換和座標系
在變換對象時,您不僅僅是變換對象,您變換的是對象所在的座標系。默認情況下,變換將以目標對象座標系的原點 (0,0) 爲中心進行。唯一的例外是
TranslateTransform,該對象沒有要設置的中心屬性,因爲不管以何處爲中心,平移效果都相同。
下面的示例使用 RotateTransform,圍繞其默認中心 (0, 0) 將 Rectangle 元素(一種 UIElement)旋轉 45
度。
XAML
<Grid x:Name="LayoutRoot" Background="White">
<Rectangle Width="50" Height="50"
Fill="RoyalBlue">
<Rectangle.RenderTransform>
<RotateTransform Angle="45" />
</Rectangle.RenderTransform>
</Rectangle>
</Grid>
下圖顯示了旋轉的效果。
圍繞點 (0,0) 旋轉 45 度的矩形元素
默認情況下,元素將圍繞其左上角 (0, 0) 旋轉。RotateTransform、ScaleTransform 和 SkewTransform
類提供 CenterX 和 CenterY 屬性,可以利用這些屬性來指定變換的應用點。
下一個示例也使用 RotateTransform 將 Rectangle 元素旋轉 45 度;但是,這一次設置了 CenterX 和 CenterY
屬性,因此 RotateTransform 的中心爲 (25, 25)。
XAML
<StackPanel>
<Rectangle Width="50" Height="50" Fill="RoyalBlue">
<Rectangle.RenderTransform>
<RotateTransform Angle="45" CenterX="25" CenterY="25" />
</Rectangle.RenderTransform>
</Rectangle>
</StackPanel>
圍繞點 (25,25) 旋轉 45 度的矩形元素
對變換進行動畫處理
可以對 Transform 對象進行動畫處理。若要對 Transform 進行動畫處理,請將類型兼容的動畫應用於想要進行動畫處理的屬性。
下面的示例將 Storyboard 和 DoubleAnimation 與 RotateTransform 一起使用,以便使 Rectangle
旋轉到位。
XAML
<StackPanel Margin="15">
<StackPanel.Resources>
<Storyboard x:Name="myStoryboard">
<DoubleAnimation
Storyboard.TargetName="myTransform"
Storyboard.TargetProperty="Angle"
From="0" To="360" Duration="0:0:5"
RepeatBehavior="Forever" />
</Storyboard>
</StackPanel.Resources>
<Rectangle Width="50" Height="50" Fill="RoyalBlue"
MouseLeftButtonDown="StartAnimation">
<Rectangle.RenderTransform>
<RotateTransform x:Name="myTransform" Angle="45" CenterX="25" CenterY="25" />
</Rectangle.RenderTransform>
</Rectangle>
</StackPanel>
Private Sub StartAnimation(ByVal sender As Object, ByVal e As MouseEventArgs)
myStoryboard.Begin()
End Sub
交互式變換
可以使用代碼訪問和操作 Transform 對象。實現這個目標的一種方法是命名 Transform,然後使用代碼訪問。下面的示例演示每次單擊
Rectangle 時,如何增加應用於 Rectangle 的 ScaleTransform 的 ScaleX 和 ScaleY 屬性值。
XAML
<StackPanel>
<Rectangle MouseLeftButtonDown="HandleMouseButtonDown"
Width="50" Height="50" Fill="RoyalBlue">
<Rectangle.RenderTransform>
<!-- If you give the transform a name you can
Access it easily from code. -->
<ScaleTransform x:Name="myScaleTransform" />
</Rectangle.RenderTransform>
</Rectangle>
</StackPanel>
VB
Private Sub HandleMouseButtonDown(ByVal sender As Object, ByVal e As MouseButtonEventArgs)
' Increase ScaleX and ScaleY by 25%.
myScaleTransform.ScaleX = (myScaleTransform.ScaleX * 1.25)
myScaleTransform.ScaleY = (myScaleTransform.ScaleY * 1.25)
End Sub
三維轉換
您可以使用"透視轉換"來將三維效果應用於任何 Silverlight
UIElement。例如,您可以製造這樣一個假象,即對象朝向您或遠離您進行旋轉,如下圖中所示。
使用透視轉換的圖像