Ten*_*iko 5 storyboard attached-properties microsoft-metro winrt-xaml
我正在使用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>
Run Code Online (Sandbox Code Playgroud)
我想创造类似的东西.
重要提示:我不是要重新创建这个确切的故事板.我在自定义的代码中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();
Run Code Online (Sandbox Code Playgroud)
一旦它遇到Begin方法,我得到一个Exception,说无法解决(CompositeTransform.Rotation).所以我猜我没有完全正确的属性路径.我尝试了不同的变化,但根据PropertyPaths,这应该是正确的,不应该吗?:S
如果这是一个无法解决的问题,我愿意接受有关解决方法的建议......
编辑:
我想我现在已经解决了这个问题.我有一些有趣的发现......
如果我制作一个UserControl,我几乎可以做任何事情.一切正常,我可以设置Storyboard.Targetproperty,动画播放正确.
但是,如果我使用自定义控件,或从其他控件(比如ContentControl)继承,我无法从代码启动Storyboard,仅在某些情况下.
例如:如果我创建一个故事板(在XAML中定义)来为Rotation(或任何转换属性)设置动画并尝试从代码开始,我会得到上述异常.但是,如果我为一个简单的属性设置动画,比如Opacity,那就可以了.
(我对UserControl做了同样的事情,并且它有效.)
有人可以解释一下吗?
从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)
| 归档时间: |
|
| 查看次数: |
3014 次 |
| 最近记录: |