博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WPF属性(二)附加属性
阅读量:5355 次
发布时间:2019-06-15

本文共 2699 字,大约阅读时间需要 8 分钟。

原文:

附加属性是说一个属性本来不属于某个对象,但由于某种需求而被后来附加上,也就是把对象放入一个特定环境后对象才具有的属性就称为附加属性,附加属性的作用就是将属性与数据类型解耦,让数据类型的设计更加灵活,举例,一个TextBox被放在不同的布局容器中时就会有不同的布局属性,这些属性就是由布局容器为TextBox附加上的,附加属性的本质就是依赖属性,二者仅仅在注册和包装器上有一点区别

小技巧,在VS中输入propa后,连按两次tab键,可以添加好一个附加属性的框架,继续按tab键,可以继续修改附加属性的内容

举个例子,Person这个类,放在学校中就会获得年级这个属性,那么准备一个School类,School类继承DependencyObject,定义一个附加属性

public class School : DependencyObject    {        public static int GetGrade(DependencyObject obj)        {            return (int)obj.GetValue(GradeProperty);        }        public static void SetGrade(DependencyObject obj, int value)        {            obj.SetValue(GradeProperty, value);        }        public static readonly DependencyProperty GradeProperty =            DependencyProperty.RegisterAttached("Grade", typeof(int), typeof(School), new UIPropertyMetadata(0));    }
可以看到,附加属性已依赖属性有两点不同:

一。附加属性使用的RegisterAttached方法,而依赖属性使用的是Register方法

二。附加属性使用两个方法进行包装,依赖属性使用CLR属性对GetValue和SetValue两个方法进行包装

如何使用School的GradeProperty呢,首先准备一个DependencyObject的派生类Human

public class Human : DependencyObject    {    }
使用这个附加属性

Human human = new Human();            School.SetGrade(human, 6);            MessageBox.Show(School.GetGrade(human).ToString());
看看实例代码,如果要在一个3行3列的表格布局的最中间一格放置一个按钮,界面代码如下:

运行后效果如图:

那么,如果用C#代码来实现这个效果,代码如下:

Grid grid = new Grid() { ShowGridLines = true };            grid.RowDefinitions.Add(new RowDefinition());            grid.RowDefinitions.Add(new RowDefinition());            grid.RowDefinitions.Add(new RowDefinition());            grid.ColumnDefinitions.Add(new ColumnDefinition());            grid.ColumnDefinitions.Add(new ColumnDefinition());            grid.ColumnDefinitions.Add(new ColumnDefinition());            Button button = new Button() { Content = "OK" };            Grid.SetRow(button, 1);            Grid.SetColumn(button, 1);            grid.Children.Add(button);            Content = grid;
效果与上图一致,附加属性的用法很奇怪吧,附加属性同时也是依赖属性,再附上一个例子,用两个滑块分别控制按钮在九宫格中的位置

posted on
2018-05-23 23:58 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/lonelyxmas/p/9080475.html

你可能感兴趣的文章
NYOJ 14 场地安排(它可以被视为一个经典问题)
查看>>
【2012.1.24更新】不要再在网上搜索eclipse的汉化包了!
查看>>
java中不常见的keyword:strictfp,transient
查看>>
Android音频焦点处理相关的方法
查看>>
触发 fuzzy checkpoint 的情况
查看>>
ERP-非财务人员的财务培训教(二)------如何评价公司/部门经营业绩
查看>>
30多种iOS常用动画
查看>>
算法学习(二)——树状数组求逆序数
查看>>
电子书下载:Applied WPF 4 in Context
查看>>
在Delphi中操作快捷方式
查看>>
分布式系统全局唯一ID生成
查看>>
8614 素数__
查看>>
LeetCode 525.连续数组
查看>>
(四)requests模块的cookies和代理操作
查看>>
网页收藏
查看>>
最适合你性格的职业类型是什么?
查看>>
NEURAL NETWORKS, PART 2: THE NEURON
查看>>
如何在ubuntu下安装xampp
查看>>
Django rest framwork获取token值和前端token携带方法
查看>>
OCS 开放缓存服务
查看>>