WPF 错误? Popup、ContentControl 和 ContentTemplate 引发堆栈溢出异常

问题描述 投票:0回答:1
wpf popup contentcontrol contenttemplate
1个回答
0
投票

这不是框架中的错误。这是你的代码中的一个错误。逻辑错误。

重要的是要知道,

ContentPresenter
ContentControl
的内容宿主。

  1. ContentControl.Content
    已分配(
    TextBlock
    )。

  2. ContentControl.ContentTemplate
    被加载并分配给
    ContentPresenter
    的内部
    ContentControl
    ContentPresenter
    中的
    DataTemplate
    的新父级现在是
    ContentPresenter
    ContentControl

  3. DataTemplate
    包含
    ContentPresenter
    ContentPresenter
    还包含
    Content
    ContentTemplate
    属性。如果未设置它们,则
    ContentPresenter
    将使用
    ContentSource
    属性从模板化父级中查找值。默认情况下,
    ContenSource
    设置为
    "Content"
    。这告诉
    ContentPresenter
    内的
    DataTemplate
    获取以
    "Content"
    开头的视觉父级属性的值。这是
    ContentControl.Content
    ContentPresenter.ContentTemplate
    属性。

  4. ContentPresenter
    现在“继承”了
    DataTemplate from the 
    ContentPresenter
    of the
    ContentControl`。

  5. 继承的

    DataTemplate
    应用于
    ContentPresenter

  6. 因为继承的

    DataTemplate
    包含
    ContentPresenter
    ,新
    ContentPresenter
    的新父级是最后一个
    ContentPresenter
    :它再次从新父级
    ControlTemplate
    继承
    ContentPresenter
    ,无限循环开始,重复 3) 的过程

==> 换句话说,您正在将

ContenPresenter
添加到
ContentPresenter
ContentControl
中。
ContentPresenter
“继承”
DataTemplate
,它有效地将另一个
ContentPresenter
添加到
ContentPresenter
,它继承了
DataTemplate
以将另一个
ContentPresenter
添加到
ContentPresenter
...

问题是,为什么要首先添加

contentPresenter to the 
DataTemplate`?该代码没有任何意义。该逻辑错误会导致无限循环。 WPF 的行为完全正常。

© www.soinside.com 2019 - 2024. All rights reserved.