Рекомендуется использовать CustomControl с ContentProperty также в качестве элемента управления BasedOn - PullRequest
0 голосов
/ 26 июня 2018

У меня есть Control - HtSideBarItem с ContentProperty. Теперь в 80% случаев я установил CustomButton как Content. Теперь я хотел бы создать второй класс HtSideBarButton, который наследует значение по умолчанию style и установить содержимое по умолчанию.

HtSideBarItem (Trimmed)

[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>

XAML HtSideBarButton

<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. Так есть ли лучший способ иметь «базовый стиль», наследовать и просто изменять содержимое с возможностью designTime data?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...