这不是框架中的错误。这是你的代码中的一个错误。逻辑错误。
重要的是要知道,
ContentPresenter
是ContentControl
的内容宿主。
ContentControl.Content
已分配(TextBlock
)。
ContentControl.ContentTemplate
被加载并分配给 ContentPresenter
的内部 ContentControl
。 ContentPresenter
中的 DataTemplate
的新父级现在是 ContentPresenter
的 ContentControl
!
DataTemplate
包含ContentPresenter
。 ContentPresenter
还包含 Content
和 ContentTemplate
属性。如果未设置它们,则 ContentPresenter
将使用 ContentSource
属性从模板化父级中查找值。默认情况下,ContenSource
设置为 "Content"
。这告诉 ContentPresenter
内的 DataTemplate
获取以 "Content"
开头的视觉父级属性的值。这是 ContentControl.Content
和 ContentPresenter.ContentTemplate
属性。
ContentPresenter
现在“继承”了DataTemplate from the
ContentPresenterof the
ContentControl`。
继承的
DataTemplate
应用于 ContentPresenter
。
因为继承的
DataTemplate
包含 ContentPresenter
,新 ContentPresenter
的新父级是最后一个 ContentPresenter
:它再次从新父级 ControlTemplate
继承 ContentPresenter
,无限循环开始,重复 3) 的过程
==> 换句话说,您正在将
ContenPresenter
添加到 ContentPresenter
的 ContentControl
中。 ContentPresenter
“继承”DataTemplate
,它有效地将另一个ContentPresenter
添加到ContentPresenter
,它继承了DataTemplate
以将另一个ContentPresenter
添加到ContentPresenter
...
问题是,为什么要首先添加
contentPresenter to the
DataTemplate`?该代码没有任何意义。该逻辑错误会导致无限循环。 WPF 的行为完全正常。