将 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 添加到 ContentTemplate 时的例外情况

ContentPresenter 的 MSDN 页面显示:

当 ContentPresenter 对象位于 内容控件、内容、内容模板和 ContentTemplateSelector 属性从 与内容控件同名的属性。你可以拥有 属性从中获取这些属性的值 通过设置内容源的模板化父级的其他属性 属性或绑定到它们。

我想它给出了一个 StackOverflow,因为它只是继续尝试将模板应用于 ContentTemplate 中的 ContentPresenter,然后是其中的下一个模板,然后是其中的模板,等等。

您还可以执行以下操作,因此此模式可能并不总是错误的,即使 IntelliSense 可能不会对这些类型的方案进行任何检查。

<ContentControl Content="Test"> 
    <ContentControl.ContentTemplate> 
        <DataTemplate> 
            <Border> 
                <ContentPresenter ContentStringFormat="{}{0}" />
            </Border> 
        </DataTemplate> 
    </ContentControl.ContentTemplate> 
</ContentControl>