将 ContentPresenter 添加到 ContentTemplate 时的例外情况
本文关键字:情况 ContentTemplate ContentPresenter 添加 | 更新日期: 2024-10-25 21:59:03
<ContentControl Content="Test">
<ContentControl.ContentTemplate>
<DataTemplate>
<Border>
<ContentPresenter />
</Border>
</DataTemplate>
</ContentControl.ContentTemplate>
</ContentControl>
它抛出堆栈溢出异常。但是,如果我使用内容演示器以外的任何其他控件,即使项目演示器也可以正常工作,它也可以正常工作。我知道让ContentPresenter在那里没有任何意义,而只是为了知识想知道。为什么它会抛出 StackOverFlow 异常以及为什么智能感知显示它可以添加(我的意思是它在 Intellisense 中出现,这意味着在语法上将 ContentPresenter 放在那里并没有错)。任何帮助都将得到高度赞赏。还是WPF中的任何缺陷。
ContentPresenter 的 MSDN 页面显示:
当 ContentPresenter 对象位于 内容控件、内容、内容模板和 ContentTemplateSelector 属性从 与内容控件同名的属性。你可以拥有 属性从中获取这些属性的值 通过设置内容源的模板化父级的其他属性 属性或绑定到它们。
我想它给出了一个 StackOverflow,因为它只是继续尝试将模板应用于 ContentTemplate 中的 ContentPresenter,然后是其中的下一个模板,然后是其中的模板,等等。
您还可以执行以下操作,因此此模式可能并不总是错误的,即使 IntelliSense 可能不会对这些类型的方案进行任何检查。
<ContentControl Content="Test">
<ContentControl.ContentTemplate>
<DataTemplate>
<Border>
<ContentPresenter ContentStringFormat="{}{0}" />
</Border>
</DataTemplate>
</ContentControl.ContentTemplate>
</ContentControl>