(二)依赖项属性
依赖项属性与.NET普通属性
定义依赖项属性
// FrameworkElement 中的Margin属性
public class FrameworkElement: UIElement,...
{
public class readonly DependencyProperty MarginProperty;
...
}
注册依赖性属性
注册依赖属性需要由两个步骤: //继续接上面的例子
//静态构造函数初始化MarginProperty
static FrameworkElement()
{
//创建FrameworkPropertyMetadata对象
FrameworkPropertyMetadata metadata = new FrameworkPropertyMetadata(
new Thickness(),FrameworkPropertyMetadataOptions.AffectsMeasure //当一个元素的边距发生变化,布局容器就会重新布局,确定元素新布局
);
//注册属性
MarginProperty = DependencyProperty.Register(
"Margin", //属性名
typeof(Thickness), //属性使用的数据结构
typeof(FrameworkElement),//拥有该属性的类型,即当前类名
metadata,//一个具有附加属性设置的FrameworkPropertyMetadata对象,该参数可选
new ValidataValueCallback(FrameworkElement.IsMarginValid) //验证属性的回调函数,可选。
)
}
添加属性包装器使用传统的.Net属性封装WPF依赖项属性。需要使用DependencyObject基类中定义的GetValue()和SetValue()方法。 public Thickness Margin
{
set { SetValue(MarginProperty,value);}
get { return (Thickness)GetValue(MarginProperty);}
}
在上面的例子中不应当添加添加任何验证属性值的额外代码,引发事件的代码。这是因为WPF中的,直接调用SetValue()与GetValue()。验证操作应该放在DependencyProperty.ValidateValueCallback回调函数中,事件触发因在FrameworkPropertyMetadata.PropertyChangedCallback回调函数中进行。 下面由三点注意:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |