创建接受子内容的自定义模板控件

时间:2013-08-11 20:44:53

标签: winrt-xaml

这是一个非常基本的问题,我无法在网上任何地方找到简单的答案。在Windows应用商店xaml / c#app中,如果我创建名为Templated Control的新CustomControl1.cs

这是Generic.xaml文件中定义的默认模板:

<Style TargetType="local:CustomControl1">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="local:CustomControl1">
                <Border>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

我应该能够通过以下两种方式之一设置上面Border元素的Content属性来指定子内容的生存位置。

将内容指定为属性

<Border Child="{TemplateBinding Content}" />

将内容指定为元素

<Border>
    <ContentPresenter ContentTemplate="{TemplateBinding ContentTemplate}"
                      Content="{TemplateBinding Content}" />
</Border>

但无论如何,每当我在其他地方使用新控件时,我都无法设置内容属性

使用此:

<local:CustomControl1>
    <Button></Button>
</local:CustomControl1>

给出以下两个错误:

  

无法向“CustomControl1”类型的对象添加内容   “CustomControl1”类型不支持直接内容。

1 个答案:

答案 0 :(得分:3)

确保从ContentControl派生您的类,而不仅仅是Control。这应该为你解决这个问题。默认的“模板化控件”项模板非常通用,可以处理人们可能需要的任何情况,因此如果您需要更多内容(在本例中为内容控件),只需更改为从ContentControl派生。

希望这有帮助!