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

真心不明白WPF依赖属性有什么作用

发布网友 发布时间:2022-04-08 01:51

我来回答

2个回答

懂视网 时间:2022-04-08 06:12


比如:我们查看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-08 03:20

依赖属性相比于普通.net属性的区别就是依赖,故名思议,各种属性之间有依赖关系,而普通.net属性是没定义这种关系的。依赖属性在WPF内部的存储是某种成为“稀疏矩阵”的方式,可以大大减少属性占用的空间,提升程序性能。追问WPF 绑定数据一定要用 这种属性吗?

追答对的。

依赖属性是什么意思?

依赖属性的主要用途是在WPF界面中实现数据绑定和属性控制。比如,在一个按钮的IsEnabled属性依赖于一个CheckBox控件的IsChecked属性时,只需要在XAML中声明依赖属性关系,就可以实现数据绑定和自动更新。另外,在自定义控件中,依赖属性也是常用的技术手段,可以轻松实现自定义属性的扩展和控制。

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

5. 希望属性可进行动画处理。6. 希望属性系统在属性系统、环境或用户执行的操作或者读取并使用样式更改了属性以前的值时报告。7. 希望使用已建立的、WPF 进程也使用的元数据约定,例如报告更改属性值时是否要求布局系统重新编写元素的可视化对象。依赖对象创建时并不包含存储数据空间。WPF中必须使用依赖对象...

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

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

在WPF中,依赖属性和附加属性之间有什么区别

其实属性就是对外暴漏接口罢了,注册依赖属性后就是给依赖属性赋值(set),或者问依赖属性取值(get),这些操作封装到了DependencyObject类里面,所有用过的属性的值都通过 List&lt;EffectiveValueEntry&gt; _effectiveValues = new List&lt;EffectiveValueEntry&gt;()来存储和维护。这样就不会污染最初的默认value。这里...

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

都是以静态的方式表现的。好处的话:可能是为了现绑定之类的功能吧,这块的源码真没注意过。为了共享属性的默认值。在定义依赖属性的时候会给一个默认值,平时大家用控件的时候,不会设置所有的值,用依赖项属性,如果不去设置,页面上所有的控件,都会共用这个值。现在想到的就这么多啦。

C# .NET面试系列五:WPF

依赖属性是WPF的特性,相比普通属性,它支持值计算、资源系统集成等,用于优化性能和资源管理,是数据绑定、样式和动画的关键。WPF中的样式和模板允许开发者定制控件外观、布局,提供了高度的灵活性。而数据绑定则深入到控件、路径、双向绑定以及转换器等细节中。Visual、UIElement、FrameworkElement和Control在...

WPF和Silverlight的具体区别?

依赖关系属性是两个平台的重要组成部分,使用PropertyMetadata可代替普通字段来保存属性。Silverlight仅提供了该类,而WPF却有若干子类型可用。UIPropertyMetadata添加了一个标识符,用于决定“在使用了元数据实例的地方,是否应该禁播依赖关系属性的动画”FrameworkPropertyMetadata添加一个标识符来指示影响管道的那些...

WPF上位机自定义控件系列:表格 WxDataGrid 功能增强版

为了实现行号,我们尝试了两种策略。一是设计DataGridRowHeader的样式,通过一个转换器将DataGridRow转换为行号指示。这种方法的优点在于直观,但有一个局限:当数据删除时,行号不会自动更新。第二种方法是利用依赖属性,这种方法更为灵活,能够确保数据删除时行号的实时更新,特别是在LoadingRow和UnloadingRow...

WPF基础教程之属性系统

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

WPF中的DependencyProperty和普通类中的属性有何区别

普通属性就不行。给你些链接做参考吧:http://www.silverlightchina.net/html/study/WPF/2012/1009/19341.html http://www.silverlightchina.net/html/study/WPF/2012/0824/18357.html http://www.silverlightchina.net/html/study/WPF/2012/0308/14354.html 希望对你有用!~...

属性不依赖于其他非主属性 wpf依赖属性和普通属性 什么是对主属性部分依赖 对主属性部分依赖什么意思 非主属性对主属性的部分依赖 所有非主属性完全依赖 依赖属性 wpf依赖属性 判断主属性部分依赖
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
10岁孩子初学者古筝要买什么样的好 ...后部是横向裂纹,较多,有好多年了,请问是何原因?谢谢 舌面上有裂纹,是舌炎吗?用什么药治疗? ...单位的回复邮件,全是英文啊!! 请问我要怎么回复?他是想问我什么时 ... 有哪些期《RunningMan》是值得推荐给别人看的 runningman2011全集下载, running man 全集中字高清下载 打包的哦 r 上饶信州中等专业学校可以考大学吗 内分泌是一个什么系统 叶利钦与戈尔巴乔夫曾经争论过什么? 通货膨胀缺口的通货膨胀缺口的出处是那? 波轮洗衣机可以放洗衣袋吗 电脑内存4GB.是多少兆? 4GB的内存可以同时存多少歌,多少视屏,多少本书? 如何理解WPF中的依赖项属性 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的内存卡 苹果6s充电发烫严重是怎么回事? 苹果6S充电为什么充电器发热 如何看加权限的qq空间 吃辣椒对身体什么影响 哪位大虾能够很好的解释下WPF的CLR属性和依赖属性的?请不要粘贴官方文档 柠檬连皮和芹菜煮水可以减肥吗 装了查看内部券的插件后,内部优惠券为什么有的人看得到有些人看不到? 六年级数学试卷上册(新课标·北师) 六年级数学上册试题 六年级课标版上册数学期末试卷 在WPF中,依赖属性和附加属性之间有什么区别 要如何让才能让衣服颜色稍微变淡一点啊? 买了一件墨绿色的衣服,想让它的颜色变的浅一点,有什么办法吗 请问怎么用84消毒液把衣服的颜色弄淡一点? 手机美图秀秀怎么调节微信头像大小 移动仙贝王卡哪有办理渠道? 迈克尔杰克逊的遗体,为什么也总是不被人放过? 迈克尔 杰克逊丑闻那么多,为什么人们还那么爱他? 奥普拉和迈克尔杰克逊有什么关系? 我是谜彼得潘凶手是小红帽吗