在UserControl实例中嵌入内容

时间:2011-10-07 14:33:33

标签: wpf

我有一个WPF UserControl,它只是一个标签,用于其他任何东西。例如,TextBox的标签。我想将此TextBox放在LabeledControl标记中,如下所示:

<LabeledControl Label="First name">
  <TextBox Binding="{FirstName}" />
</LabeledControl>

我想要这样做的原因是设置控件及其标签外观的样式。

我找不到明显的方法来做到这一点。我是否正确地接近这个?我应该查看模板吗?

1 个答案:

答案 0 :(得分:3)

我想说更好的选择是使用内置的HeaderedContentControl,它允许您指定Header(您的标签)和Content(您的文字)盒子)财产。

然后,您可以为ControlTemplate指定HeaderedContentControl来改变外观:

<Style x:Key="MyLabelledItemStyle" TargetType="HeaderedContentControl">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="HeaderedContentControl">
                <StackPanel Orientation="Horizontal">
                    <ContentControl Content="{TemplateBinding Header}" Margin="2" />
                    <ContentControl Content="{TemplateBinding Content}" Margin="2" />
                </StackPanel>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

此示例仅在StackPanel中水平连接两个组件,但如果需要,您可以执行更复杂的操作。

然后您可以在XAML中使用它,如下所示:

<HeaderedContentControl Style="{StaticResource MyLabelledItemStyle}" Header="First Name">
    <TextBox Text="{Binding FirstName}" />
</HeaderedContentControl>