2013-05-30 5 views
3

У меня возникли проблемы с наследованием от стиля по умолчанию в ItemContainerStyle TabControl.WPF: как наследовать от базового (или стандартного) стиля в ItemContainerStyle

Цель наследования стиля темы и изменение только нескольких свойств.

Если я пишу этот код XAML, используется стиль TabItem по умолчанию, но не темой. У вас есть идеи, почему?

<TabControl> 

    <TabControl.Resources> 
     <Style TargetType="Button" BasedOn="{StaticResource {x:Type Button}}"> 
      <Setter Property="Background" Value="DarkBlue"/> 
     </Style> 
    </TabControl.Resources> 

    <TabControl.ItemContainerStyle> 
     <Style TargetType="TabItem" BasedOn="{StaticResource {x:Type TabItem}}"> 
      <Setter Property="Background" Value="Blue"/> 
      <Setter Property="Foreground" Value="Red"/> 
     </Style> 
    </TabControl.ItemContainerStyle> 

    <TabItem Header="Tab 1"/> 
    <TabItem Header="Tab 2"/> 
    <TabItem Header="Tab 3"/> 
    <TabItem Header="Tab 4"/> 

</TabControl> 

PS: Выполнение того же для кнопки, в ресурсах, отлично работает. Почему это не с стилем TabItem? Что-то связанное с ItemContainerStyle?

PS2: Мой стиль темы (стиль по умолчанию) хранится в ресурсах приложения.

Благодаря

EDIT 1

Вы можете найти пример проекта на моем Dropbox: https://dl.dropboxusercontent.com/u/61987557/InheritDefaultStyle.zip

+0

Я попробовал этот код и, кажется, работает. Как кнопка, так и вкладка взяли базовый стиль из App.xaml. Есть ли какая-то другая конкретная проблема, с которой вы сталкиваетесь? – Jawahar

+0

Здравствуйте, XAML Lover, я попытался поместить только этот код в приложение, причем мой стиль по умолчанию для TabItem напрямую включен в App.xaml, но он все еще не работает. Я вышлю вам источник –

ответ

0

Я думаю TabItemStyle и ItemContainerStyle две разные вещи ItemContainerStyle применяется к элемент контейнера, сгенерированный для каждого элемента. Принимая во внимание, что вы пытаетесь установить TabItemStyle внутри ItemContainerStyle.

+0

Да точно, но это способ сделать это, не так ли? Я хотел бы иметь стиль по умолчанию для моего TabItem в библиотеке, но пользователи этой библиотеки должны иметь возможность изменять некоторые свойства, такие как фон, без необходимости переписывать весь стиль. Вы бы сделали это по-другому? –

0

Определить ключ для стиля вашей TabItem в:

<Style TargetType="{x:Type TabItem}" x:Key="StandardTabItemControl"> 
... 
</Style> 

И затем использовать этот ключ, чтобы наследовать от него:

<TabControl.ItemContainerStyle> 
    <Style TargetType="TabItem" BasedOn="{StaticResource StandardTabItemControl}"> 
     ... 
    </Style> 
</TabControl.ItemContainerStyle> 
Смежные вопросы