Пользовательский контроль не использует тему
У меня есть приложение, настроенное на использование темы 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>
Надеюсь, это решит вашу проблему.