WPFは - 、アニメーションのストーリーボードを停止することはできませんIsControllableが動作しませんか?
-
22-08-2019 - |
質問
私は共有ストーリーボードを使用してアニメーション化していた3Dキューブを持っています。アニメーションコードは、コンボボックスのSelectionChangedイベントであり、次のが始まる前にまだ実行されているすべてのアニメーションを停止することを確認するためのものです。しかし、それはそのように働いていない!
私はこれはかなり厄介なコードで実現するが、私のストーリーボードは文句を言わない私は(これ、本当の).begin呼んでいるので、制御するのに応え、なぜ私はまだ表示されません。
私はストーリーボードを止めることができない理由誰かが私に言うことはできますか?私はまだその危険な'System.Windows.Media.Animation Warning: 6 : Unable to perform action because the specified Storyboard was never applied to this object for interactive control.; Action='Stop';'
メッセージを取得しています。
Storyboard sb = new Storyboard();
DoubleAnimation forward90 = new DoubleAnimation(0,90,TimeSpan.FromMilliseconds(2000));
DoubleAnimation back90 = new DoubleAnimation(0,-90, TimeSpan.FromMilliseconds(2000));
private void cbo_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
forward90.BeginTime = TimeSpan.Zero;
back90.BeginTime = TimeSpan.Zero;
NameScope.SetNameScope(this, new NameScope());
RegisterName(this.Name, this);
sb.Stop(this);
sb.Remove(this);
sb.Children.Clear();
sb.AccelerationRatio = 0;
sb.DecelerationRatio = 1;
sb.RepeatBehavior = RepeatBehavior.Forever;
int i = cbo.SelectedIndex;
Orientation o = (Orientation)i;
ViewModel vm = this.DataContext as ViewModel;
if(vm !=null)vm.Orient = o;
switch (o)
{
case Orientation.Front0:
break;
case Orientation.Front90:
sb.Children.Add(forward90);
Storyboard.SetTarget(forward90, cube2);
Storyboard.SetTargetProperty(forward90, new PropertyPath(CubeControl.CubeControl.XRotationProperty));
sb.Begin(this, true);
break;
case Orientation.Right0:
sb.Children.Add(back90);
Storyboard.SetTarget(back90, cube2);
Storyboard.SetTargetProperty(back90, new PropertyPath(CubeControl.CubeControl.YRotationProperty));
sb.Begin(this, true);
break;
case Orientation.Right90:
back90.BeginTime = TimeSpan.FromMilliseconds(2000);
sb.Children.Add(forward90);
sb.Children.Add(back90);
Storyboard.SetTarget(back90, cube2);
Storyboard.SetTarget(forward90, cube2);
Storyboard.SetTargetProperty(forward90, new PropertyPath(CubeControl.CubeControl.YRotationProperty));
Storyboard.SetTargetProperty(back90, new PropertyPath(CubeControl.CubeControl.ZRotationProperty));
sb.Begin(this, true);
break;
case Orientation.Top0:
sb.Children.Add(back90);
Storyboard.SetTarget(back90, cube2);
Storyboard.SetTargetProperty(back90, new PropertyPath(CubeControl.CubeControl.ZRotationProperty));
sb.Begin(this, true);
break;
case Orientation.Top90:
back90.BeginTime = TimeSpan.FromMilliseconds(2000);
sb.Children.Add(forward90);
sb.Children.Add(back90);
Storyboard.SetTarget(forward90, cube2);
Storyboard.SetTarget(back90, cube2);
Storyboard.SetTargetProperty(forward90, new PropertyPath(CubeControl.CubeControl.XRotationProperty));
Storyboard.SetTargetProperty(back90, new PropertyPath(CubeControl.CubeControl.ZRotationProperty));
sb.Begin(this, true);
break;
default:
break;
}
}
}
解決
私はあなたが始める方法には、こののではなく、CBOに合格する必要があります信じています。
それはそれはアニメーションを制御することであるCBOの変化でありながら、これは(私はあなたのウィンドウクラスを推測する)現在のクラスを意味します。
所属していません StackOverflow