有人可以教我如何阅读Storyboard.TargetProperty及其变换组吗?

时间:2013-02-01 16:26:52

标签: wpf wpf-controls

我是一个从这个例子中看到的新手 http://www.codeproject.com/Articles/199014/Page-Transition-Control-for-WPF

它有很多故事板对象,比如这个

<DoubleAnimation Storyboard.TargetProperty="(RenderTransform).(TransformGroup.Children)[1].(SkewTransform.AngleX)" To="100" Duration="0:0:.75" AccelerationRatio=".9" />

和一个像这样的TransformGroup

`<ScaleTransform 
  ScaleX="1" ScaleY="1" 
  CenterX="{Binding RelativeSource={RelativeSource AncestorType=Grid, Mode=FindAncestor}, Path=ActualWidth, Converter={StaticResource centerConverter}}" 
    CenterY="{Binding RelativeSource={RelativeSource AncestorType=Grid, Mode=FindAncestor}, Path=ActualHeight, Converter={StaticResource centerConverter}}" 
/>

<SkewTransform 
  AngleX="0" 
  AngleY="0" 
    CenterX="{Binding RelativeSource={RelativeSource AncestorType=Grid, Mode=FindAncestor}, Path=ActualWidth, Converter={StaticResource centerConverter}}" 
    CenterY="{Binding RelativeSource={RelativeSource AncestorType=Grid, Mode=FindAncestor}, Path=ActualHeight, Converter={StaticResource centerConverter}}" 
/>

<RotateTransform 
  Angle="0" 
    CenterX="{Binding RelativeSource={RelativeSource AncestorType=Grid, Mode=FindAncestor}, Path=ActualWidth, Converter={StaticResource centerConverter}}" 
    CenterY="{Binding RelativeSource={RelativeSource AncestorType=Grid, Mode=FindAncestor}, Path=ActualHeight, Converter={StaticResource centerConverter}}" 
/>
<TranslateTransform X="0" Y="0" />`

有人可以向我解释它是如何运作的,这太令人困惑了!我花了整整一天阅读Xaml和wpf书籍,但我仍然没有得到它。当我通过简化代码尝试理解时,我不断得到这样的错误:'[Unknown]'属性不指向路径中的DependencyObject'(RenderTransform)。(0)[1]。(1)'

WPF真是太难了!?!?!?

2 个答案:

答案 0 :(得分:2)

如果你是WPF的新手,动画可能不是最好的起点,但我会看看我是否可以解释一下。

WPF中有两种类型的“转换”,可用于修改UI对象的外观。

  • LayoutTransform在WPF确定将如何在屏幕上布局后修改对象
  • RenderTransform在将对象渲染到屏幕后修改对象

这两个属性都包含对象的transformations集合:RotateScaleSkewTranslate(向上移动/向下或向左/向右)

Animation是在特定时间段内将属性从一个值更改为另一个值的内容。例如,您可以在1秒的时间内将对象的Height属性从50更改为200,以使对象在屏幕上明显变大。

您正在查看的代码就是其中一个动画。

<DoubleAnimation 
    Storyboard.TargetProperty="(RenderTransform).(TransformGroup.Children)[1].(SkewTransform.AngleX)" 
    To="100" Duration="0:0:.75" AccelerationRatio=".9" />

标记名称告诉我们它是DoubleAnimation,这意味着它正在修改类型为double的属性。

TargetProperty告诉我们它正在修改RenderTransform集合中的第二个对象(为了简化它,RenderTransform.Children[1]

转换期望有一个SkewTransform,并且动画设置为在AngleX期间将100属性从现在的任何内容更改为0:0:.75 }秒

我不熟悉AccelerationRatio属性,但我相信它会修改值从起始值到结束值加速的速度。

答案 1 :(得分:0)

使用表单(X.Y)的属性路径中的任何内容表示“在类型X中定义的DependencyProperty Y的值”。这些可以是普通DP,也可以是在其所有者以外的类型上设置的附加属性。