WPF依赖属性:为什么需要指定所有者类型?这就是我注册DependencyProperty的方式:publicstaticreadonlyDependencyPropertyUserProperty=DependencyProperty.Register("User",typeof(User),typeof(NewOnlineUserNotifier));publicUserUser{get{return(User)GetValue(UserProperty);}set{SetValue(UserProperty,value);DependencyProperty.Register方法的第三个参数要求您指定依赖属性所在的控件类型(在本例中,我的用户控件称为NewOnlineUserNotifier)。我的问题是,为什么您实际上要指定所有者的类型,如果您指定的类型与实际所有者不同,会发生什么情况?您在其上调用Register方法的类型不是该属性的实际所有者,因此您不能指定与实际所有者不同的类型,因为您指定的类型是实际所有者。这可能有用的一个示例是当您创建包含其他控件的自定义控件时。以前使用WinForms,如果您有一些仅对该容器有用但在语义上属于子容器的额外信息,您能做的最好的事情就是将这些信息放在hold-all“Tag”属性中。这既消除了类型安全性,也永远无法确保另一个类不会尝试在标记中存储其他内容。使用WPF依赖属性现在允许您将值绑定到对象,而对象本身不需要保存该值。一个简单的例子:publicclassButtonContainer:Control{publicButtonChildButton{get;放;}publicstaticreadonlyDependencyPropertyFirstOwnerProperty=DependencyProperty.Register("FirstOwner",typeof(ButtonContainer),typeof(Button));publicButtonContainer(){ChildButton=newButton();ChildButton.SetValue(FirstOwnerProperty,这个);现在按钮有一个额外的属性,只有在ButtonContainer的上下文中才有意义并且可以访问-就像一个类型安全的包标签。使用新类如下:ButtonContainercontainer1=newButtonContainer();ButtonContainercontainer2=newButtonContainer();container2.ChildButton=container1.ChildButton;当ChildButton从一个容器移动到另一个容器时,其FirstOwnerProperty的值也随之移动,就好像它是Button类的真正成员一样。Container2可以调用ChildButton.GetValue(FirstOwnerProperty)并找出最初创建按钮的ButtonContainer(为什么它可能想要这样做留给读者作为练习......)。如果不将Button子类化为一个狭窄的专业化,所有这一切都是可能的。这是因为可以为多种类型(具有不同的元数据)定义相同的DependencyProperty简而言之,当您注册DP时,您将对象(DP)添加到附加到类(所有者)的列表中。这个动作只“存在于”声明它的类中,通常与它无关。以上是C#学习教程:WPF依赖属性:为什么需要指定所有者类型?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
