自定义内容控件不显示内容模板

时间:2016-09-08 15:37:33

标签: wpf xaml wpf-controls

我创建了一个继承自ContentControl并在XAML中编写样式的控件:

<Style TargetType="{x:Type controls:ButtonPopup}">
    <Setter Property="ContentTemplate">
        <Setter.Value>
            <DataTemplate>
                <Border>
                    <StackPanel>
                        <ContentPresenter Content="{TemplateBinding ContentControl.Content}" />
                    </StackPanel>
                </Border>
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>

当我想使用下面的控件时,我看不到任何内容

<controls:ButtonPopup Width="100"
                      Height="100">
                <Button Content="button"></Button>
</controls:ButtonPopup>

如果我在标准内容控制中使用我的风格,一切都有效

<ContentControl Style="{StaticResource PopupContentStyle2}">
                <Button Content="button"></Button>
</ContentControl>

<Style x:Key="PopupContentStyle2" TargetType="{x:Type ContentControl}">
            <Setter Property="ContentTemplate">
                <Setter.Value>
                    <DataTemplate>
                        <Border Width="100" Height="100">

                            <StackPanel Width="100" Height="100">
                                <TextBlock Text="SDADASDSADA" />
                                <ContentPresenter Width="100" Height="100" Content="{TemplateBinding ContentControl.Content}" />
                            </StackPanel>

                        </Border>
                    </DataTemplate>
                </Setter.Value>
            </Setter>
        </Style>

我的控制有什么问题?

2 个答案:

答案 0 :(得分:0)

您有一个内容的模板,它再次引用内容,您不应该这样做。您应该设置Control.Template

模板甚至没有被应用,因为您已经提供了不需要模板化的UIElementContentTemplates应该用于模板数据。

答案 1 :(得分:0)

您可能想要设置派生的ContentControl的ContentTemplate,而不是设置Template。 TemplateBinding在ControlTemplate中起作用。

<Style TargetType="controls:ButtonPopup">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="controls:ButtonPopup">
                <Border>
                    <StackPanel>
                        <ContentPresenter Content="{TemplateBinding Content}" />
                    </StackPanel>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

它还不清楚为什么StackPanel中只有一个子节点在边框内。