необходимо соблюдать следующую разметку:Использование ContentPresenter внутри MenuItem HeaderTemplate вызывает StackOverflowException
<Style TargetType="{x:Type MenuItem}" x:Key="...">
<Setter Property="HeaderTemplate">
<Setter.Value>
<DataTemplate>
<ContentPresenter />
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
Когда этот стиль будет добавлен в файл приложения разметки, StackOverflowException
происходит во время выполнения.
Стиль применяется к пунктам меню ContextMenu
, который прикреплен к TreeViewItem
(или последующему для сгенерированного дерева); Исключение генерируется при отпускании правой кнопки мыши и открытии контекстного меню.
Один из вариантов использования для 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 />
тега внутри шаблона заголовка. Замечание об этом исключает исключение. Что тут происходит?
Я могу воспроизвести переполнение стека, которое вы получаете. Однако мне непонятно, чего вы пытаетесь достичь. Не могли бы вы объяснить, почему вы пытаетесь использовать ContentPresenter таким образом? –
Luke - The HeaderTemplate, показанный в этом примере, заглушен, чтобы выделить проблему. Однако ContentPresenter фактически вложен в более сложный контент в производственный код. –
Вы не ответили на мой вопрос. * Почему вам нужно использовать «ContentPresenter» таким образом? –