ContentControl的ContentPresenter是空白的?

时间:2018-06-11 09:28:03

标签: c# wpf xaml

在XAML中,我正在尝试创建一个非常简单的“内容容器”,其中包含一个随机元素(在这种情况下它是TextBlock),但以下内容只是空白,并且不包含指定了TextBlock元素。

ContentControl是否是在这种情况下使用的正确元素?

<ContentControl>
    <ContentControl.Content>
        <TextBlock Text="Hello" />
    </ContentControl.Content>
    <ContentControl.Template>
        <ControlTemplate>
            <Border Background="Red">
                <ContentPresenter />
            </Border>
        </ControlTemplate>
    </ContentControl.Template>
</ContentControl>

1 个答案:

答案 0 :(得分:1)

只需在ControlTemplate上设置TargetType="ContentControl"

<ContentControl>
    <ContentControl.Content>
        <TextBlock Text="Hello" />
    </ContentControl.Content>
    <ContentControl.Template>
        <ControlTemplate TargetType="ContentControl"> <!-- here -->
            <Border Background="Red">
                <ContentPresenter />
            </Border>
        </ControlTemplate>
    </ContentControl.Template>
</ContentControl>

为了使其可重用,您可以声明一个ContentControl样式:

<Style TargetType="ContentControl" x:Key="RedBorderContentControlStyle">
    <Setter Property="Background" Value="Red"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ContentControl">
                <Border Background="{TemplateBinding Background}"
                        BorderBrush="{TemplateBinding BorderBrush}"
                        BorderThickness="{TemplateBinding BorderThickness}">
                    <ContentPresenter
                        HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
                        VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

并像这样使用它:

<ContentControl Style="{StaticResource RedBorderContentControlStyle}">
    <TextBlock Text="Hello"/>
</ContentControl>