1. 依赖项属性 简单理解
程序员文章站
2022-07-03 17:50:01
依赖项属性 简单理解 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>
结果如图: