WPF: отключить наследование свойств - PullRequest
4 голосов
/ 15 марта 2010

Я хотел бы использовать TabControl в качестве основной навигации в приложении, над которым я работаю. Поэтому я хотел бы увеличить шрифт в заголовках TabItems, а также придать ему другой цвет фона. Однако, я не хочу, чтобы это было унаследовано. Например, если я использую этот код:

<TabControl FontSize="18pt">
  <TabItem Header="Tab 1">
    <Button>Button 1</Button>
  </TabItem>
</TabControl>

Шрифт на кнопке также большой 18pt. Я знаю, что это нормальное поведение свойства зависимости, потому что свойство наследуется, но это не то, что я хочу в этом случае. Я хотел бы изменить TabItems, не меняя ничего у детей. Разве это не возможно? Потому что сброс всех дочерних элементов к значениям по умолчанию - это PITA.

Спасибо за ваше время.

Ответы [ 3 ]

6 голосов
/ 15 марта 2010

Определите Header как явный элемент управления (например, TextBlock или Label), к которому вы применяете стиль:

<TabControl FontSize="18pt">
  <TabItem>
    <TabItem.Header>
        <TextBlock Style="{StaticResource tabHeaderStyle}">Tab 1</TextBlock>
    </TabItem.Header>
    <Button>Button 1</Button>
  </TabItem>
</TabControl>
1 голос
/ 15 марта 2010

Вы должны немного переосмыслить это. Вы не можете просто сказать «Не наследовать», потому что элемент управления должен наследовать значения своего свойства откуда-либо.

Это работает:

  <TabControl x:Name="Test" FontSize="36">
    <TabControl.Resources>
      <Style TargetType="Button">
        <Setter Property="FontSize" Value="{Binding ElementName=Test, Path=FontSize}"/>
      </Style>        
    </TabControl.Resources>
    <TabItem Header="Test" FontSize="24">
      <Button>Another test</Button>
    </TabItem>
  </TabControl>
0 голосов
/ 26 января 2015

Пример шаблонных заголовков для каждого состояния: Свойства шрифтов содержимого заголовка не распространяются на содержимое TabControl.

<Style TargetType="{x:Type TabItem}">
    <Setter Property="HeaderTemplate" Value="{DynamicResource TabItemGeneralTemplate.Normal}"/>
                <Style.Triggers>
                    <Trigger Property="Selector.IsSelected" Value="True">
                        <Setter Property="Background" Value="White"/>
                        <Setter Property="HeaderTemplate" Value="{DynamicResource TabItemGeneralTemplate.Selected}"/>               
                    </Trigger>
                    <MultiTrigger>
                        <MultiTrigger.Conditions>
                            <Condition Property="IsMouseOver" Value="True"/>
                            <Condition Property="Selector.IsSelected" Value="False"/>
                        </MultiTrigger.Conditions>
                        <Setter Property="Background" Value="White"/>
                        <Setter Property="HeaderTemplate" Value="{DynamicResource TabItemGeneralTemplate.Hover}"/>
                    </MultiTrigger>
                </Style.Triggers>
        </Style>

        ...

        <DataTemplate x:Key="TabItemGeneralTemplate.Selected">
           <Label Content="{Binding}" Foreground="#FF343434" FontWeight="Bold"/>
        </DataTemplate>
        <DataTemplate x:Key="TabItemGeneralTemplate.Hover">
           <Label Content="{Binding}" Foreground="{DynamicResource Background.Primary}"/>
        </DataTemplate>
        <DataTemplate x:Key="TabItemGeneralTemplate.Normal">
           <Label Content="{Binding}" Foreground="#FF7C7C7C"/>
        </DataTemplate>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...