1
<ContentControl Content="Test">
    <ContentControl.ContentTemplate>
        <DataTemplate>
            <Border>
                <ContentPresenter />
            </Border>
        </DataTemplate>
    </ContentControl.ContentTemplate>
</ContentControl>

它抛出堆栈溢出异常。但是,如果我使用除 ContentPresenter 之外的任何其他控件,它也可以正常工作,即使 ItemPresenter 也可以工作。我知道将 ContentPresenter 放在那里没有任何意义,只是为了了解知识。为什么它会抛出 StackOverFlow 异常以及为什么 Intellisense 显示它可以添加(我的意思是它出现在 Intellisense 中,这意味着在语法上它没有错 ContentPresenter 在那里)。任何帮助都将受到高度重视。或者它是Wpf中的任何缺陷。

4

1 回答 1

0

ContentPresenter的 MSDN 页面说:

当 ContentPresenter 对象位于 ContentControl 的 ControlTemplate 中时,Content、ContentTemplate 和 ContentTemplateSelector 属性从 ContentControl 的同名属性中获取它们的值。您可以通过设置 ContentSource 属性或绑定到它们,让 ContentPresenter 属性从模板化父级的其他属性中获取这些属性的值。

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

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

<ContentControl Content="Test"> 
    <ContentControl.ContentTemplate> 
        <DataTemplate> 
            <Border> 
                <ContentPresenter ContentStringFormat="{}{0}" />
            </Border> 
        </DataTemplate> 
    </ContentControl.ContentTemplate> 
</ContentControl> 
于 2012-08-06T00:01:33.263 回答