2010-09-17 74 views
6

这一直困扰着我很长一段时间,我似乎无法找到一个很好的解释。这个标记中的圆括号的目的是什么?它是一个XAML快捷方式吗?为什么它似乎只用于动画?为什么需要围绕XAML动画的属性值使用圆括号?

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

回答

4

这是用于指定Type合格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元素)。

0

它不仅用于动画(验证弹簧到脑海) - 它们分别只是静态调用或强制转换。基本上在上述代码转换为(在伪代码):

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

其中元件是做出响应并newValue为动画设置属性的元素。

相关问题