我在Metro XAML应用程序中混淆了一些Storyboard。我必须在代码中创建一个Storyboard
。我想设置Storyboard.TargetProperty
到CompositeTransform.Rotation
无法将Storyboard.TargetProperty设置为Metro风格应用程序中的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>
我想创建类似的东西。
重要提示:我不想重新创建这个确切的故事板。我在自定义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
如果这是一个无法解决的问题,我愿意在解决方法建议...
编辑:
我想我已经解决了这个问题现在。我有一些有趣的发现,虽然...
如果我做一个用户控件,我几乎可以做任何事情。一切正常,我可以设置Storyboard.Target属性,并且动画可以正确播放。
但是,如果我使用自定义控件,或从另一个控件(比如ContentControl)继承,我无法从代码启动Storyboard,仅在某些情况下。
例如:如果我制作一个Storyboard(在XAML中定义)来为Rotation(或任何转换属性)制作动画并尝试从代码开始,我会得到上述异常。但是,如果我为一个简单的属性创建动画,比如说不透明度,它就可以正常工作。
(我用UserControl做了同样的工作,它工作。)
有人可以解释这个吗?
我有同样的问题,有从电网控制一个类继承,故事简单地赢得”开始。 – 2013-01-16 09:40:13
有一点需要注意的是,Grid不是从Control继承的,所以它不是一个真正的自定义控件。 – 2013-01-18 05:27:05
我没有使用Grid,我从ContentControl继承。 xaml来自之前的尝试,我有一个拥有网格的UserControl,并且这是动画的目标。但是对于这种情况,目标应该是控制本身。其中 - 如果你仔细阅读 - 我在'重要'一节中描述。 – Tenshiko 2013-01-29 16:37:20