我创建了一个继承自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>
我的控制有什么问题?
答案 0 :(得分:0)
您有一个内容的模板,它再次引用内容,您不应该这样做。您应该设置Control.Template
。
模板甚至没有被应用,因为您已经提供了不需要模板化的UIElement
。 ContentTemplates
应该用于模板数据。
答案 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中只有一个子节点在边框内。