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