欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

1. 依赖项属性 简单理解

程序员文章站 2022-04-09 20:20:46
依赖项属性 简单理解 2018/1/3 15:36:07 dependency property 的简单理解(略去大部头理解) 依赖项属性 依赖项属性的值不是简单的封装字段,而是根据其他的输入值来决定本属性的值。为什么要这样做?因为在WPF体系中,只有定义属性为依赖项属性,这个属性才支持样式设置,数 ......

依赖项属性 简单理解

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>

结果如图:

1. 依赖项属性 简单理解

1. 依赖项属性 简单理解