1

Visual Studio 2012 C#でWindows8アプリケーションを作成しています。画像「1.png」があり、その中心点に沿ってアニメーションとして任意の角度で回転させたいです。しかし、私はXAMLコードではなくc#コードの助けを借りてそれをやりたいと思っています。

前もって感謝します。

4

2 に答える 2

8

XAMLで、次の画像を用意します。

<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
    <Image Source="/Assets/Logo.png" Width="300" RenderTransformOrigin="0.5, 0.5">
        <Image.RenderTransform>
            <RotateTransform x:Name="rotateTransform"/>
        </Image.RenderTransform>
    </Image>
</Grid>

次に、コードで、アニメーション化するときに次のように記述します(Storyboardプログラムで作成してから、関連するものを追加します。必要に応じて、 inコードTimelineを作成することもできます。RotateTransform

    async void MainPage_Loaded(object sender, RoutedEventArgs e)
    {
        await Task.Delay(500);

        Storyboard board = new Storyboard();
        var timeline = new DoubleAnimationUsingKeyFrames();
        Storyboard.SetTarget(timeline, rotateTransform);
        Storyboard.SetTargetProperty(timeline, "Angle");
        var frame = new EasingDoubleKeyFrame() { KeyTime = TimeSpan.FromSeconds(1), Value = 360, EasingFunction = new QuadraticEase() { EasingMode = EasingMode.EaseOut } };
        timeline.KeyFrames.Add(frame);
        board.Children.Add(timeline);

        board.Begin();
    }

これにより、オブジェクトが360度回転します。

ところで:私はアニメーションのさらに良い方法を示す一連の投稿を書いています。まだ完了していませんが、特定の種類のアニメーションのフレームワークを取得する方法についての一般的なアイデアが得られます。

シリーズの最初の部分

于 2013-03-03T15:08:55.153 に答える
0

Shaharに感謝します!私はあなたの例を取り、カスタムコントロールを作成しました。それは実際には1つのリング画像の無限の回転です。

Spinner.xaml:

<UserControl x:Class="MyControls.Spinner"
...

    <Grid >
      <Image Source="/Assets/Images/spinner.png" Width="194" RenderTransformOrigin="0.5, 0.5">
        <Image.RenderTransform>
            <RotateTransform x:Name="rotateTransform"/>
        </Image.RenderTransform>
      </Image>
    </Grid>
</UserControl>

Spinner.cs:

namespace MyControls
{
public partial class Spinner: UserControl
{
    public Spinner()
    {
        InitializeComponent();
        this.Loaded += Spinner_Loaded;
    }

    private void PlayRotation()
    {
        Storyboard board = new Storyboard();
        var timeline = new DoubleAnimationUsingKeyFrames();
        Storyboard.SetTarget(timeline, rotateTransform);
        Storyboard.SetTargetProperty(timeline, new PropertyPath("(Angle)"));

        var frame = new EasingDoubleKeyFrame() { KeyTime = TimeSpan.FromSeconds(5), Value = 360, EasingFunction = new QuadraticEase() { EasingMode = EasingMode.EaseOut } };
        timeline.KeyFrames.Add(frame);
        board.Children.Add(timeline);

        board.RepeatBehavior = RepeatBehavior.Forever;
        board.Begin();
    }

    private async void Spinner_Loaded(object sender, RoutedEventArgs e)
    {
        PlayRotation();
    }
}

}

次に、別のxamlでSpinnerを使用する場合は、非常に簡単です。グリッドなどの内部に行を追加するだけです。

<include:Spinner/>

(もちろん、includeを次のように定義する必要があります。

xmlns:include="MyControls"

xamlの上に)

于 2016-03-03T07:54:54.867 に答える