1
請遵守以下標記:使用菜單項HeaderTemplate中的內部ContentPresenter導致StackOverflowException
<Style TargetType="{x:Type MenuItem}" x:Key="...">
<Setter Property="HeaderTemplate">
<Setter.Value>
<DataTemplate>
<ContentPresenter />
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
當這種風格被添加到應用程序的標記文件,StackOverflowException
在運行時發生。
該樣式正在應用於附加到TreeViewItem
(或生成的樹內容的後續DataTemplate
)的ContextMenu
的菜單項;當鼠標右鍵被釋放並且上下文菜單打開時,該異常會引發。
一個用例爲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嗎? – 2011-12-31 12:55:28
Luke-爲了突出顯示問題,本示例中顯示的HeaderTemplate已被刪除。但是,ContentPresenter實際上嵌套在生產代碼中更復雜的內容中。 – 2011-12-31 19:21:07
您還沒有回答我的問題。 *爲什麼*你需要使用ContentPresenter這種方式? – 2011-12-31 22:12:19