語言

RotateTransform 類別

定義

在二維 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 .../>
繼承
Object Platform::Object IInspectable DependencyObject GeneralTransform 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 應用程式中回傳 null 。 改用 DispatcherQueue 。

(繼承來源 DependencyObject)
DispatcherQueue

得到 DispatcherQueue 這個物件所關聯的那個。 代表 DispatcherQueue 一個功能,即使程式碼是由非 UI 執行緒發起,也能存取 UI DependencyObject 執行緒。

(繼承來源 DependencyObject)
Inverse

如果可能,會得到此 GeneralTransform 的反轉換。

(繼承來源 GeneralTransform)
InverseCore

實作在衍生或自訂的 GeneralTransform 中,對 Inverse 的回傳值行為。

(繼承來源 GeneralTransform)

方法

名稱 Description
ClearValue(DependencyProperty)

清除依賴性財產的局部價值。

(繼承來源 DependencyObject)
GetAnimationBaseValue(DependencyProperty)

回傳任何為相依屬性建立的基礎值,適用於動畫未啟用時。

(繼承來源 DependencyObject)
GetValue(DependencyProperty)

回傳 DependencyObject 中相依屬性的當前有效值。

(繼承來源 DependencyObject)
ReadLocalValue(DependencyProperty)

若設定了本地值,則回傳依賴性質的局部值。

(繼承來源 DependencyObject)
RegisterPropertyChangedCallback(DependencyProperty, DependencyPropertyChangedCallback)

註冊一個通知函式,用於監聽此 DependencyObject 實例中特定 DependencyProperty 的變更。

(繼承來源 DependencyObject)
SetValue(DependencyProperty, Object)

將相依屬性的局部值設定在 DependencyObject 上。

(繼承來源 DependencyObject)
TransformBounds(Rect)

轉換指定的邊界盒,並回傳一個軸向對齊的邊界盒,且大小剛好足夠容納該包圍盒。

(繼承來源 GeneralTransform)
TransformBoundsCore(Rect)

提供覆蓋衍生轉換類別中 TransformBounds 行為的方法。

(繼承來源 GeneralTransform)
TransformPoint(Point)

利用此轉換物件的邏輯轉換指定點,並回傳結果。

(繼承來源 GeneralTransform)
TryTransform(Point, Point)

嘗試轉換指定點,並回傳一個表示轉換是否成功的值。

(繼承來源 GeneralTransform)
TryTransformCore(Point, Point)

提供覆蓋衍生轉換類別中 TryTransform 行為的方法。

(繼承來源 GeneralTransform)
UnregisterPropertyChangedCallback(DependencyProperty, Int64)

取消先前透過呼叫 RegisterPropertyChangedCallback 註冊的變更通知。

(繼承來源 DependencyObject)

適用於

另請參閱