Почему x: Key отменяет мой стиль TabItem - PullRequest
1 голос
/ 17 июня 2011

Я пытаюсь создать собственный стиль для заголовка TabItem.Я получил его на работу случайно.

это не удалось:

<Style TargetType="{x:Type TabItem}" x:Name="TabHeader3" x:Key="test"> 

но это работает

<Style TargetType="{x:Type TabItem}" x:Name="TabHeader3"> 

Что происходит?

Ответы [ 2 ]

1 голос
/ 17 июня 2011

Первый стиль, который вы определили, является «явным» стилем, поэтому вы должны явно использовать его следующим образом:

<TabItem Style="{StaticResource test}" />

Второй стиль, который вы определили, является "неявным" стилем. Таким образом, он будет применен ко всем элементам управления TabItem, расположенным под ним в визуальном / логическом дереве, или ко всем элементам управления TabItem, если он определен в ресурсах приложения.

Ваш второй стиль эквивалентен:

<Style TargetType="{x:Type TabItem}" x:Name="TabHeader3" x:Key="{x:Type TabItem}">

Таким образом, ключ - это Тип объекта, к которому он должен быть применен.

Если TabItem имеет явно определенный стиль (как я покажу выше), то любые неявные стили не будут использоваться. Кроме того, если у вас определены два неявных стиля, побеждает ближайший. Итак, здесь:

<Window>
    <Window.Resources>
        <Style TargetType="{x:Type TabItem}"> 
            <Setter Property="Background" Value="Red" />
        </Style>
    </Window.Resources>
    <Grid>
        <Grid.Resources>
             <Style TargetType="{x:Type TabItem}"> 
                 <Setter Property="Background" Value="Blue" />
            </Style>
        </Grid.Resources>
        ...
        <TabItem ... />
        ...
    </Grid>
</Window>

Синий стиль будет иметь приоритет над красным.

Наконец, вам, как правило, не нужно включать x:Name в ваши стили.

1 голос
/ 17 июня 2011

Если вы добавляете стиль в словарь ресурсов без ключа, то стиль по умолчанию применяется ко всем элементам TabItems, которые входят в область действия словаря ресурсов.Если вы добавляете ключ к стилю, вам нужно вручную установить стиль

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