gpt4 book ai didi

.net - 自定义 DependencyObject 继承树

转载 作者:行者123 更新时间:2023-12-04 07:14:51 24 4
gpt4 key购买 nike

我正在努力寻找有关 DependencyObject 使用的属性继承树(或继承上下文)的足够信息。和 DependencyProperty .

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

如果对象 A 和对象 B 派生自 DependencyObject ,并且不是 UIElement 的子级(换句话说,对象 A 是它自己的根),那么你如何建立逻辑树以便 DependencyProperty明白 B 是 A 的 child 吗?

Hillberg Freezable Trick以及 Josh Smith's bag of tricks不是我要找的。我不想从现有元素树中检索属性...我想创建自己的非可视元素树...即控制继承上下文。

有谁知道这个知识体系隐藏在哪里?

最佳答案

经过大量研究和混淆 DependencyObject 的源代码,这是简短的答案:
InheritenceContext (显示实例的逻辑父级的属性)(就像 DependencyObject 的 90% 的有用实现一样)标记为内部,因此对 WindowsBase.dll 之外的所有代码都隐藏

可以使用反射来设置 _contextParent字段,以及调用这个隐藏方法来设置InheritenceContext ,但归根结底,它不是一个干净的解决方案。

淘完DependencyObject源代码,我不得不说我没有留下深刻的印象。 DependencyObject可以而且应该是一个非常干净、无处不在、可重用的类。
相反,它在结构上和行为上都绑定(bind)到它的继承者,甚至包含特定的常量、字段、方法和解决方法,以帮助 Freezable 与其他子类共存,这不仅与良好的 OO 设计相去甚远,而且还使一个其他出色的类在 WPF 框架之外完全无法使用。

关于.net - 自定义 DependencyObject 继承树,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/614624/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com