如何检查面板的孩子来自哪里?
Posted
技术标签:
【中文标题】如何检查面板的孩子来自哪里?【英文标题】:How to check where a Panel's Children come from? 【发布时间】:2015-03-06 13:07:52 【问题描述】:我创建了一个自定义Panel
,在其中我需要检查它的Children
是否通过手动操作集合来管理,或者面板是否用作ItemsPanel
的ItemsControl
。
这是为了防止在尝试操作 Children
时引发以下异常。
无法显式修改用作 Panel 的 Children 集合 ItemsControl 的 ItemsPanel。 ItemsControl 生成子元素 面板。
如何区分面板的两种不同用法?
【问题讨论】:
请问您为什么要修改孩子的集合? Panel 的意义不就是单纯地通过测量和排列子元素来布局它们吗? @StevenRands 这是一个公平的问题,我也不能完全确定这是一个好主意。无论如何,场景是我向面板 (search for 'LabelFactories' here) 添加了指定“工厂”的功能,该面板管理需要在面板上显示的经常性标签。卸载面板时,我需要删除工厂添加的标签,但仅在使用工厂时(而不是ItemsSource
)。
好的,我明白了。过去我使用面板的OnRender
方法来动态绘制这样的东西。尽管以这种方式“渲染”的任何东西都会出现在所有子节点的后面,但它确实有一个缺点。尽管如此,在某些情况下该方法仍然有用。
【参考方案1】:
Panel's IsItemsHost
属性可用于检查 Panel “是否是由 ItemsControl 生成的用户界面 (UI) 项的容器”。
此属性可以在创建ItemsControl
模板时手动设置,但在使用ItemsPresenter
并使用ItemsControl
's ItemsPanel
property 指定面板时似乎也设置为true。
【讨论】:
以上是关于如何检查面板的孩子来自哪里?的主要内容,如果未能解决你的问题,请参考以下文章