WPF学习系列019: 3.2.1 依赖属性的实现

前端之家收集整理的这篇文章主要介绍了WPF学习系列019: 3.2.1 依赖属性的实现前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
    1. 依赖属性类型为@H_403_5@ System.Windows.DependencyProperty@H_403_5@。@H_403_5@
    2. 按规则,所有的依赖属性成员都必须是@H_403_5@ public@H_403_5@、@H_403_5@static@H_403_5@,并且有一个@H_403_5@ Property @H_403_5@作为后缀。@H_403_5@
    3. 依赖属性通常通过调用@H_403_5@ DependencyProperty.Register @H_403_5@静态方法创建。这个方法需要三个参数:@H_403_5@
      1. 名称@H_403_5@
      2. 属性类型@H_403_5@
      3. 拥有这个属性的类@H_403_5@
    1. 如何处理该属性@H_403_5@
    2. 如何处理属性值改变的回调@H_403_5@
    3. 如何处理强制值转换@H_403_5@
    4. 如何验证值@H_403_5@
    1. 依赖属性定义完成后,最好添加@H_403_5@ .NET @H_403_5@属性包装器@H_403_5@(@H_403_5@数据接口@H_403_5@)@H_403_5@实现对依赖属性的访问,这样可以允许通过@H_403_5@ XAML @H_403_5@设置依赖属性。@H_403_5@
    2. 在依赖属性属性包装器中,除了@H_403_5@ GetValue / SetValue @H_403_5@调用外,不应该添加任何其它逻辑。如果想添加,应该在注册的回调函数添加。所有的@H_403_5@ WPF @H_403_5@的内建属性包装器都遵守这个规则。@H_403_5@
    3. 由于依赖属性是一个静态成员,因此与@H_403_5@ .NET @H_403_5@属性相比,依赖属性节省了保存每个实例所需要的内存。@H_403_5@
    4. 依赖属性把相当一部分代码集中起来,并作标准化处理,这部分代码原本是要由属性实现者自己来写的。@H_403_5@
  • 3.2.1 @H_403_5@依赖属性的实现@H_403_5@

    通过不同的@H_403_5@ Register @H_403_5@方法重载,可以传入@H_403_5@ Metadata (@H_403_5@元数据@H_403_5@) @H_403_5@说明:@H_403_5@

    例如:

    @H_403_5@public class Button : ButtonBase@H_403_5@

    @H_403_5@{@H_403_5@

    @H_403_5@// @H_403_5@依赖属性@H_403_5@

    @H_403_5@public static readonly DependencyProperty IsDefaultProperty;@H_403_5@

    @H_403_5@static Button()@H_403_5@

    @H_403_5@{@H_403_5@

    @H_403_5@// @H_403_5@注册属性@H_403_5@

    @H_403_5@Button.IsDefaultProperty =@H_403_5@

    DependencyProperty.Register(@H_403_5@

    "IsDefault",@H_403_5@

    typeof(bool),@H_403_5@

    typeof(Button),@H_403_5@

    new FrameworkPropertyMetadata(@H_403_5@

    false,@H_403_5@

    new PropertyChangedCallback(Button.OnIsDefaultChanged)));@H_403_5@

    @H_403_5@}@H_403_5@

    @H_403_5@// .NET@H_403_5@属性包装器(可选)@H_403_5@

    @H_403_5@public bool IsDefault@H_403_5@

    @H_403_5@{@H_403_5@

    @H_403_5@get@H_403_5@

    @H_403_5@{@H_403_5@

    @H_403_5@return (bool)this.GetValue(Button.IsDefaultProperty);@H_403_5@

    @H_403_5@}@H_403_5@

    @H_403_5@set@H_403_5@

    @H_403_5@{@H_403_5@

    @H_403_5@this.SetValue(Button.IsDefaultProperty,value);@H_403_5@

    @H_403_5@}@H_403_5@

    @H_403_5@}@H_403_5@

    @H_403_5@// @H_403_5@属性改变的回调(可选)@H_403_5@

    @H_403_5@private static void OnIsDefaultChanged(@H_403_5@

    DependencyObject o,@H_403_5@

    DependencyPropertyChangedEventArgs e)@H_403_5@

    @H_403_5@{@H_403_5@

    @H_403_5@}@H_403_5@

    }@H_403_5@

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