gpt4 book ai didi

storyboard - 无法通过代码在 Metro 风格应用程序中将 Storyboard.TargetProperty 设置为 CompositeTransform.Rotation

转载 作者:行者123 更新时间:2023-12-04 17:38:00 24 4
gpt4 key购买 nike

我正在处理 Metro XAML 应用程序中的一些 Storyboard。我必须创建一个 Storyboard在代码中。我想设置 Storyboard.TargetPropertyCompositeTransform.Rotation
好像不可能……

我在 XAML 中的 Storyboard如下所示:

<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>

我想创建类似的东西。
重要提示:我不是要重新创建这个确切的 Storyboard。我在自定义代码中 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();

一旦它遇到 Begin 方法,我就会收到一个异常,说 (CompositeTransform.Rotation) 无法解析。所以我猜我的属性路径不太正确。我尝试了不同的变体,但根据 PropertyPaths,这应该是正确的,不是吗? :S

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

编辑:

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

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

但是,如果我使用自定义控件,或从另一个控件(例如 ContentControl)继承,则无法从代码启动 Storyboard,仅在某些情况下。

例如:如果我制作一个 Storyboard(在 XAML 中定义)来动画旋转(或任何与此相关的转换属性)并尝试从代码开始,我会得到上述异常。但是如果我为一个简单的属性设置动画,比如不透明度,它工作正常。
(我对 UserControl 做了同样的事情,并且奏效了。)

有人可以解释一下吗?

最佳答案

来自 MSDN docs看起来您需要设置整个字符串路径。因此,对于 xaml 中描述的动画,您需要将 TargetProperty 设置为

Storyboard.SetTargetProperty(doubleAnim, "(UIElement.RenderTransform).(CompositeTransform.Rotation)");

更新 :
找到这个 blog post它将时间轴添加为 Storyboard的子项。请尝试以下操作:
Storyboard.SetTarget(doubleAnim, this.RenderTransform);
Storyboard.SetTargetProperty(doubleAnim, "Rotation"); // maybe "CompositeTransform.Rotation"
storyboard.Children.Add(doubleAnim);

关于storyboard - 无法通过代码在 Metro 风格应用程序中将 Storyboard.TargetProperty 设置为 CompositeTransform.Rotation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11925991/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com