WPF系统封装的控件基本可满足使用,但有时为了美观或功能的需求需要自定义控件,笔者以为自定义控件最重要在于如何定义依赖属性,具体实施如下:
1)注册属性:
public static readonly DependencyProperty XXXProperty =
DependencyProperty.Register("XXX", typeof(double), typeof(自定义控件名),
new FrameworkPropertyMetadata(0.00, new PropertyChangedCallback(XXXPropertyChangedCallback)));
参数说明:
"XXX":要注册的依赖项对象的名称,要跟返回的XXXProperty中的XXX保持一致。
typeof(double):属性的类型,此例以double为例。
typeof(自定义控件名):正注册依赖项对象的所有者类型,即所在类名。
new FrameworkPropertyMetadata(0.00, new PropertyChangedCallback(XXXPropertyChangedCallback)):依赖项对象的属性元数据。
0.00:依赖项对象的属性初始值,要保证是typeof(double)中的double类型,此例即是,如定义其他类型要赋予符合该类型又满足实际意义的值。
new PropertyChangedCallback(XXXPropertyChangedCallback):依赖项对象的有效属性值更改时调用的回调,就是属性值变了要做的反应处理,处理内容在XXXPropertyChangedCallback方法中定义,稍后定义该方法。
2)定义属性:
public double XXX
{
get { return (double)GetValue(XXXProperty); }
set { SetValue(XXXProperty, value); }
}
属性名XXX与1)中XXX保持一致,double是例子与1)中定义的类型一致即可。
3)定义依赖项对象的有效属性值更改时调用的回调函数
public static void XXXPropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
}
参数说明:
d:属性值已更改的对象
e:由任何事件发出的事件数据,该事件跟踪对此属性的有效值的更改,有用的两个属性OldValue变更前的值和NewValue变更后的值,说白了,该方法的功能就是如何安置新旧值。
以上完成。