第4章 依赖属性(3)——自定义附加属性
2016-10-26 22:17
253 查看
一、概述
附加属性也是一种依赖属性,同样由WPF属性系统管理。不同之处在于附加属性被应用到的类并非定义附加属性的那个类。例如,Grid类定义了Row和Column附加属性,这两个属性被用于设置Grid面板包含的元素,以指明这些元素应被放到哪个单元格中。类似地,DockPanel类定义了Dock附加属性,而Canvas类定义了Left、Right、Top和Bottom附加属性。
二、定义和注册附加属性
定义附加属性同定义依赖属性一样,但是注册附加属性需要使用RegisterAttached()方法,而不是使用Register()方法。代码如下:
在封装附加属性时不能使用.NET属性封装器,因为附加属性可以被用于任何依赖对象,而不是具体的某个对象。封装附加属性需要调用两个静态方法来设置和获取属性值,这两个方法使用为人熟知的SetValue()和GetValue()方法。这两个静态方法应当命名为SetPropertyName()和GetPropertyName()。代码如下:
四、快速创建依赖属性
使用代码片段(code snippet),快捷键为:proppa+两次Tab
附加属性也是一种依赖属性,同样由WPF属性系统管理。不同之处在于附加属性被应用到的类并非定义附加属性的那个类。例如,Grid类定义了Row和Column附加属性,这两个属性被用于设置Grid面板包含的元素,以指明这些元素应被放到哪个单元格中。类似地,DockPanel类定义了Dock附加属性,而Canvas类定义了Left、Right、Top和Bottom附加属性。
二、定义和注册附加属性
定义附加属性同定义依赖属性一样,但是注册附加属性需要使用RegisterAttached()方法,而不是使用Register()方法。代码如下:
public static readonly DependencyProperty RowProperty = DependencyProperty.RegisterAttached( "Row", typeof(int), typeof(Grid), new FrameworkPropertyMetadata( 0, new PropertyChangedCallback(OnCellAttachedPropertyChanged)), new ValidateValueCallback(IsIntValueNotNegative));三、封装附加属性
在封装附加属性时不能使用.NET属性封装器,因为附加属性可以被用于任何依赖对象,而不是具体的某个对象。封装附加属性需要调用两个静态方法来设置和获取属性值,这两个方法使用为人熟知的SetValue()和GetValue()方法。这两个静态方法应当命名为SetPropertyName()和GetPropertyName()。代码如下:
public static int GetRow(UIElement element) { if (element == null) { throw new ArgumentNullException("element"); } return ((int)element.GetValue(RowProperty)); } public static void SetRow(UIElement element, int value) { if (element == null) { throw new ArgumentNullException("element"); } element.SetValue(RowProperty, value); }注意:尽管使用不同的方法注册附加属性和常规的依赖属性,但对于WPF而言它们没有实质性的区别。唯一的区别是XAML解析器是否允许。除非将属性注册为附加属性,否则在标记的其他元素中无法设置。
四、快速创建依赖属性
使用代码片段(code snippet),快捷键为:proppa+两次Tab
相关文章推荐
- [UWP]为附加属性和依赖属性自定义代码段(兼容UWP和WPF)
- 依赖属性和附加属性的自定义
- 第4章 依赖属性(2)——自定义依赖属性
- 自定义依赖项属性 附加属性概述 DependencyObject 类
- CLR属性、依赖属性与附加属性(WPF)
- Silverlight的依赖属性与附加属性
- 无废话WPF系列12: 依赖属性和附加属性
- WPF-依赖属性和附加属性
- Silverlight的依赖属性与附加属性
- XAML实例教程系列 - 依赖属性和附加属性
- Silverlight的依赖属性与附加属性
- (5) 编码剖析Spring装配基本属性的原理【附加:注入依赖对象的两种方式】
- WPF学习之依赖属性和附加属性
- Silverlight的依赖属性与附加属性
- Silverlight的依赖属性与附加属性
- ControlTemplate中的控件如何Binding后台自定义依赖属性
- WPF学习之依赖属性和附加属性
- Silverlight的依赖属性与附加属性
- Silverlight的依赖属性与附加属性
- WPF:依赖属性和附加属性示例