原文:WPF 精修篇 依赖属性

依赖属性使用场景

1. 希望可在样式中设置属性。

2. 希望属性支持数据绑定。

3. 希望可使用动态资源引用设置属性。

4. 希望从元素树中的父元素自动继承属性值。

5. 希望属性可进行动画处理。

6. 希望属性系统在属性系统、环境或用户执行的操作或者读取并使用样式更改了属性以前的值时报告。

7. 希望使用已建立的、WPF 进程也使用的元数据约定,例如报告更改属性值时是否要求布局系统重新编写元素的可视化对象。

依赖属性生成

PropertyMetadata 后面可以有默认值,

一个PropertyChangedCallback 当值改变的时候的触发方法

一个 CoerceValueCallback 对值进行限定 强制改变


  1. public int MyProperty
  2. {
  3. get { return (int)GetValue(MyPropertyProperty); }
  4. set { SetValue(MyPropertyProperty, value); }
  5. }
  6. // Using a DependencyProperty as the backing store for MyProperty. This enables animation, styling, binding, etc...
  7. public static readonly DependencyProperty MyPropertyProperty =
  8. DependencyProperty.Register("MyProperty", typeof(int), typeof(ownerclass), new PropertyMetadata(0,oncall));
  9. private static void oncall(DependencyObject d, DependencyPropertyChangedEventArgs e)
  10. {
  11. // 当值改变时 可以触发
  12. }

还有FrameworkPropertyMetadata 多了数据验证ValidateValueCallback


  1. public static readonly DependencyProperty SimpleDPProperty =
  2. DependencyProperty.Register("SimpleDP", typeof(double), typeof(SimpleDPClass),
  3. new FrameworkPropertyMetadata((double)0.0,
  4. FrameworkPropertyMetadataOptions.None,
  5. new PropertyChangedCallback(OnValueChanged),
  6. new CoerceValueCallback(CoerceValue)),
  7. new ValidateValueCallback(IsValidValue));
  8. private static void OnValueChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
  9. {
  10. Console.WriteLine("当值改变时,我们可以做的一些操作,具体可以在这里定义: {0}", e.NewValue);
  11. }
  12. private static object CoerceValue(DependencyObject d, object value)
  13. {
  14. Console.WriteLine("对值进行限定,强制值: {0}", value);
  15. return value;
  16. }
  17. private static bool IsValidValue(object value)
  18. {
  19. Console.WriteLine("验证值是否通过,返回bool值,如果返回True表示验证通过,否则会以异常的形式暴露: {0}", value);
  20. return true;
  21. }

WPF 精修篇 依赖属性的更多相关文章

  1. WPF 精修篇 多属性触发器

    原文:WPF 精修篇 多属性触发器 多属性触发器就是多个属性都满足在触发 在属性触发器上加了一些逻辑判断 举栗子 这个栗子里  textBox 要满足俩个条件 才能触发背景变色 1)textbox的 ...

  2. WPF 精修篇 属性触发器

    原文:WPF 精修篇 属性触发器 属性触发器是通过  某个条件触发改变属性 通过无代码实现功能 <Style TargetType="{x:Type Label}"> ...

  3. WPF 精修篇 属性动画

    原文:WPF 精修篇 属性动画 属性动画 是通过 Storyboard 来改变属性值 <Rectangle x:Name="rect" Width="200&quo ...

  4. WPF 精修篇 用户控件

    原文:WPF 精修篇 用户控件 增加用户控件 数据绑定还是用依赖属性 使用的事件 就委托注册一下 public delegate void ButtonClick(object b,EventArgs ...

  5. WPF 精修篇 数据绑定到对象

    原文:WPF 精修篇 数据绑定到对象 数据绑定到对象 首先 我们需要一个对象 public class Preson { private string name; public string Name ...

  6. WPF 精修篇 数据绑定 更新通知

    原文:WPF 精修篇 数据绑定 更新通知 开始更新一点有意思的了 首先 数据绑定  其中之一 Element 绑定 看例子 <Window x:Class="WpfApplicatio ...

  7. WPF 精修篇 附加属性

    原文:WPF 精修篇 附加属性 微软把DLL都开源了  今天看了一下 很多WPF实现内容都在里面 https://referencesource.microsoft.com/ 说附加属性 附加属性 是 ...

  8. WPF精修篇 多数据触发器

    原文:WPF精修篇 多数据触发器 有多属性触发器 就有多数据触发器 <Grid> <CheckBox x:Name="c1" Content="许可协议 ...

  9. WPF 精修篇 数据触发器

    原文:WPF 精修篇 数据触发器 数据触发器 可以使用Binding 来绑定控件 或者数据源 来触发相关动作 举栗子 <Window.Resources> <Style Target ...

随机推荐

  1. MySQL索引查询原理

    什么是索引? “索引”是为了能够更快地查询数据.比如一本书的目录,就是这本书的内容的索引,读者可以通过在目录中快速查找自己想要的内容,然后根据页码去找到具体的章节. 数据库也是一样,如果查询语句使用到 ...

  2. vue2y引入iview,在ie11报错的解决办法

    在ie11中打开vue项目一片空白,F12打开控制台发现如下错误 只需要在build/webpack.base.conf.js中加一行代码即可

  3. SpringCloud之Eureka:集群搭建

    上篇文章<SpringCloud之Eureka:服务发布与调用例子>实现了一个简单例子,这次对其进行改造,运行两个服务器实例.两个服务提供者实例,服务调用者请求服务,使其可以进行集群部署. ...

  4. 阿里云ECS服务器部署HADOOP集群(六):Flume 安装

    本篇将在阿里云ECS服务器部署HADOOP集群(一):Hadoop完全分布式集群环境搭建的基础上搭建. 1 环境介绍 一台阿里云ECS服务器:master 操作系统:CentOS 7.3 Hadoop ...

  5. 原生js放大镜效果

    效果: 1.  鼠标放上去会有半透明遮罩.右边会有大图片局部图 2.  鼠标移动时右边的大图片也会局部移动 放大镜的关键原理: 鼠标在小图片上移动时,通过捕捉鼠标在小图片上的位置,定位大图片的相应位置 ...

  6. table+分页+模糊查询

    这个分页超级棒嘞. 网页链接:http://www.cssmoban.com/cssthemes/7528.shtml

  7. [译]Vulkan教程(14)图形管道基础之固定功能

    [译]Vulkan教程(14)图形管道基础之固定功能 Fixed functions 固定功能 The older graphics APIs provided default state for m ...

  8. swoole比php好在哪里

    直接套用Swoole官网的介绍: PHP的异步.并行.高性能网络通信引擎,使用纯C语言编写,提供了PHP语言的异步多线程服务器,异步TCP/UDP网络客户端,异步MySQL,异步Redis,数据库连接 ...

  9. windows本地连不上虚拟机redis服务完美解决

    检查本机与虚拟机是否可以互相ping通,如本机IP:192.168.22.111  虚拟机IP:192.168.44.129 (设置虚拟机静态IP已设置) 本机 win+R 输入cmd 进入dos 输 ...

  10. 构建和管理有效API市场的关键步骤

    API市场关键要点 各个行业的公司正在寻找通过外部API扩展服务来塑造数字业务的方法.然而,要获得API的真正好处,是需要超越基本的API管理,再到创建API市场,这是一种专注于连接生产者和消费者的专 ...