2. WPF中的依赖属性
来源:互联网 发布:mac 修复flash player 编辑:程序博客网 时间:2024/05/08 14:13
昨天学习了下WPF的以来属性,记录下自己的理解。
我们一般给一个类设置一个属性很简单,但是如果给一个控件设置一个属性,会比较麻烦。
比如说,自己做一个button控件,继承自button
1 class MyButton : Button 2 { 3 4 private Color _backColor; 5 public Color BackColor 6 { 7 get 8 { 9 return _backColor;10 }11 set12 {13 _backColor = value;14 this.Background = new SolidColorBrush() { Color = _backColor };15 }16 }17 }
这个属性目的是设置按钮的背景色。这没有什么问题,但是在设置样式的时候会出问题。
1 <phone:PhoneApplicationPage.Resources>2 <Color x:Key="MyForceColor">Red</Color>3 <Color x:Key="MyBackColor">White</Color>4 <Style x:Name="mystyle" TargetType="PhoneApp3:MyButton">5 <Setter Property="BackColor" Value="Red"/>6 </Style>
这个时候会出现编译错误,意思就是说不能够在style里面直接设置自定义属性。
如果想在style里面配置那么就需要使用以来属性。
1 public class MyButton : Button 2 { 3 public static readonly DependencyProperty ForceColorProperty = 4 DependencyProperty.Register("ForceColor", 5 typeof(Color), 6 typeof(MyButton), 7 new PropertyMetadata(Colors.Black, OnColorChanged)); 8 9 public static readonly DependencyProperty BackColorProperty =10 DependencyProperty.Register("BackColor",11 typeof(Color),12 typeof(MyButton),13 new PropertyMetadata(Colors.White, OnColorChanged));14 15 public Color ForceColor16 {17 set { SetValue(ForceColorProperty, value); }18 get { return (Color)GetValue(ForceColorProperty); }19 }20 public Color BackColor21 {22 set { SetValue(BackColorProperty, value); }23 get { return (Color)GetValue(BackColorProperty); }24 }25 26 static void OnColorChanged(DependencyObject obj,27 DependencyPropertyChangedEventArgs args)28 {29 var btn = obj as MyButton;30 if (args.Property == ForceColorProperty)31 {32 btn.Foreground = new SolidColorBrush() { Color = (Color)args.NewValue };33 }34 if (args.Property == BackColorProperty)35 {36 btn.Background = new SolidColorBrush() { Color = (Color)args.NewValue };37 }38 }39 40 41 42 43 44 }
很坑爹啊,有木有,很复杂啊,有不有,这他妈谁能记得住啊。
不过微软给了一个快捷键来方便的生成模版,只要你输入”prodp“,然后连续按两次tab键,就可以自动生成一个模版。
1 public int MyProperty2 {3 get { return (int)GetValue(MyPropertyProperty); }4 set { SetValue(MyPropertyProperty, value); }5 }6 7 // Using a DependencyProperty as the backing store for MyProperty. This enables animation, styling, binding, etc...8 public static readonly DependencyProperty MyPropertyProperty =9 DependencyProperty.Register("MyProperty", typeof(int), typeof(ownerclass), new PropertyMetadata(0));
我们可以来看看注册函数
DependencyProperty.Register(
"MyProperty", -- 名字
typeof(int), --该属性的类型
typeof(ownerclass), --该属性所属类的类型
new PropertyMetadata(0));--属性变化以后的处理
明白意思了也不是很复杂了,不过要记住处理函数的格式
static void OnColorChanged(DependencyObject obj,DependencyPropertyChangedEventArgs args)
而且别忘了要是静态的。
最后还有一点,因为属性是静态的,也就是说它是全局一份的,所以在处理的时候要很小心。
1 static void OnColorChanged(DependencyObject obj, 2 DependencyPropertyChangedEventArgs args) 3 { 4 var btn = obj as MyButton; 5 if (args.Property == ForceColorProperty) 6 { 7 btn.Foreground = new SolidColorBrush() { Color = (Color)args.NewValue }; 8 } 9 if (args.Property == BackColorProperty)10 {11 btn.Background = new SolidColorBrush() { Color = (Color)args.NewValue };12 }13 }
注意第四行,这句可以保证是的我改变的设置仅仅是当前对象的设置。而不是全局的。
- 2. WPF中的依赖属性
- WPF中的依赖项属性
- WPF中的依赖项属性
- WPF中的依赖项属性
- WPF中的依赖项属性
- WPF中的依赖项属性
- WPF中的依赖项属性
- (原创)2. WPF中的依赖属性之二
- 1 WPF中的依赖属性之一
- WPF中的依赖属性(Dependency Property)
- WPF中的属性(一)- CLR属性和依赖属性
- WPF中的属性- CLR属性和依赖属性
- WPF之依赖属性
- WPF依赖属性
- wpf 依赖项属性
- WPF(依赖属性)
- WPF依赖属性
- WPF依赖属性
- 软件项目管理系统-项目管理-模块定义-测试记录
- 5. java编程思想读书笔记(四)
- 4. java编程思想读书笔记(五)
- 3. 从windows8的微软扫雷看创新——跳出现有的框架,换个角度看问题
- 统计随机数的个数
- 2. WPF中的依赖属性
- 如何把word文档中的图片复制出来?
- Java多线程 原子变量:最简单高效的tryLock
- override和overload
- Struts2源码阅读(五)_FilterDispatcher核心控制器 .
- 时间过去就没有了!
- [gkk]3天学习ai(3)
- WebSrevice创建过程+LINQ学习总结
- 图片存到数据库,并在页面读取出来