• 博客园logo
  • 会员
  • 周边
  • 新闻
  • 博问
  • 闪存
  • 众包
  • 赞助商
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

Fly In WPF

  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

关于dependency property(1)

用WPF写代码有一年了,对这个也稍微有些感觉。总觉得有些心得需要记下,所以开了这个博客园,一是方便自己以后查阅,二是和大家一起分享。

关于WPF,大家一定都不陌生,就从它最core的技术开始吧。dependency property:

关于dependency property的具体介绍就去看msdn吧,我就不具体介绍了,http://msdn.microsoft.com/en-us/library/ms752914.aspx

我想说的是我对它的一些了解。一说它,就和所有的WPF核心技术挂钩,所以不能不说它是很重要的,所以完全搞懂它是相当的重要!

1.从名字说起。翻译过来大概就是依赖的属性。相信对C#有基础的朋友对property都很熟吧。WPF的dependency property具有依赖性,这也是它与不同属性不同之处,这与它的创建有很大的关系。

2.定义dependency property.

  (1)声明一个static的 DependencyProperty的实例(实际上是留在本地的存储值(localValue),这也是为什么叫它这个名字的原因所在吧)

  (2)在static structure里对DependencyProperty的实例进行register.例如

      MarginProperty=DependencyProperty.Register("Margin",typeof(Thickness),typeof(FrameworkElement),new FrameworkPropertyMetadata("......"),new ValidateValueCallback(..));

    第一项是注册名,二三是分别属于什么类型,哪个类,重点是第四项和第五项。

    我最想重点说的就是coerceValueCallback,propertyChangedCallback,和validateValueCallback.

    coerceValueCallback,propertyChangedCallback 属于metadata里定义的eventhandler. 它们被fire的顺序是coerceValueCallback-->validateValueCallback-->propertyChangedCallback

    coerceValueCallback这里可以用来根据条件来修改当前赋予的值,注意这里只是修改一个对外输出值,并不会改变前面所说的localvalue,当条件变化的时候,还是会变的,这也就是为什么叫做dependency property的原因吧。propertyChangedCallback用

    来处理值变化时的情况。validateValueCallback用来验证是否可以赋予当前的值。

  (3)创建一个property wrapper.用setvalue and getvalue来做。注意,千万不要再set里做值的处理或是其他问题的考虑,因为很有可能只运行setvalue(XX,value)这一句,或是别处直接调用者一句。所以要处理数据或是根据数据处理其他情况,还是在

  metadata里比较稳妥。

今天先暂时写到这里吧。改天继续更深入的探究!             

posted on 2010-05-19 22:57  Fly In WPF  阅读(516)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3