C# 将CustomControl与ContentProperty一起用作BasedOn控件的最佳实践

C# 将CustomControl与ContentProperty一起用作BasedOn控件的最佳实践,c#,wpf,xaml,C#,Wpf,Xaml,我有一个控件-HtSideBarItem和一个ContentProperty。现在,在80%的情况下,我将CustomButton设置为Content。现在我想创建第二个类HtSideBarButton,它继承默认的样式,并设置默认内容 HtSideBarItem(修整) [ContentProperty(“内容”)] 公共类HtSideBarItem:控件 { 公共数据模板ContentTemplate { get=>(DataTemplate)GetValue(ContentTemplate

我有一个
控件
-
HtSideBarItem
和一个
ContentProperty
。现在,在80%的情况下,我将
CustomButton
设置为
Content
。现在我想创建第二个类
HtSideBarButton
,它继承默认的
样式
,并设置默认内容

HtSideBarItem(修整)
[ContentProperty(“内容”)]
公共类HtSideBarItem:控件
{
公共数据模板ContentTemplate
{
get=>(DataTemplate)GetValue(ContentTemplateProperty);
set=>SetValue(ContentTemplateProperty,value);
}
公共静态只读DependencyProperty ContentTemplateProperty=DependencyProperty.Register(“ContentTemplate”、typeof(DataTemplate)、typeof(HtSideBarItem));
公共对象内容
{
get=>GetValue(ContentProperty);
set=>SetValue(ContentProperty,value);
}
public static readonly dependencProperty ContentProperty=dependencProperty.Register(“Content”、typeof(object)、typeof(HtSideBarItem));
}
XAML HtSideBarButton


现在,这正如预期的那样工作,但有一个问题。我想要
designTime
数据。但这是不可能的,因为
数据模板
。那么,有没有更好的方法来拥有“基本样式”和继承,并使用
designTime
data的功能来更改内容?

content和ContentTemplate控件。它与ContentControl有何不同?还有更多(大约10个)
依赖性属性
,为了清楚起见,我省略了这些属性。你仍然可以从ContentControl派生……你说得对,这是。。但这无论如何也解决不了我的问题。
[ContentProperty("Content")]
public class HtSideBarItem : Control
{
    public DataTemplate ContentTemplate
    {
        get => (DataTemplate) GetValue(ContentTemplateProperty);
        set => SetValue(ContentTemplateProperty, value);
    }

    public static readonly DependencyProperty ContentTemplateProperty = DependencyProperty.Register("ContentTemplate", typeof(DataTemplate), typeof(HtSideBarItem));

    public object Content
    {
        get => GetValue(ContentProperty);
        set => SetValue(ContentProperty, value);
    }

    public static readonly DependencyProperty ContentProperty = DependencyProperty.Register("Content", typeof(object), typeof(HtSideBarItem));
}


<Style TargetType="sideBar:HtSideBarItem">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="sideBar:HtSideBarItem">
                <Grid>
                    <ContentControl Content="{TemplateBinding Content}" ContentTemplate="{TemplateBinding ContentTemplate}"/>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
<Style TargetType="sideBar:HtSideBarButton" BasedOn="{StaticResource {x:Type sideBar:HtSideBarItem}}">        
    <Setter Property="ContentTemplate">
        <Setter.Value>
            <DataTemplate>
                <controls:CustomButton
                    Height="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=sideBar:HtSideBarButton}, Path=Height}" 
                    Text="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=sideBar:HtSideBarButton}, Path=Text}"/>
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>