Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 自定义DependencyObject继承树_.net_Wpf_Dependency Properties_Dependencyobject - Fatal编程技术网

.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机制?找到任何库来帮助你吗?我正在尝试做类似的事情。