翼度科技»论坛 编程开发 .net 查看内容

9.附加属性

6

主题

6

帖子

18

积分

新手上路

Rank: 1

积分
18
我们在学习布局控件时,其实也已经使用过附加属性了。下面我们来看一些例子
  1. <Grid>
  2.     <Grid.RowDefinitions>
  3. <Canvas>
  4.     <Button Canvas.Left="20" Canvas.Top="20" Content="按钮1"/>
  5.     <Button Canvas.Left="80" Canvas.Top="20" Content="按钮2"/>
  6. </Canvas><RowDefinition/>
  7. <Canvas>
  8.     <Button Canvas.Left="20" Canvas.Top="20" Content="按钮1"/>
  9.     <Button Canvas.Left="80" Canvas.Top="20" Content="按钮2"/>
  10. </Canvas><RowDefinition/>
  11.     </Grid.RowDefinitions>
  12.     <Button Grid.Row="0" Content="按钮1"/>
  13.     <Button Grid.Row="1" Content="按钮2"/>
  14. </Grid>
复制代码
上面的代码中,按钮1被放到Grid的第一行中,按钮2被放到Grid的第二行中。通过Grid.Row附加属性完成这一设置。实际上这个Row属性并没有定义在Button中,而是定义在Grid中,且被定义成附加属性
  1. <Canvas>
  2.     <Button Canvas.Left="20" Canvas.Top="20" Content="按钮1"/>
  3.     <Button Canvas.Left="80" Canvas.Top="20" Content="按钮2"/>
  4. </Canvas>
复制代码
  1. <Canvas>
  2.     <Button Canvas.Left="20" Canvas.Top="20" Content="按钮1"/>
  3.     <Button Canvas.Left="80" Canvas.Top="20" Content="按钮2"/>
  4. </Canvas>
复制代码
综上所述,附加属性定义好后,是附加到别的控件上起作用的。
附加属性的定义
在C#后端代码中,键入propa,然后按下tab键,VS会自动创建一个附加属性的定义模板,如下所示。
  1. public static int GetMyProperty(DependencyObject obj){    return (int)obj.GetValue(MyPropertyProperty);} public static void SetMyProperty(DependencyObject obj, int value){    obj.SetValue(MyPropertyProperty, value);} // Using a DependencyProperty as the backing store for MyProperty.// This enables animation, styling, binding, etc...public static readonly DependencyProperty MyPropertyProperty =    DependencyProperty.RegisterAttached(<Canvas>
  2.     <Button Canvas.Left="20" Canvas.Top="20" Content="按钮1"/>
  3.     <Button Canvas.Left="80" Canvas.Top="20" Content="按钮2"/>
  4. </Canvas>"MyProperty",<Canvas>
  5.     <Button Canvas.Left="20" Canvas.Top="20" Content="按钮1"/>
  6.     <Button Canvas.Left="80" Canvas.Top="20" Content="按钮2"/>
  7. </Canvas> typeof(int),<Canvas>
  8.     <Button Canvas.Left="20" Canvas.Top="20" Content="按钮1"/>
  9.     <Button Canvas.Left="80" Canvas.Top="20" Content="按钮2"/>
  10. </Canvas> typeof(ownerclass),<Canvas>
  11.     <Button Canvas.Left="20" Canvas.Top="20" Content="按钮1"/>
  12.     <Button Canvas.Left="80" Canvas.Top="20" Content="按钮2"/>
  13. </Canvas> new PropertyMetadata(0));
复制代码
附加属性利用DependencyProperty的RegisterAttached方法成员进行注册,在注册的时候要求传入一些参数,与注册依赖属性的参数完全相同。
只不过在设置或读取附加属性时,将采用SetMyProperty和GetMyProperty的形式,并最终利用SetValue和GetValue方法成员完成。哪里来的SetValue和GetValue?原来,在DependencyObject基类中定义了这两个方法成员,它们是WPF属性系统的业务核心。
 

来源:https://www.cnblogs.com/MingQiu/p/17997790
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

举报 回复 使用道具