WPF:依赖属性和附加属性示例

前端之家收集整理的这篇文章主要介绍了WPF:依赖属性和附加属性示例前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
  1. publicclassButton:ButtonBase
  2. {
  3. //依赖属性
  4. publicstaticreadonlyDependencyPropertyIsDefaultProperty;
  5. staticButton()
  6. {
  7. //注册属性
  8. Button.IsDefaultProperty=DependencyProperty.Register("IsDefault",
  9. typeof(bool),typeof(Button),
  10. newFrameworkPropertyMetadata(false,
  11. newPropertyChangedCallback(OnIsDefaultChanged)));
  12. ……
  13. }
  14. //.net属性包装器(可选)
  15. publicboolIsDefalut
  16. {
  17. get{return(bool)GetValue(Button.IsDefaultProperty);}
  18. set{SetValue(Button.IsDefaultProperty,value);}
  19. }
  20. //属性改变的回调(可选)
  21. privatestaticvoidOnIsDefaultChanged(DependencyObjectobj,DependencyPropertyChangedEventArgse)
  22. {
  23. ……
  24. }
  25. }


IsDefaultProperty静态成员是真正的依赖属性,类型为System.Windows.DependencyProperty。按规则,所有的DependencyProperty成员都必须是public、static,并且有一个Property作为后缀。依赖属性通常是通过调用DependencyProperty.Register静态方法创建的,这样的方法需要一个名称(IsDefault)、一个属性类型(bool)以及拥有这个属性的类(Button类)。。通过不同的Register方法重载,你可以传入Metadata(元数据)来告诉WPF如何处理该属性、如何处理属性值改变的回调、如何处理强制值转,以及如何验证值。Button会在它的静态构造函数调用Register的重载,给依赖属性一个默认值false,并为变更通知添加一个委托。

最后,那个叫作IsDefault的传统.NET属性调用继承自System.Windows.Dependency-Object的GetValue和SetValue方法来实现自己的访问器,System.Windows.DependencyObject是底层基类,这是拥有依赖属性的类必须继承的。GetValue返回最后一次由SetValue设置的值,如果SetValue从未被调用过,那么就是该属性注册时的默认值。IsDefault .NET属性(有时叫作此上下文中的属性包装器)并不是必需的,Button的使用者可能会直接调用GetValue/ SetValue方法,因为它们是公开的。但是.NET属性会让以编程方式读写属性变得更加自然,它还允许通过XAML设置属性


附加属性

附加属性能够启用一些我们所盼望的属性值(被添加的元素并没有该属性值)继承特性,是依赖属性的一种特殊形式,可以被有效地添加到任何对象中。

  1. <StackPanelTextElement.FontSize="30"TextElement.FontStyle="Italic"
  2. Orientation="Horizontal"HorizontalAlignment="Center">
  3. <ButtonMinWidth="75"Margin="10">Help</Button>
  4. <ButtonMinWidth="75"Margin="10">OK</Button>
  5. </StackPanel>
上例中,因为StackPanel自己没有任何与字体相关的属性。相反,你必须使用FontSize和FontStyle附加属性,这是在一个叫作TextElement的类中定义的。这样,在StackPanel中的两个子元素button都继承了相应的字体与格式,

猜你在找的设计模式相关文章