Visual Studio 2012 C#でWindows8アプリケーションを作成しています。画像「1.png」があり、その中心点に沿ってアニメーションとして任意の角度で回転させたいです。しかし、私はXAMLコードではなくc#コードの助けを借りてそれをやりたいと思っています。
前もって感謝します。
Visual Studio 2012 C#でWindows8アプリケーションを作成しています。画像「1.png」があり、その中心点に沿ってアニメーションとして任意の角度で回転させたいです。しかし、私はXAMLコードではなくc#コードの助けを借りてそれをやりたいと思っています。
前もって感謝します。
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度回転します。
ところで:私はアニメーションのさらに良い方法を示す一連の投稿を書いています。まだ完了していませんが、特定の種類のアニメーションのフレームワークを取得する方法についての一般的なアイデアが得られます。
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の上に)