如何检查面板的孩子来自哪里?

Posted

技术标签:

【中文标题】如何检查面板的孩子来自哪里?【英文标题】:How to check where a Panel's Children come from? 【发布时间】:2015-03-06 13:07:52 【问题描述】:

我创建了一个自定义Panel,在其中我需要检查它的Children 是否通过手动操作集合来管理,或者面板是否用作ItemsPanelItemsControl

这是为了防止在尝试操作 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。

【讨论】:

以上是关于如何检查面板的孩子来自哪里?的主要内容,如果未能解决你的问题,请参考以下文章

检查权限的最佳位置在哪里?

Expression Blend 4 中的触发器面板在哪里?

这个价值来自哪里? [关闭]

中止陷阱错误:6 - 它来自哪里? - 数独求解器

XAMPP的Shell在哪里?

如何查看电脑里的系统日志