.net 自定义DependencyObject继承树
我正在努力寻找有关.net 自定义DependencyObject继承树,.net,wpf,dependency-properties,dependencyobject,.net,Wpf,Dependency Properties,Dependencyobject,我正在努力寻找有关DependencyObject和DependencyProperty使用的属性继承树(或继承上下文)的足够信息 我想在典型的WPF页面之外使用dependencProperty的值继承功能,这样对象a就是逻辑父对象B,因此分配给对象a上属性的值将自动分配给对象B,除非它已在本地设置(有点像WPF中的FlowDirection属性) 如果对象A和对象B是从DependencyObject派生的,并且不是UIElement的子元素(换句话说,对象A是它自己的根),那么如何建立逻辑
DependencyObject
和DependencyProperty
使用的属性继承树(或继承上下文)的足够信息
我想在典型的WPF页面之外使用dependencProperty
的值继承功能,这样对象a就是逻辑父对象B,因此分配给对象a上属性的值将自动分配给对象B,除非它已在本地设置(有点像WPF中的FlowDirection
属性)
如果对象A和对象B是从DependencyObject
派生的,并且不是UIElement
的子元素(换句话说,对象A是它自己的根),那么如何建立逻辑树,以便DependencyProperty
理解B是A的子元素
以及不是我想要的。我不想从现有元素树中检索属性…我想创建自己的非可视元素树…也就是说,控制继承上下文
有人知道这一知识体系隐藏在哪里吗?我想你是在问关于向孩子传播价值观的问题,这些价值观本身并没有覆盖价值观 据我所知,WPF元素有子元素的概念是由
ContentControl
引入的。这在层次结构中的作用远比您想要的要深。因此,我假设,如果您只是从DependencyObject
派生,则此行为不会表现出来
具体地说,孩子需要知道询问父母是否对给定的属性没有值
有趣的问题。我也想知道完整的答案。经过大量的研究和对
DependencyObject
的源代码的摸索,以下是简短的答案:
inheritancecontext
(显示实例的逻辑父级的属性)被标记为内部(就像DependencyObject
的90%的有用实现一样),因此对WindowsBase.dll之外的所有代码保持隐藏
可以使用反射来设置\u contextParent
字段,也可以调用此隐藏方法来设置inheritancecontext
,但最终这不是一个干净的解决方案
在浏览了DependencyObject
源代码之后,我不得不说我没什么印象。DependencyObject
可以而且应该是一个非常干净、无处不在、可重用的类。
相反,它在结构上和行为上都与它的继承者绑定,甚至包含特定的常量、字段、方法和变通方法,以帮助Freezable与其他子类共存,这不仅远远偏离了良好的OO设计,而且还使得一个在WPF框架之外完全无法使用的优秀类。为之欢呼这个有趣问题的答案。遗憾的是,这些类型的属性需要一个特定的基类,尽管除了语言/编译器支持(Freezable也是如此),我想不出更好的解决方案。你能分享你想要的解决方案吗?你做了你自己的“DependencyObject”实现?我很好奇你是如何解决你的问题的。你是否编写了自己的树/继承/DP机制?找到任何库来帮助你吗?我正在尝试做类似的事情。