天天看点

[UWP]附加属性1:概述1. 什么是附加属性(attached property )2. 附加属性有什么作用3. 附加属性的使用4. 完整的自定义附加属性

附加属性依赖属性的一种特殊形式,常见的Grid.Row,Canvas.Left都是附加属性。

附加属性的简单定义如上述代码所示。可以看出和依赖属性不同的地方在于没有作为属性包装器的Setter和Getter,而多了两个静态函数GetXXX和SetXXX。并且注册标识符使用DependencyProperty.RegisterAttached而不是DependencyProperty.Register。

和依赖属性不同的地方在于,依赖属性是依赖对象本身的属性,附加属性是附加在其他对象身上的属性,通俗来说就是在别的对象内插入自己的属性。上面提到的Grid.Row,就是Grid将Row属性附加到没有Row属性的其它类中,以便进行布局。

附加实行的使用方式和依赖属性十分相似。

在XAML中使用附加属性:

在C#代码中使用附加属性:

以上代码为一个相对完整的自定义附加属性,自定义附加属性的步骤如下

使用 DependencyProperty.RegisterAttached注册附加属性标识符,标示符的名称必须是PropertyName+"Property",如这个例子中的"LeftProperty"。在PropertyMetadata中指定属性默认值。

实现静态的属性访问器函数,名称必须是GetPropertyName 和SetPropertyName,如例子中的public static double GetLeft(DependencyObject obj)和public static void SetLeft(DependencyObject obj, double value)。

如果需要监视属性值变更,可以在PropertyMetadata中定义一个PropertyChangedCallback方法,一遍命名方式为OnPropertyNameChanged,如上述例子中的private static void OnLeftChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)。

注意: 属性访问器中不要有多余的代码,理由参考依赖属性。

VisualStudio自带附加属性的代码段是propa,生成代码如下:

要生成上述例子的完整附加属性代码,可使用自定义的代码段,快捷键是ap: