RotateTransform 類別
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
在二維 x-y 座標系中,將物體繞著指定點旋轉。
public ref class RotateTransform sealed : Transform
/// [Windows.Foundation.Metadata.Activatable(65536, "Microsoft.UI.Xaml.WinUIContract")]
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.UI.Xaml.WinUIContract, 65536)]
/// [Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
/// [Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
class RotateTransform final : Transform
[Windows.Foundation.Metadata.Activatable(65536, "Microsoft.UI.Xaml.WinUIContract")]
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.UI.Xaml.WinUIContract), 65536)]
[Windows.Foundation.Metadata.MarshalingBehavior(Windows.Foundation.Metadata.MarshalingType.Agile)]
[Windows.Foundation.Metadata.Threading(Windows.Foundation.Metadata.ThreadingModel.Both)]
public sealed class RotateTransform : Transform
Public NotInheritable Class RotateTransform
Inherits Transform
<RotateTransform .../>
- 繼承
- 屬性
範例
轉換可以改變應用程式中文字的顯示,創造裝飾效果。 這個範例展示了使用 RotateTransform 將文字旋轉 90 度。
這個範例使用 RotateTransform 來旋轉文字。 角度值為 90 時,元件順時針旋轉 90 度。
<!-- Rotate the text 90 degrees using a RotateTransform. -->
<TextBlock Text="Rotated Text" FontSize="32" Foreground="Teal">
<TextBlock.RenderTransform>
<RotateTransform Angle="90" />
</TextBlock.RenderTransform>
</TextBlock>
備註
旋轉變換定義為一個 角度 ,使物體繞著 中心X( CenterY)繞著弧線旋轉。
若施加的 角度 值為正,則施加的旋轉方向為順時針方向。 使用負 角度 值是合法的,這會導致旋轉逆時針。 對於小於 –360 或大於 360 的值,這些值會環繞並被視為已應用數學運算 mod(360) 。
要原地旋轉,請將 CenterX, CenterY 設為預設(0,0)。 如果你不想原地旋轉,而是想繞著變換參考系中的某一點旋轉,可以使用非預設的 CenterX, CenterY 。 舉例來說,你可以模擬一個軌道。
通常會用 Transform 來填充 UIElement.RenderTransform 屬性,以改變元素的渲染方式。 UIElement 也有 UIElement.RenderTransformOrigin 屬性,預設為 (0,0)。 RenderTransformOrigin 建立所有變換(包括 RotateTransform)如何套用的座標參考系。 RotateTransform 常見的情境是將物件繞中心旋轉(無論是動畫或一次性變換)。 預設的 UIElement.RenderTransformOrigin 設為 (0,0) 時,物件不會繞中心旋轉,而是繞著包圍框的左上角旋轉。 因此,讓物件繞中心旋轉的常見方法是將 CenterX, CenterY 設為 (0,0),但將 UIElement.RenderTransformOrigin 設為邏輯 點 ,該點的值為 (0.5,0.5)。 依照邏輯點慣例,UIElement.RenderTransformOrigin 會放在物件的中心點,換句話說,(x,y) 正好是 ActualHeight 和 ActualWidth 值的一半。
UIElement.RenderTransformOrigin 採用邏輯點慣例; CenterX 和 CenterY 不使用這種慣例,而是使用實際的像素值。
物件的渲染位置可以在 畫布 上使用 Canvas.Left 和 Canvas.Top 進行偏移,但這不算作轉換;當物件被放置在 畫布中時,仍保有其本地(0,0)原點。
還有其他屬性和關係會影響旋轉的呈現方式。 如果使用 TransformGroup 套用多個轉換,順序很重要。 轉換依照 TransformCollection 中出現的順序套用。 尤其是如果其中一個變換是 TranslateTransform,你可能得改變順序才能得到你想要的旋轉效果。
對同一物件套用多種轉換有三種方法:
- 使用 TransformGroup,你可以指定每個轉換的順序。
- 使用複合 轉換,每個轉換皆由共用 變換 物件的特性啟用,轉換以固定且已知的順序套用。
- 使用 MatrixTransform,將控制 3×3 矩陣的各種屬性設定成一個 Transform 的典型分類。 除非你用設計工具來設定數值,否則這大概是最進階的技巧。
動畫化旋轉 變形
你可以對 RotateTransform 套用動畫,讓元素隨時間旋轉。 通常你只會把動畫套用到 Angle 屬性,不會做 CenterX 動畫,而是 CenterY。 對於持續旋轉的動畫,通常只用 To 值來做 From/To/By 風格的動畫。 角度 是 雙重 ,因此涉及雙 重動畫。 如果要做連續動畫,你要把 DoubleAnimation 的 RepeatBehavior 設為 Forever。
<Page.Resources>
<Storyboard x:Name="spinrect">
<DoubleAnimation To="360" RepeatBehavior="Forever"
Storyboard.TargetName="spinme"
Storyboard.TargetProperty="(UIElement.RenderTransform).(RotateTransform.Angle)" />
</Storyboard>
</Page.Resources>
<StackPanel>
<Rectangle Name="spinme" Width="50" Height="50" Fill="Red" RenderTransformOrigin=".5,.5"
PointerPressed="spinme_PointerPressed">
<Rectangle.RenderTransform>
<RotateTransform/>
</Rectangle.RenderTransform>
</Rectangle>
</StackPanel>
private void spinme_PointerPressed(object sender, PointerRoutedEventArgs e)
{
spinrect.Begin();
}
建構函式
| 名稱 | Description |
|---|---|
| RotateTransform() |
初始化一個新的 RotateTransform 類別實例。 |
屬性
| 名稱 | Description |
|---|---|
| Angle |
取得或設定順時針旋轉的角度(度數)。 |
| AngleProperty |
識別 角度依賴性質 。 |
| CenterX |
取得或設定此轉換旋轉中心點的 x 座標。 |
| CenterXProperty |
識別 CenterX 相依屬性。 |
| CenterY |
取得或設定此轉換旋轉中心點的 y 座標。 |
| CenterYProperty |
識別 CenterY 依賴屬性。 |
| Dispatcher |
它總是在 Windows 應用程式 SDK 應用程式中回傳 |
| DispatcherQueue |
得到 |
| Inverse |
如果可能,會得到此 GeneralTransform 的反轉換。 (繼承來源 GeneralTransform) |
| InverseCore |
實作在衍生或自訂的 GeneralTransform 中,對 Inverse 的回傳值行為。 (繼承來源 GeneralTransform) |