Silverlight 5 特性:祖先相对源绑定






4.94/5 (3投票s)
Silverlight 5 特性:祖先相对源绑定
Silverlight 5 包含一项名为祖先相对源绑定的新特性。 此特性已在 WPF 中可用,并在 Silverlight 5 Beta 中被引入。 使用此特性,您可以非常轻松地绑定到相对的祖先元素。
让我们通过一个简单的示例来讨论它,我们将为 Button
创建一个控件模板,并将它的 Tag
属性绑定到实际显示文本的元素,而不是设置 Content
属性。 请继续阅读以了解更多信息。
让我们为按钮创建一个简单的基本样式。 对于我们的示例,我们不会使用任何视觉效果惊艳的按钮样式。 因此,我们的 button
将看起来像一个 TextBlock
。 让我们使用如下所示的 TextBlock
控件创建样式
<Style x:Key="ButtonStyle" TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Grid>
<TextBlock TextWrapping="Wrap"
VerticalAlignment="Center"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
您会看到,我们只是将一个普通的 TextBlock
作为按钮控件的 ControlTemplate
。 现在,我们不希望将 Content
属性绑定到 TextBlock
的 Text
属性,而是希望将其与按钮的 Tag
属性绑定。 在这种情况下,Tag
属性是 TextBlock
控件的一级祖先属性。
让我们修改我们的样式,使其如下所示
<Style x:Key="ButtonStyle" TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="Button">
<Grid>
<TextBlock TextWrapping="Wrap"
Text="{Binding Tag,
RelativeSource={RelativeSource AncestorType=Button,
AncestorLevel=1}}"
VerticalAlignment="Center"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
您会注意到,TextBlock
的 Text
属性绑定到按钮的 Tag
属性。 由于这比 TextBlock
高一级,并且非常接近绑定的元素,因此我们在这里使用了 AncestorLevel=1
。 AncestorType=Button
定义了它绑定的控件。
现在在我们的 LayoutRoot
中,我们将添加一个 Button
控件,并且不指定 Text
属性,而是使用 Tag
属性来设置文本。 这是代码片段
<Grid x:Name="LayoutRoot" Background="White">
<Button Width="200" Height="26"
Tag="This is Button" Style="{StaticResource ButtonStyle}"/>
</Grid>
现在,如果您运行示例,您将在 UI 中看到渲染的 Text
。 希望这能使您清楚地了解此特性。 您可以进一步探索它,以更好地理解层级的用法。 编码愉快!