Silverlight 圖形:變換

您可以在 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 使用行優先矩陣。矢量用行矢量(而不是列矢量)表示。

 


  下表顯示了 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 旋轉元素。Silverlight 圖形:變換
  ScaleTransform  按指定的 ScaleX 和 ScaleY 量按比例縮放元素。Silverlight 圖形:變換
  SkewTransform  按指定的 AngleX 和 AngleY 量扭曲元素。Silverlight 圖形:變換
  TranslateTransform  按指定的 X 和 Y 量移動(平移)元素。Silverlight 圖形:變換

 


  爲了創建更復雜的變換,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 度的矩形元素


Silverlight 圖形:變換


  默認情況下,元素將圍繞其左上角 (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 度的矩形元素


Silverlight 圖形:變換


  對變換進行動畫處理


  可以對 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> 
 


  VB


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。例如,您可以製造這樣一個假象,即對象朝向您或遠離您進行旋轉,如下圖中所示。


  使用透視轉換的圖像


Silverlight 圖形:變換

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章