0
ビジュアルレイヤーでアニメーションを作成して開始する場合は、StopAnimation
を使用してアニメーションを停止できます。しかし、私がそうすると、アニメーションが停止してプロパティが最新の値で更新されるまでに時間がかかるようです。その周りにいくつかの方法がありますか?以下のコードでは、10ミリ秒待つが、それはときどき動作する。アニメーションが停止してプロパティが更新されたときを検出するにはどうすればよいですか?
public sealed partial class MainPage : Page
{
SpriteVisual MyVisual;
public MainPage()
{
this.InitializeComponent();
PointerReleased += MainPage_PointerReleased;
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
var compositor = ElementCompositionPreview.GetElementVisual(this).Compositor;
MyVisual = compositor.CreateSpriteVisual();
MyVisual.Size = new Vector2(80, 80);
MyVisual.Offset = new Vector3(50, 50, 0);
MyVisual.Brush = compositor.CreateColorBrush(Colors.Green);
ElementCompositionPreview.SetElementChildVisual(this, MyVisual);
var animation = compositor.CreateVector3KeyFrameAnimation();
animation.InsertKeyFrame(1, new Vector3(300, 50, 0));
animation.Duration = TimeSpan.FromSeconds(3);
animation.IterationBehavior = AnimationIterationBehavior.Forever;
MyVisual.StartAnimation(nameof(MyVisual.Offset), animation);
}
private async void MainPage_PointerReleased(object sender, PointerRoutedEventArgs e)
{
System.Diagnostics.Debug.WriteLine("Position when animation running: " + MyVisual.Offset);
MyVisual.StopAnimation(nameof(MyVisual.Offset));
await Task.Delay(10);
System.Diagnostics.Debug.WriteLine("Position when animation stopped: " + MyVisual.Offset);
}
}