请注意以下标记:
<Style TargetType="{x:Type MenuItem}" x:Key="...">
<Setter Property="HeaderTemplate">
<Setter.Value>
<DataTemplate>
<ContentPresenter />
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
将此样式添加到应用程序标记文件时,StackOverflowException
会在运行时出现 a。
该样式被应用于ContextMenu
附加到 a (或生成的树内容TreeViewItem
的后续)的 a 的菜单项;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 />
标头模板内的标记。注释掉它会清除异常。这里发生了什么?