Пользовательский контроль не использует тему

У меня есть приложение, настроенное на использование темы Royal:

<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="/PresentationFramework.Royale;V3.0.0.0;31bf3856ad364e35;component\themes\Royale.NormalColor.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

Затем у меня есть CustomControl в том же проекте приложения:

public class CustomerView : Control
{
    static CustomerView()
    {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(CustomerView), 
            new FrameworkPropertyMetadata(typeof(CustomerView)));
    }
}

 <Style TargetType="{x:Type local:CustomerView}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:CustomerView}">
                <TabControl>
                    <TabItem Header="Tab0" />
                    <TabItem Header="Tab1" />
                    <TabItem Header="Tab2" />
                </TabControl>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Это работает, и стиль из королевской темы применяется к Tabcontrol. Но теперь я хочу внести небольшое изменение в отступы на вкладке элементов:

<Style TargetType="{x:Type local:CustomerView}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type local:CustomerView}">
                <TabControl>
                    <TabControl.ItemContainerStyle>
                        <Style TargetType="{x:Type TabItem}"
                               BasedOn="{StaticResource {x:Type TabItem}}">
                            <Setter Property="Padding"
                                    Value="20" />
                        </Style>
                    </TabControl.ItemContainerStyle>

                    <TabItem Header="Tab0" />
                    <TabItem Header="Tab1" />
                    <TabItem Header="Tab2" />
                </TabControl>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Теперь королевская тема не применяется к TabControl и возвращается к теме Aero. Что дает? Как я могу решить это?

1 ответ

Я не уверен, почему установка ItemContainerStyle переопределит стиль, однако, если вы просто добавите его в качестве ресурса в ControlTemplate, он будет работать так, как ожидается

<Style TargetType="{x:Type local:CustomerView}">
<Setter Property="Template">
    <Setter.Value>
        <ControlTemplate TargetType="{x:Type local:CustomerView}">
            <ControlTemplate.Resources>
                <Style TargetType="{x:Type TabItem}" BasedOn="{StaticResource {x:Type TabItem}}">
                     <Setter Property="Padding" Value="20" />
                </Style>
            </ControlTemplate.Resources>
            <TabControl>
                <TabItem Header="Tab0" />
                <TabItem Header="Tab1" />
                <TabItem Header="Tab2" />
            </TabControl>
        </ControlTemplate>
    </Setter.Value>
</Setter>

Надеюсь, это решит вашу проблему.

Другие вопросы по тегам