【问题标题】: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 方法来动态绘制这样的东西。尽管以这种方式“渲染”的任何东西都会出现在所有子节点的后面,但它确实有一个缺点。尽管如此,在某些情况下该方法仍然有用。

标签: wpf panel itemscontrol


【解决方案1】:

Panel's IsItemsHost 属性可用于检查 Panel “是否是由 ItemsControl 生成的用户界面 (UI) 项的容器”

此属性可以在创建ItemsControl 模板时手动设置,但在使用ItemsPresenter 并使用ItemsControl's ItemsPanel property 指定面板时似乎也设置为true。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-15
    相关资源
    最近更新 更多