Вы применяете «treeViewItemStyle» только к первому уровню элементов в TreeView. Вы должны установить это так же как ItemContainerStyle TreeViewItems. Итак, в вашем ControlTemplate вам понадобится что-то вроде:
<ControlTemplate TargetType="TreeViewItem">
<TreeViewItem ItemContainerStyle="{StaticResource treeViewItemStyle}".../>
</ControlTemplate>
Еще лучше, вы можете просто удалить атрибут "x: Key" в вашем объявлении стиля. При этом стиль автоматически будет применен к all TreeViewItems.
ПОБОЧНОЕ ПРИМЕЧАНИЕ:
Я бы предложил, чтобы вместо переопределения ControlTemplate, как вы делали выше, просто используйте вместо этого свойство Setters в Style. Что-то вроде:
<Style TargetType="TreeViewItem">
<Setter Property="IsExpanded" Value="{Binding Path=IsExpanded, Mode=TwoWay}"/>
<Setter Property="ItemsSource" Value="{Binding Path=SubCategories}"/>
<Setter Property="ItemTemplate" Value="{StaticResource menuHierarchicalTemplate}"/>
<Setter Property="Header">
<Setter.Value>
<StackPanel Orientation="Horizontal" >
<TextBlock Height="24" FontSize="12" Padding="5" Text="{Binding Path=Name}" />
</StackPanel>
</Setter.Value>
</Setter>
</Style>
Довольно необычно использовать один и тот же элемент управления как часть самого шаблона ControlTemplate (т. Е. Используя TreeViewItem в шаблоне ControlT TreeViewItem).