次のマークアップに注意してください。
<Style TargetType="{x:Type MenuItem}" x:Key="...">
<Setter Property="HeaderTemplate">
<Setter.Value>
<DataTemplate>
<ContentPresenter />
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
このスタイルがアプリケーション マークアップ ファイルに追加されると、StackOverflowException
実行時に が発生します。
スタイルは、(または生成されたツリー コンテンツの後続の)ContextMenu
にアタッチされている のメニュー項目に適用されています。マウスの右ボタンが離され、コンテキスト メニューが開かれる予定である場合、例外がスローされます。TreeViewItem
DataTemplate
の使用例の 1 つを次に示します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 />
例外は、ヘッダー テンプレート内のタグに分離されています。コメントアウトすると、例外がクリアされます。何が起きてる?