将ContentPresenter添加到ContentTemplate的例外情况

时间:2012-08-04 20:33:38

标签: c# wpf templates xaml wpf-controls

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

它抛出stackoverflow异常。但是,如果我使用除ContentPresenter之外的任何其他控件,它甚至可以正常工作.PartPresenter也可以工作。我知道在那里安装ContentPresenter没有任何意义,但只是知识想知道。为什么它会抛出StackOverFlow异常以及为什么Intellisense会显示它可以被添加(我的意思是它在Intellisense中出现,这意味着在那里使用ContentPresenter并没有错误)。任何帮助都会得到很高的评价。或者是Wpf中的任何缺陷。

1 个答案:

答案 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>