<ContentControl Content="Test">
<ContentControl.ContentTemplate>
<DataTemplate>
<Border>
<ContentPresenter />
</Border>
</DataTemplate>
</ContentControl.ContentTemplate>
</ContentControl>
它抛出stackoverflow异常。但是,如果我使用除ContentPresenter之外的任何其他控件,它甚至可以正常工作.PartPresenter也可以工作。我知道在那里安装ContentPresenter没有任何意义,但只是知识想知道。为什么它会抛出StackOverFlow异常以及为什么Intellisense会显示它可以被添加(我的意思是它在Intellisense中出现,这意味着在那里使用ContentPresenter并没有错误)。任何帮助都会得到很高的评价。或者是Wpf中的任何缺陷。
答案 0 :(得分:0)
ContentPresenter的MSDN页面说:
当ContentPresenter对象位于的ControlTemplate中时 ContentControl,Content,ContentTemplate和 ContentTemplateSelector属性从中获取它们的值 ContentControl的相同名称的属性。你可以拥有 ContentPresenter属性从中获取这些属性的值 通过设置ContentSource,模板化父级的其他属性 财产或与他们绑定。
我想它会给出一个StackOverflow,因为它只是继续尝试将模板应用于ContentTemplate中的ContentPresenter,然后是内部的下一个,然后是里面的那个,等等。
你也可以做以下事情,所以这种模式可能并不总是错误的,即使IntelliSense可能不会检查这些场景。
<ContentControl Content="Test">
<ContentControl.ContentTemplate>
<DataTemplate>
<Border>
<ContentPresenter ContentStringFormat="{}{0}" />
</Border>
</DataTemplate>
</ContentControl.ContentTemplate>
</ContentControl>