首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >自定义DependencyObject继承树

自定义DependencyObject继承树
EN

Stack Overflow用户
提问于 2009-03-05 12:46:32
回答 2查看 888关注 0票数 8

我很难找到关于DependencyObjectDependencyProperty使用的属性继承树(或继承性上下文)的足够信息。

我想在一个典型的WPF页面之外使用DependencyProperty的值继承能力,例如对象A是逻辑父对象B,因此分配给对象A上的属性的值将自动与对象B相对应,除非它是本地设置的(有点像FlowDirection属性在WPF中工作)。

如果对象A和对象B是从DependencyObject派生出来的,并且不是UIElement的子对象(换句话说,对象A是它自己的根),那么如何建立逻辑树以使DependencyProperty理解B是A的子项?

Hillberg可冻诡计乔希·史密斯的小把戏并不是我想要的。我不想从现有的元素树中检索属性.我想要创建我自己的非视觉元素树.即对继承上下文有控制权。

有人知道这个知识藏在哪里吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-03-06 08:12:51

在对DependencyObject的源代码进行了大量的研究和混淆之后,下面是一个简短的答案:

InheritenceContext (该属性显示实例的逻辑父级)被标记为内部(与DependencyObject有用实现的90%类似),因此对WindowsBase.dll以外的所有代码保持隐藏。

可以使用反射来设置_contextParent字段,也可以调用这个隐藏方法来设置InheritenceContext,但最终它并不是一个干净的解决方案。

在浏览了DependencyObject源代码之后,我不得不说,我对此并不感兴趣。DependencyObject可以而且应该是一个非常干净、无处不在、可重用的类。相反,它在结构和行为上绑定到它的继承者,甚至包含特定的常量、字段、方法和工作环境--以帮助其他子类与其他子类共存,这不仅偏离了良好的OO设计,而且使一个在WPF框架之外完全无法使用的优秀类完全不可用。

票数 11
EN

Stack Overflow用户

发布于 2009-03-05 13:28:58

我假设您是在询问将值传播到不覆盖值本身的子节点的问题。

据我所知,WPF元素有子元素的概念是由ContentControl引入的。这在层次结构中发挥的作用比你想要的要远得多。因此,我假设,如果您只是从DependencyObject中派生出这种行为,那么这种行为就不会显现出来。

具体来说,一个子属性需要知道是否它没有给定属性的值。

有趣的问题。我也想知道完整的答案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/614624

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档