将Silverlight动态动画迁移到WPF

3
我有一个 Silverlight 动画(百分之百工作):
<UserControl.RenderTransform>
    <CompositeTransform/>
</UserControl.RenderTransform>

在代码中:

Storyboard.SetTargetProperty(myDoubleAnimation1, new PropertyPath("(UIElement.RenderTransform).(CompositeTransform.TranslateX)"));
Storyboard.SetTargetProperty(myDoubleAnimation2, new PropertyPath("(UIElement.RenderTransform).(CompositeTransform.TranslateY)"));

我在WPF中尝试了以下代码:

<UserControl.RenderTransform>
    <TranslateTransform />
</UserControl.RenderTransform>

并且:

Storyboard.SetTargetProperty(myDoubleAnimation1, new PropertyPath("(UIElement.RenderTransform).(TranslateTransform.X)"));
Storyboard.SetTargetProperty(myDoubleAnimation2, new PropertyPath("(UIElement.RenderTransform).(TranslateTransform.Y)"));

但是它会崩溃,并出现异常,指出无法解析路径(UIElement.RenderTransform).(TranslateTransform.X),或类似的错误。你能帮忙吗?


我不认为这会有什么区别,但你能否尝试在你的PropertyPath中将“UIElement”替换为“UserControl”? - K Mehta
2个回答

1
解决方案:
后端代码:
Storyboard.SetTargetProperty(myDoubleAnimation1, new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[0].(TranslateTransform.X)"));
Storyboard.SetTargetProperty(myDoubleAnimation2, new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[0].(TranslateTransform.Y)"));

标记:

<UserControl.RenderTransform>
    <TransformGroup>
        <TranslateTransform />
    </TransformGroup>
</UserControl.RenderTransform>

那并没有回答为什么它会崩溃。从我看到的情况来看,它真的不应该崩溃,因为原帖中的方法在我看来是正确的。 - K Mehta
好的,经过这个更改它开始工作了,看起来添加子元素是关键。 - deha

1

你可能已经发现,在WPF中没有CompositeTransform。创建Transform的标准方式是创建一个TransformGroup,然后添加四种类型的Transform。

<UserControl.RenderTransform> 
<TransformGroup> 
    <TranslateTransform /> 
    <ScaleTransform />
    <SkewTransform />
    <RotateTransform />
</TransformGroup> 

然后动画使用索引器语法引用变换。

(UIElement.RenderTransform).(TransformGroup.Children)[0].(TranslateTransform.X)

末尾的示例 https://msdn.microsoft.com/en-us/library/system.windows.media.compositetransform%28v=vs.95%29.aspx 也很有帮助(显示如何在XAML中使用TransformGroup或CompositeTransform) - George Birbilis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接