为什么需要在XAML动画的属性值周围使用圆括号?

时间:2010-09-17 17:10:31

标签: wpf xaml

这已经困扰了我很长一段时间,我似乎无法找到一个很好的解释。此标记中圆括号的用途是什么?它是用于投射的XAML快捷方式吗?为什么它似乎只用于动画?

Storyboard.TargetProperty="(TextBlock.RenderTransform).(RotateTransform.Angle)"

2 个答案:

答案 0 :(得分:4)

这是指定Type Qual DependencyProperty的语法。这是必需的,因为Storyboard.TargetProperty附加属性可以附加到任何DependencyObject。这意味着XAML解析器将不知道如何解析属性,除非它们是完全限定的。

此语法也用于绑定到附加属性之类的内容。这是一个人为的例子来证明这一点:

<Grid>  
  <Grid.RowDefinitions>
    <RowDefinition Height="Auto" />
    <RowDefinition Height="Auto" />
    <RowDefinition Height="Auto" />
    <RowDefinition Height="Auto" />
    <RowDefinition Height="Auto" />
    <RowDefinition Height="Auto" />
    <RowDefinition Height="Auto" />
    <RowDefinition Height="Auto" />
    <RowDefinition Height="Auto" />
    <RowDefinition Height="*" />
  </Grid.RowDefinitions>
    <Border x:Name="Foo" Background="Blue" Grid.Row="10" />
    <Border x:Name="Bar" Background="Red" Height="{Binding (Grid.Row), ElementName=Foo}" />
</Grid>

如果从Binding中删除括号,则会出现绑定错误(因为Border元素上没有Grid属性)。

答案 1 :(得分:0)

它不仅用于动画(验证弹出) - 它们分别只是静态调用或强制转换。基本上上面的代码转换为(伪代码):

((RotateTransform)TextBlock.GetRenderTransform((TextBlock) element)).Angle = newValue;

其中element是被操作的元素,newValue是动画设置属性。