Обратите внимание на следующую разметку:
<Style TargetType="{x:Type MenuItem}" x:Key="...">
<Setter Property="HeaderTemplate">
<Setter.Value>
<DataTemplate>
<ContentPresenter />
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
Когда этот стиль добавляется в файл разметки приложения, во время выполнения возникает StackOverflowException
.
Стиль применяется к элементам меню ContextMenu
, который присоединен к TreeViewItem
(или к последующему DataTemplate
для сгенерированного содержимого дерева);Исключение выдается при отпускании правой кнопки мыши и открытии контекстного меню.
Один из случаев использования ContextMenu
:
<DataTemplate x:Key="TviChaptersHeaderTemplate">
<StackPanel Orientation="Horizontal" Margin="0,2,0,2">
<Image Margin="2,0,0,0" Width="16" Height="16" Source="\Icons\pages.png" />
<TextBlock Text="{Binding}" Margin="5,0" />
<StackPanel.ContextMenu>
<ContextMenu>
<MenuItem Header="Add Chapter"
Style="{StaticResource STYLE}" />
</ContextMenu>
</StackPanel.ContextMenu>
</StackPanel>
</DataTemplate>
Исключение былоизолированный тегу <ContentPresenter />
внутри шаблона заголовка.Комментируя это очищает исключение.Что здесь происходит?