问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何理解WPF中的依赖项属性

发布网友 发布时间:2022-04-30 02:48

我来回答

2个回答

懂视网 时间:2022-04-30 07:09


比如:我们查看DataGridColumnHeader的Content依赖属性 
 1.我们用到的windbg的命令有:!do, !da -details, .formats 2.利用!do查看依赖对象的成员变量, 找到具体依赖属性的地址0:000> !do 00000000039a71d8Name:        System.Windows.Controls.Primitives.DataGridColumnHeaderMethodTable: 000007fee7e58090EEClass:     000007fee7885bd8Size:        384(0x180) bytesFile:        C:WindowsMicrosoft.NetassemblyGAC_MSILPresentationFrameworkv4.0_4.0.0.0__31bf3856ad364e35PresentationFramework.dllFields:              MT    Field   Offset                 Type VT     Attr            Value Name000007fef3f2eb00  4000db0        8 ...eading.Dispatcher  0 instance 0000000002dd4e68 _dispatcher000007fef3f3bb88  4001321       10 ...endencyObjectType  0 instance 000000000308a530 _dType000007fef7825ac8  4001322       18        System.Object  0 instance 0000000000000000 _contextStorage000007fef3f3e898  4001323       20 ...ctiveValueEntry[]  0 instance 00000000042efb08 _effectiveValues000007fef7847b70  4001324       28        System.UInt32  1 instance          3680277 _packedData000007fef3f33708  400131f      7c0 ...ependencyProperty  0   static 0000000002dd5ef0 DirectDependencyProperty---------------------省略部分----000007fef3f33708  40002ca      950 ...ependencyProperty  0   static 0000000002dfd820 ContentProperty0000000000000000  40002cb      958                       0   static 0000000002dfd908 HasContentPropertyKey000007fef3f33708  40002cc      960 ...ependencyProperty  0   static 0000000002dfd948 HasContentProperty000007fef3f33708  40002cd      968 ...ependencyProperty  0   static 0000000002dfdb00 ContentTemplateProperty000007fef3f33708  40002ce      970 ...ependencyProperty  0   static 0000000002dfdc80 ContentTemplateSelectorProperty
3.利用!do命令查看依赖属性的成员变量值, 比如:0:000> !do 0000000002dfd820Name:        System.Windows.DependencyPropertyMethodTable: 000007fef3f33708EEClass:     000007fef3dd7550Size:        88(0x58) bytesFile:        C:WindowsMicrosoft.NetassemblyGAC_MSILWindowsBasev4.0_4.0.0.0__31bf3856ad364e35WindowsBase.dllFields:              MT    Field   Offset                 Type VT     Attr            Value Name000007fef7826970  400133c        8        System.String  0 instance 0000000002dfd630 _name000007fef78282f8  400133d       10          System.Type  0 instance 0000000002d444b0 _propertyType000007fef78282f8  400133e       18          System.Type  0 instance 0000000002dfab80 _ownerType000007fef3f312a8  400133f       20 ....PropertyMetadata  0 instance 0000000002dfd7c0 _defaultMetadata000007fef3f31088  4001340       28 ...dateValueCallback  0 instance 0000000000000000 _validateValueCallback000007fef3f3e750  4001341       30 ...ndencyPropertyKey  0 instance 0000000000000000 _readOnlyKey000007fef4194818  4001342       40         System.Int32  1 instance          4194530 _packedData000007fef3f3e408  4001343       48 ....InsertionSortMap  1 instance 0000000002dfd868 _metadataMap000007fef3f30fc8  4001344       38 ...erceValueCallback  0 instance 0000000000000000 _designerCoerceValueCallback000007fef7825ac8  400133b      808        System.Object  0   static 0000000002d72000 UnsetValue000007fef3f3c6c0  4001345      800 ...ty, WindowsBase]]  1   static 0000000012d5bb10 RegisteredPropertyList000007fef7831c38  4001346      810 ...ections.Hashtable  0   static 0000000002d6f3d8 PropertyFromName000007fef782c858  4001347      5c8         System.Int32  1   static              868 GlobalIndexCount000007fef7825ac8  4001348      818        System.Object  0   static 0000000002d6f430 Synchronized000007fef78282f8  4001349      820          System.Type  0   static 0000000002d68808 NullableType
4.利用.formats 得到依赖属性, 分2步  1)利用.formats 0n得到_packedData十六进制  2)   去掉高位,Decimal描述的就是依赖属性在依赖对象中的存储索引
  如下:0:000> .formats 0n4194530Evaluate expression:  Hex:     00000000`004000e2  Decimal: 4194530  Octal:   0000000000000020000342  Binary:  00000000 00000000 00000000 00000000 00000000 01000000 00000000 11100010  Chars:   .....@..  Time:    Wed Feb 18 21:08:50 1970  Float:   low 5.87779e-039 high 0  Double:  2.07237e-3170:000> .formats 00e2Evaluate expression:  Hex:     00000000`000000e2  Decimal: 226  Octal:   0000000000000000000342  Binary:  00000000 00000000 00000000 00000000 00000000 00000000 00000000 11100010  Chars:   ........  Time:    Thu Jan 01 08:03:46 1970  Float:   low 3.16693e-043 high 0  Double:  1.11659e-321
可知ContentProperty依赖属性在DataGridColumnHeader中的索引为226
5. 根据第4步的index,从第2步依赖对象的_effectiveValues 得到依赖属性的具体值,分3步:  1)利用!da -details 查看_effectiveValues 数组所有元素的值  2)查看每个元素,根据_propertyIndex (即第4步得到的Decimal值)确定依赖属性  3)利用!do命令查看元素的_value成员的值
 比如:
0:000> !da -details 00000000042efb08Name:        System.Windows.EffectiveValueEntry[]MethodTable: 000007fef3f3e898EEClass:     000007fef3e0c8a0Size:        408(0x198) bytesArray:       Rank 1, Number of elements 24, Type VALUETYPEElement Methodtable: 000007fef3f36120[0] 00000000042efb18    Name:        System.Windows.EffectiveValueEntry    MethodTable: 000007fef3f36120    EEClass:     000007fef3dd8c90    Size:        32(0x20) bytes    File:        C:WindowsMicrosoft.NetassemblyGAC_MSILWindowsBasev4.0_4.0.0.0__31bf3856ad364e35WindowsBase.dll    Fields:                      MT    Field   Offset                 Type VT     Attr            Value Name        000007fef7825ac8  400136e        0            System.Object      0     instance     0000000002e1c5d8     _value        000007fef7830940  400136f        8             System.Int16      1     instance                    3     _propertyIndex        000007fef41949d0  4001370        a             System.Int16      1     instance                    2     _source
--------------------------------省略部分------------------------------
[15] 00000000042efc08    Name:        System.Windows.EffectiveValueEntry    MethodTable: 000007fef3f36120    EEClass:     000007fef3dd8c90    Size:        32(0x20) bytes    File:        C:WindowsMicrosoft.NetassemblyGAC_MSILWindowsBasev4.0_4.0.0.0__31bf3856ad364e35WindowsBase.dll    Fields:                      MT    Field   Offset                 Type VT     Attr            Value Name        000007fef7825ac8  400136e        0            System.Object      0     instance     00000000042efca0     _value        000007fef7830940  400136f        8             System.Int16      1     instance                  226     _propertyIndex        000007fef41949d0  4001370        a             System.Int16      1     instance                   65     _source

 可知ContentProperty为_effectiveValues的第16个元素, 其值存储在_value中
  0:000> !do 00000000042efca0    Name:        System.Windows.ModifiedValueMethodTable: 000007fef3f40d58EEClass:     000007fef3e0d000Size:        48(0x30) bytesFile:        C:WindowsMicrosoft.NetassemblyGAC_MSILWindowsBasev4.0_4.0.0.0__31bf3856ad364e35WindowsBase.dllFields:              MT    Field   Offset                 Type VT     Attr            Value Name000007fef7825ac8  4001387        8        System.Object  0 instance 0000000000000000 _baseValue000007fef7825ac8  4001388       10        System.Object  0 instance 0000000000000000 _expressionValue000007fef7825ac8  4001389       18        System.Object  0 instance 0000000000000000 _animatedValue000007fef7825ac8  400138a       20        System.Object  0 instance 0000000002d93618 _coercedValue
6.根据第5步中的成员_coercedValue得到依赖属性的具体值,大功告成!
0:000> !do 0000000002d93618Name:        System.StringMethodTable: 000007fef7826970EEClass:     000007fef73aeec8Size:        36(0x24) bytesFile:        C:WindowsMicrosoft.NetassemblyGAC_64mscorlibv4.0_4.0.0.0__b77a5c561934e089mscorlib.dllString:      导入数据源Fields:              MT    Field   Offset                 Type VT     Attr            Value Name000007fef782c858  40000ed        8         System.Int32  1 instance                5 m_stringLength000007fef782b398  40000ee        c          System.Char  1 instance             5bfc m_firstChar000007fef7826970  40000ef       10        System.String  0   shared           static Empty                                 >> Domain:Value  00000000007f85a0:0000000002d41420 <<


版权声明:本文为博主原创文章,欢迎转载,仅请署名

Windbg调试WPF的依赖属性

标签:wpf   dependencyproperty   dependencyobject   windbg   依赖属性   

热心网友 时间:2022-04-30 04:17

依赖属性可支持WPF中的样式设置、数据绑定、继承、动画及默认值。依赖项属性是通过调用 Register 方法(或 RegisterReadOnly)在 WPF 属性系统中注册,并通过 DependencyProperty 标识符标示属性。 依赖项属性只能由继承自 DependencyObject 类的类型使用,但 DependencyObject 在 WPF 类层次结构中的级别很高,因此,WPF 中的大多数可用类都支持依赖项属性。
如何理解WPF中的依赖项属性

依赖属性就是自己自己没有值,通过Binding从数据源获得值,就是依赖在别人身上,拥有依赖属性的对象称为依赖对象。几种应用依赖属性的场景:1. 希望可在样式中设置属性。2. 希望属性支持数据绑定。3. 希望可使用动态资源引用设置属性。4. 希望从元素树中的父元素自动继承属性值。5. 希望属性可进行动画...

简单点说:wpf中依赖项属性与普通属性的异同

不是。依赖属性是要注册的,而且通常都是改变时候会触发类的响应。class a { int r;这是个属性,但是改变的时候不会发生什么,只是r的值变了。但是如果是一个控件的长,它改变的时候就会直接在ui表现出来,会立刻改变空间的长,这就是依赖属性,这样理解比较形象。} ...

C#/WPF高手进!关于依赖属性、附加属性等声明方式以及静态构造函数、静态...

WPF里的依赖属性 都是 继承 自 DependencyObject。对于 依赖属性 和 附加依赖属性的 那个静态量,你可以当做一个Key。在 DependencyObject 的内部有一个 类似与字典的东西,通过当前这个Key去取里面的取,得到你最终的属性值。你可以去微软官网上查看源码。定义依赖属性的时候,一般我们都会定义一个 属性...

WPF基础教程之属性系统

依赖项属性 一个由 DependencyProperty 支持的属性 依赖项属性标识符 一个 DependencyProperty 实例 在注册依赖项属性时作为返回值获得 之后将存储为一个类成员 在与 WPF 属性系统交互的许多 API 中 此标识符用作一个参数 CLR 包装 属性的实际 get 和 set 实现 这些实现通过在 GetValue 和 SetValue 调...

xaml中如何初始化数组类型的依赖属性

字段来支持公共语言运行时 (CLR) 属性,从而定义一个依赖项属性。当您定义自己的属性并需要它们支持 Windows Presentation Foundation (WPF) 功能的诸多方面(包括样式、数据绑定、继承、动画和默认值)时,应将其实现为依赖项属性。

C# wpf 怎么注册枚举的依赖项属性

可以把枚举枚举定义在控件的CS类里 定义成public 然后属性类型就写定义的枚举类型就行

WPF启动动画时提示如下错误:“[Unknown]”属性未指向路径“(0).(1...

WPF里动画执行的属性是依赖项 比如如果你用的方法是xx.BeginAnimation()这种方法,那么,方法的第一个参数应该是比如 WidthProperty 如果是Stroyboard方式 那么应该是 new PropertyPath("Width")

WPF绑定与RelativeSource结合使用

本文揭示了在WPF中结合使用StaticResources、DynamicResources与RelativeSource进行属性绑定的多种具体应用场景。RelativeSource标记扩展在自定义控件开发和处理一系列绑定数据时,用于将依赖属性值绑定到XAML的特定元素。接下来,我们将深入探讨几种关键的RelativeSource用法。首先,考虑一个矩形,其高度始终等于宽度的...

通过Demo学WPF—数据绑定(一)✨

再来看看Path,表示绑定源属性的路径,Path="PersonName"表示绑定源是刚刚那个Person对象的PersonName属性。最后再看看UpdateSourceTrigger属性,它表示当绑定目标怎么样时,绑定源的值应该被更新。在SimpleBindingDemo中,我们设置UpdateSourceTrigger属性为PropertyChanged,这是因为大多数依赖项属性的默认值为...

WPF完全揭秘目录

第2章详细解析了XAML的使用,包括元素的子元素、内容属性和集合项,以及性能上的讨论。逻辑树和可视树的概念在第3章中引入,依赖属性、路由事件和命令是WPF的重要新概念,它们使得应用程序设计更加灵活和高效。第4章至第14章分别介绍了WPF控件、尺寸缩放、布局、数据绑定、样式与多媒体功能,让应用更具...

非主属性对主属性的部分依赖 人的知觉的理解性依赖于 wpf依赖属性和普通属性 属性不依赖于其他非主属性 wpf依赖属性详解 主属性的传递依赖 多值依赖的通俗理解 依赖属性 wpf依赖属性
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
肝胆管结石如何治疗 胆管结石微创好还是手术好 14,l5,17它们一起的最小公倍数 16+17+14,最小的公因数? ...R17刚上市,大家感觉怎么样呢?我看到vivox23的曝光图好像也不错耶... vivox23拍摄曝光和感光度怎么不能一起用? 棚室黄瓜沤根的症状,棚室黄瓜沤根的防治方法 定期存款利息税是多少 黄瓜沤根是咋回事 黄瓜沤根病防治方法 17寸1280*1024点距大 还是23寸1080P点距大? 800X600分辨率和 1280x800dpi的分辨率有多大差别?我想选个投影仪 看720P的高清和1080P的哪个分辨率适合 22寸显示器和17寸显示器显示同一个电影有什么区别。 看电影为什么纯平17寸显示器比22寸要清晰 17寸显示器分辨率可以改成1920&#x2718;1080吗? 普通17寸纯平CRT显示器能不能看1080P和720P的电影? 17寸看1080P和720P有什么区别? 为什么增值税不计入主营业务税金及附加? 分辨率1920×1080,是17寸的显示器吗? 增值税为什么不走主营业务税金及附加科目? 17寸纯平显示器能不能支持1080P的高清视频电影啊? 在17寸上的液晶电脑显示器上看720P的电影和1080P的 有区别吗? 增值税是主营业务税金及附加吗 应交增值税属不属于营业税金及附加,是否应该结转入本年利润? 增值税不属于主营业务税金及附加吗 华为荣耀平板t7支持128G的内存卡 华为荣耀平板t7支持128G的内存卡 吃辣的 对肠胃好吗?拜托各位大神 长吃辣椒是否对身体有害? 辣椒对身体有什么影响? 4GB的内存可以同时存多少歌,多少视屏,多少本书? 电脑内存4GB.是多少兆? 波轮洗衣机可以放洗衣袋吗 真心不明白WPF依赖属性有什么作用 苹果6s充电发烫严重是怎么回事? 苹果6S充电为什么充电器发热 如何看加权限的qq空间 吃辣椒对身体什么影响 哪位大虾能够很好的解释下WPF的CLR属性和依赖属性的?请不要粘贴官方文档 柠檬连皮和芹菜煮水可以减肥吗 装了查看内部券的插件后,内部优惠券为什么有的人看得到有些人看不到? 六年级数学试卷上册(新课标·北师) 六年级数学上册试题 六年级课标版上册数学期末试卷 在WPF中,依赖属性和附加属性之间有什么区别 要如何让才能让衣服颜色稍微变淡一点啊? 买了一件墨绿色的衣服,想让它的颜色变的浅一点,有什么办法吗 请问怎么用84消毒液把衣服的颜色弄淡一点? 手机美图秀秀怎么调节微信头像大小 移动仙贝王卡哪有办理渠道?