Metro XAML アプリでいくつかのストーリーボードをいじっています。Storyboard
インコードを作成する必要があります。Storyboard.TargetProperty
に設定したいCompositeTransform.Rotation
無理そうです…
XAML のストーリーボードは次のようになります。
<Storyboard>
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.Rotation)" Storyboard.TargetName="grid">
<EasingDoubleKeyFrame KeyTime="0" Value="0"/>
<EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="60"/
</DoubleAnimationUsingKeyFrames>
</Storyboard>
似たようなものを作りたいと思っています。
重要:このストーリーボードを正確に再現しようとしているわけではありません。私は custom のコードの中にいてContentControl
、this
アニメーションControl
の対象となる「グリッド」がありません。ターゲットは、CompositeTransform
以前に設定されたコントロール自体です。
これまでの私のコードは次のようなものです:
var turnSB = new Storyboard();
var doubleAnim = new DoubleAnimationUsingKeyFrames();
doubleAnim.KeyFrames.Add(new EasingDoubleKeyFrame() { KeyTime = TimeSpan.FromMilliseconds(0), Value = currentAngle });
doubleAnim.KeyFrames.Add(new EasingDoubleKeyFrame() { KeyTime = TimeSpan.FromMilliseconds(500), Value = targetAngle });
turnSB.Children.Add(doubleAnim);
Storyboard.SetTarget(doubleAnim, this.RenderTransform);
Storyboard.SetTargetProperty(doubleAnim, "(CompositeTransform.Rotation)");
turnSB.Begin();
Begin メソッドに到達するとすぐに、(CompositeTransform.Rotation) を解決できないという例外が発生します。そのため、プロパティ パスが正しく取得されていないと推測しています。さまざまなバリエーションを試しましたが、PropertyPaths によると、これが正しいはずですよね? :S
これが解決できない問題である場合は、回避策についての提案をお待ちしています...
編集:
今のところ問題は解決したと思います。しかし、いくつかの興味深い発見があります...
UserControl を作成すれば、実質的に何でもできます。すべてが機能し、Storyboard.Target プロパティを設定でき、アニメーションが正しく再生されます。
ただし、カスタム コントロールを使用するか、別のコントロール (ContentControl など) から継承する場合、コードから Storyboard を開始できない場合があります。
例: ストーリーボード (XAML で定義) を作成して Rotation (またはその変換プロパティ) をアニメーション化し、コードから開始しようとすると、上記の例外が発生します。しかし、不透明度などの単純なプロパティをアニメーション化すると、正常に機能します。
(私は UserControl でも同じことをしましたが、うまくいきました。)
誰かがこれを説明できますか?