65.9K
CodeProject 正在变化。 阅读更多。
Home

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

2011年 5月 27日

CPOL

2分钟阅读

viewsIcon

21606

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 属性绑定到 TextBlockText 属性,而是希望将其与按钮的 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>

您会注意到,TextBlockText 属性绑定到按钮的 Tag 属性。 由于这比 TextBlock 高一级,并且非常接近绑定的元素,因此我们在这里使用了 AncestorLevel=1AncestorType=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。 希望这能使您清楚地了解此特性。 您可以进一步探索它,以更好地理解层级的用法。 编码愉快!

© . All rights reserved.