结合使用带有ContentProperty的CustomControl和基于控件的最佳实践

时间:2018-06-26 08:01:55

标签: c# wpf xaml

我有一个Control和一个HtSideBarItem的{​​{1}}-。现在,在80%的情况下,我将ContentProperty设置为CustomButton。现在,我想创建第二个类Content,该类继承默认的HtSideBarButton并设置默认内容。

HtSideBarItem(已修剪)

style

XAML HtSideBarButton

[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> 数据。但是由于designTime,因此不可能。那么,有没有更好的方法来拥有“基本样式”并继承并仅使用DataTemplate数据的功能更改内容?

0 个答案:

没有答案