Dependency属性的使用:
Dependency属性-“对象从属依赖属性”,最大的特点就是内建的变化通知功能。
Dependency属性功能主要是为了直接从声明标记提供丰富的功能。
下面我们来使用Dependency属性:
//1.预定义属性
public Double CenterX
{
get { return (Double)this.GetValue(CenterXProperty); }
set { this.SetValue(CenterXProperty, value); }
}
//2.向xmal注册属性名字,及其默认值等。
public static readonly DependencyProperty CenterXProperty
= DependencyProperty.Register("CenterX", typeof(Double), typeof(CustomPanel), new PropertyMetadata(0.0, new PropertyChangedCallback(OnCenterXChanged)));
//3.内建变化功能
private static void OnCenterXChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
CustomPanel panel = (CustomPanel)d;
Double oldValue = (Double)e.OldValue;
Double newValue = (Double)e.NewValue;
RoutedPropertyChangedEventArgs<Double> args = new RoutedPropertyChangedEventArgs<Double>(oldValue, newValue, CenterXChangedEvent);
panel.OnCenterXChanged(args);
}
//4.定义事件
protected virtual void OnCenterXChanged(RoutedPropertyChangedEventArgs<Double> args)
{
double newLeft = args.NewValue - this.Width / 2;
Canvas.SetLeft(this, newLeft);
RaiseEvent(args);
}
这样定义的相关联属性就可以通过前台xaml访问了。例如:
<ovd:CustomPanel x:Name="myPanel" Width="100" Height="100" Background = "Red" CenterX="300" CenterY="200" />Dependency属性常用于自定义属性类型和一些复杂属性绑定。通过其内建的变化通知功能,可以很灵活的实现想要的自定义属性。
代码下载:Demo

浙公网安备 33010602011771号