lanlorr

这一年多么重要

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理
  3 Posts :: 0 Stories :: 2 Comments :: 0 Trackbacks

公告

依赖项属性 简单理解

2018/1/3 15:36:07




dependency property 的简单理解(略去大部头理解)

依赖项属性

依赖项属性的值不是简单的封装字段,而是根据其他的输入值来决定本属性的值。为什么要这样做?因为在WPF体系中,只有定义属性为依赖项属性,这个属性才支持样式设置,数据绑定,继承,动画和默认值。
两个关键行为:更改通知和动态值识别。
简言之,依赖属性就是一种可以自己没有值,并能通过Binding从数据源获得值(依赖在别人身上)的属性。拥有依赖属性的对象被称为“依赖对象”。

wpf使用依赖项属性的方式

当属性发生变化时,依赖项属性不会自动引发事件以通知属性值发生了变化。会触发受保护名为OnPropertyChangedCallback()的方法。该方法通过两个wpf服务(数据绑定和触发器)传递信息,并调用PropertyChangedCallback回调函数(如果已经定义了此函数)。
即:当属性发生变化时,如果希望进行响应,则有两种选择:1.使用属性值创建绑定 2.编写能够自动改变其他属性或开始动画的触发器。
(省略了大部头细节)

附加属性

附加属性(Attached Properties)就是说,一个属性本来不属于某个对象,但由于某种需求而被后来附加上。例如:Button控件本身没有Grid.Row属性,但是将Button放在Grid布局里面,就可以用这个属性来设置Button的位置。类似的,放在Canvas里面,可以附加属性Canvas.Top;放在DockPanel里,可以使用DockPanel.Dock。

<Grid ShowGridLines="True">
    <Grid.ColumnDefinitions>
        <ColumnDefinition/>
        <ColumnDefinition/>
        <ColumnDefinition/>
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
        <RowDefinition/>
        <RowDefinition/>
        <RowDefinition/>
    </Grid.RowDefinitions>
    <Button Background="Black" Grid.Column="1" Grid.Row="1"/>
</Grid>

附加属性也可以使用Binding依赖在其他对象的数据上。例如:用两个slider控制矩形在Canvas中的横纵坐标。

<Canvas>
    <Slider x:Name="sliderX" Canvas.Top="10" Canvas.Left="10" Width="260" Minimum="50" Maximum="200"/>
    <Slider x:Name="sliderY" Canvas.Top="40" Canvas.Left="10" Width="260" Minimum="50" Maximum="200"/>
    <Rectangle x:Name="rect" Fill="Blue" Width="30" Height="30" Canvas.Left="{Binding ElementName=sliderX,Path=Value}" Canvas.Top="{Binding ElementName=sliderY,Path=Value}"/>
</Canvas>

结果如图:

posted on 2018-01-03 13:57 lanlorr 阅读(...) 评论(...) 编辑 收藏