我在 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 中定义)来动画旋转(或任何与此相关的转换属性)并尝试从代码开始,我会得到上述异常。但是如果我为一个简单的属性设置动画,比如不透明度,它就可以正常工作。
(我对 UserControl 做了同样的事情,并且它起作用了。)
有人可以解释一下吗?