silverlight的自定义依赖属性

silverlight开的的关键所在于依赖属性(DependencyProperty),包括现在的silverlight任何元素的属性都是通过它构造出来的。由此可见在silverlight的应该开发中它的重要性。

您可以参考:http://msdn.microsoft.com/zh-cn/library/ms597502(VS.95).aspx

以下是一个例子,实现通过自定义依赖属性去移动一个用户控件.

1.新建一个silverlight项目,并添加一个用户控件。并命名为SilverlightControl1.

2.以下是SilverlightControl1的依赖性性的定义:

 1:  public partial class SilverlightControl1 : UserControl
 2:    {
 3:        public SilverlightControl1()
 4:        {
 5:            InitializeComponent();
 6:        }
 7:  
 8:        public Point pp
 9:        {
10:            get { return (Point)GetValue(myp); }
11:            set { SetValue(myp,value); }
12:        }
13:  
14:        public static readonly DependencyProperty myp = DependencyProperty.Register(
15:            "pt", typeof(Point), typeof(SilverlightControl1),new PropertyMetadata(ppc));
16:  
17:        private static void ppc(DependencyObject d, DependencyPropertyChangedEventArgs e)
18:        {
19:            SilverlightControl1 s = (SilverlightControl1)d;
20:            Point p = (Point)e.NewValue;
21:            s.SetValue(Canvas.LeftProperty, p.X);
22:            s.SetValue(Canvas.TopProperty, p.Y);
23:        }
24:    }

以上我封装了一个字段作为保存这个用户控件的位置,然后通过Register方法注册一个名为:myp的依赖属性。

其中:第一个参数是这个依赖属性的名字,第二个参数是这个属性的类型,第三个参数是定义这个属性的所有者(这里我希望是用户控件拥有这个属性,所以是SilverlightControl1),第四个参数是注册一个当值改变时我们要做的处理。

在ppc方法中。我从新把新的值设计到这个控件的Left和Top属性。

到此,自定义依赖属性完成。以下是使用的方法。

2.在MainPage中:

 1:  public partial class MainPage : UserControl
 2:  {
 3:      SilverlightControl1 s;
 4:      public MainPage()
 5:      {
 6:          InitializeComponent();
 7:          s = new SilverlightControl1();
 8:          this.LayoutRoot.Children.Add(s);
 9:          this.KeyDown += new KeyEventHandler(MainPage_KeyDown);
10:      }
11:  
12:      void MainPage_KeyDown(object sender, KeyEventArgs e)
13:      {
14:          s.SetValue(SilverlightControl1.myp, new Point(s.pp.X+1, s.pp.Y+1));
15:      }
16:  }

在MainPage初始化完成后,我添加了一个SilverlightControl1并命名为s,然后我希望当用户按下任意键时这个用户控件的x,y座标都加一,所以我通过调用刚刚自定议的myp属性。s.SetValue(SilverlightControl1.myp, new Point(s.pp.X+1, s.pp.Y+1));达到效果。

posted @ 2012-12-10 09:04  黎东海  阅读(262)  评论(0编辑  收藏  举报