Artlife

专注于.NET 3.0技术
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

说说Dependency属性

Posted on 2007-01-09 09:36  artlife  阅读(1382)  评论(0)    收藏  举报

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.0new 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