ContentControl不显示ControlTemplate中的内容

时间:2016-09-09 14:20:39

标签: c# wpf custom-controls controltemplate contentcontrol

我需要创建一个类似于WPF GroupBox的自定义控件。我从VS 2015中的标准WPF自定义控件库模板开始,并定义了我的CustomGroupBox控件,如下所示:

public class CustomGroupBox : ContentControl
{
    static CustomGroupBox()
    {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomGroupBox), new FrameworkPropertyMetadata(typeof(CustomGroupBox)));
    }
}

然后根据规范添加以下最小的行集来开发我的自定义GroupBox:

<ResourceDictionary
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:CustomGroupBox">
    <Style TargetType="{x:Type local:CustomGroupBox}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type local:CustomGroupBox}">
                    <Border Background="{TemplateBinding Background}"
                            BorderBrush="Gray" BorderThickness="3" CornerRadius="3">
                        <ContentControl />
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>

为了调试和开发,我为自定义控件创建了一个测试表单:

<Window x:Class="CustomGroupBoxClient.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:CustomGroupBoxClient"
        xmlns:ctrl="clr-namespace:CustomGroupBox;assembly=CustomGroupBox"
        mc:Ignorable="d"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <ctrl:CustomGroupBox Margin="5">
            <StackPanel Orientation="Vertical">
                <TextBlock>Text Block #1</TextBlock>
                <TextBlock>Text Block #2</TextBlock>
            </StackPanel>
        </ctrl:CustomGroupBox>
    </Grid>
</Window>

但是,当我启动此表单时,我会看到自定义控件的边框,但不会看到内容(2 TextBlock&#39; s):

enter image description here

我已经重读了许多与此主题相关的手册和文章,但仍然无法弄清楚为什么我的ControlTemplate中的ContentControl不会显示指定的内容。如何解决我的问题?

1 个答案:

答案 0 :(得分:1)

尝试在模板中使用ContentPresenter代替ContentControl

<ContentPresenter />

默认情况下,ContentPresenter会找到其模板化父级的Content属性,并显示它在那里找到的任何内容。您可以通过更改其ContentSource值...

来更改其查找的属性的名称
<ContentPresenter ContentSource="FooBar" />

...但是由于您从ContentControl继承,默认值可能就是您想要的。