现在的位置: 首页 > 综合 > 正文

WPF:更快捷地定义Label的Target属性

2013年03月22日 ⁄ 综合 ⁄ 共 1161字 ⁄ 字号 评论关闭

在XAML中使用Label.Target,我们通常需要一个数据绑定来设置一个已命名的对象。这样不仅需要给对应控件加入名称,同时还得用数据绑定来把Target属性和对应控件联系起来,比如这样:

<Label Target="{Binding ElementName=tbx}">姓名(_N)</Label>

<TextBox Name="tbx"/>

 

其实可以创造一些东西使整个过程更快捷一些,比如用Style和HeaderedContentControl。HeaderedContentControl继承自ContentControl加了Header的相关属性。就用这个Header来正好作为Label控件的Content。注意在HeaderedContentControl的Style中通过数据绑定将ContentPresenter.Content设置成Label.Target。

 

如下代码:

<Style x:Key="ControlBlock" TargetType="HeaderedContentControl">

    <Setter Property="Template">

        <Setter.Value>

            <ControlTemplate TargetType="HeaderedContentControl">

                <DockPanel>

                    <Label Content="{TemplateBinding Header}"

                          DockPanel.Dock="Top"

                          Target="{Binding Content, ElementName=content}"/>

                    <!-- 将ContentPresenter.Content设置成Label.Target -->

                    <ContentPresenter Name="content"/>

                </DockPanel>

            </ControlTemplate>

        </Setter.Value>

    </Setter>

</Style>

 

使用起来直接定义HeaderedContentControl就可以了:

<HeaderedContentControl Style="{StaticResource ControlBlock}"

                       Header="姓名(_N)">

    <TextBox/>

</HeaderedContentControl>

 

 

OK:

image

抱歉!评论已关闭.