无法从代码中将Storyboard.TargetProperty设置为Metro风格应用中的CompositeTransform.Rotation

Ten*_*iko 5 storyboard attached-properties microsoft-metro winrt-xaml

我正在使用Metro XAML应用程序搞乱一些故事板.我必须创建一个Storyboard代码.我想设置Storyboard.TargetPropertyCompositeTransform.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>
Run Code Online (Sandbox Code Playgroud)

我想创造类似的东西.
重要提示:我不是要重新创建这个确切的故事板.我在自定义的代码中ContentControl,所以thisControl,并且没有"网格"来定位动画.目标是控制本身,它已经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();
Run Code Online (Sandbox Code Playgroud)

一旦它遇到Begin方法,我得到一个Exception,说无法解决(CompositeTransform.Rotation).所以我猜我没有完全正确的属性路径.我尝试了不同的变化,但根据PropertyPaths,这应该是正确的,不应该吗?:S

如果这是一个无法解决的问题,我愿意接受有关解决方法的建议......

编辑:

我想我现在已经解决了这个问题.我有一些有趣的发现......

如果我制作一个UserControl,我几乎可以做任何事情.一切正常,我可以设置Storyboard.Targetproperty,动画播放正确.

但是,如果我使用自定义控件,或从其他控件(比如ContentControl)继承,我无法从代码启动Storyboard,仅在某些情况下.

例如:如果我创建一个故事板(在XAML中定义)来为Rotation(或任何转换属性)设置动画并尝试从代码开始,我会得到上述异常.但是,如果我为一个简单的属性设置动画,比如Opacity,那就可以了.
(我对UserControl做了同样的事情,并且它有效.)

有人可以解释一下吗?

Sha*_*rot 4

MSDN 文档来看,您似乎需要设置整个字符串路径。因此,对于 xaml 中描述的动画,您需要这样设置 TargetProperty

Storyboard.SetTargetProperty(doubleAnim, "(UIElement.RenderTransform).(CompositeTransform.Rotation)");
Run Code Online (Sandbox Code Playgroud)

更新:找到这篇博客文章,它将时间轴添加为故事板的子项。请尝试以下操作:

Storyboard.SetTarget(doubleAnim, this.RenderTransform);
Storyboard.SetTargetProperty(doubleAnim, "Rotation"); // maybe "CompositeTransform.Rotation"
storyboard.Children.Add(doubleAnim);
Run Code Online (Sandbox Code Playgroud)