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>
備註
RotateTransform 是由 Angle 所定義,該 Angle 會透過點 CenterX CenterY 周圍的弧線旋轉物件。
如果套用 的 Angle 值為正數,則套用的旋轉方向為順時針方向。 使用負數 的 Angle 值是合法的,這會導致旋轉反時針。 對於小於 –360 或大於 360 的值,這些值會包裝並視為套用數學運算 mod(360)
。
若要就地旋轉,請將 CenterX、 CenterY 保留為預設 (0,0) 。 如果您不想就地旋轉,而想要在轉換的參照框架中繞著某個點旋轉,您可以使用非預設 CenterXCenterY 。 例如,您可以模擬軌道。
轉換通常用於填滿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 位移,但這不算為轉換;當對象位於 Canvas 中時,物件會保留自己的本機 (0,0) 原點。
還有其他屬性和關聯性會影響旋轉的顯示方式。 如果使用 TransformGroup 套用多個轉換,則順序很重要。 轉換會依 其出現在 TransformCollection 的順序套用。 特別是如果其中一個轉換是 TranslateTransform,您可能必須改變順序來取得您想要的旋轉效果。
有三種方式可將多個轉換套用至相同的物件:
- 使用 TransformGroup,您可以在其中指定每個轉換套用的順序。
- 使用 CompositeTransform,其中每個轉換都是由共用 Transform 對象的屬性啟用,而轉換會以固定的已知順序套用。
- 使用 MatrixTransform,您可以在其中設定控制 3×3 矩陣的各種屬性,讓您將轉換的一般分類結合成一個 轉換。 除非您使用設計工具來協助設定值,否則這可能是最進階的技術。
建立 RotateTransform 的動畫
您可以將動畫套用至 RotateTransform,以讓元素隨著時間旋轉。 一般而言,您只會將動畫套用至 Angle 屬性,而且不會讓 CenterX、 CenterY 產生動畫效果。 針對持續旋轉的動畫,您通常會只針對From/To/By 樣式動畫使用To值。 Angle 是 Double ,因此這牽涉到 DoubleAnimation。 針對連續動畫,您將 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();
}
建構函式
RotateTransform() |
初始化 RotateTransform 類別的新實例。 |
屬性
Angle |
取得或設定順時針旋轉的角度 (以度為單位)。 |
AngleProperty |
識別 Angle 相依性屬性。 |
CenterX |
取得或設定這個轉換旋轉中心點的 X 座標。 |
CenterXProperty |
識別 CenterX 相依性屬性。 |
CenterY |
取得或設定這個轉換旋轉中心點的 Y 座標。 |
CenterYProperty |
識別 CenterY 相 依性屬性。 |
Dispatcher |
一律會在 |
DispatcherQueue |
|
Inverse |
如果可能,取得這個 GeneralTransform 的反向轉換。 (繼承來源 GeneralTransform) |
InverseCore |
在衍生或自定義 GeneralTransform 中實作 Inverse 傳回值的行為。 (繼承來源 GeneralTransform) |