(四)附加属性
来源:互联网 发布:办公软件培训班多少钱 编辑:程序博客网 时间:2024/05/20 18:00
附加属性
- 附加属性的含义是:一个属性本来不属于某个对象,因为某种原因需求而被附加上。
- 就是把一个对象放入某一个特定的环境后,对象才具有的属性。
举个例子:
假设我们有一个人的类People,它有可能在与学校相关的工作中用到(记录学号,专业,班级)
它也有可能在与公司相关的工作中用到(部门,项目),所以我们在定义People类时不应该包含class,id等等,这些应该放在School这些类里,因为id,class等是学校附加给People的。
在WPF中我们在布局中都用到了附加属性,比如:
<Canvas Margin="10"><Button ... Canvas.Top="0"/><Button ... Canvas.Top="30"/></Canvas>
显然Button里并没有Top,Left等属性,这些属性是容器给附加上的。当你把控件放在Grid里就让Grid给它附上Column和Row属性,放在Canvas里,Canvas就为它附上Top,Left属性,放在DockPanel里就让DockPanel为它附上Dock属性。
附加属性的定义
我们下面用上面所说的People类为例:
public class School:DependencyObject { //附加属性的包装器与依赖属性不同依赖属性使用属性CLR属性封装。 //附加属性使用两个方法进行分装。 public static int GetMyProperty(DependencyObject obj) { return (int)obj.GetValue(GradeProperty); } public static void SetMyProperty(DependencyObject obj, int value) { obj.SetValue(GradeProperty, value); } //与依赖属性的注册不同 附加属性使用RegisterAttached public static readonly DependencyProperty GradeProperty = DependencyProperty.RegisterAttached("GradeProperty", typeof(int), typeof(School), new PropertyMetadata(0)); }
使用附加属性
继续上面的例子:
class People:DependencyObject //依赖对象{}//使用People p = new People();School.SetGrade(p,6); //设置int grade = School.GetGrade(p);//获取
在上面的依赖属性的值被保存在People的实例p中的EffectiveVAlueEntry数组中。
附加属性的Binding
<Canvas> <Slider x:Name="sliderX" Canvas.Top="10" Canvas.Left="10" Width="260" Maximum="200" Minimum="50"></Slider> <Slider x:Name="sliderY" Canvas.Top="40" Canvas.Left="10" Width="260" Maximum="200" Minimum="50"></Slider> <Rectangle x:Name="rect" Fill="blue" Width="30" Height="30" Canvas.Left="{Binding ElementName=sliderX,Path=Value}" Canvas.Top="{Binding ElementName=sliderY,Path=Value}"></Rectangle> <Ellipse x:Name="elli" Width="30" Height="30" Fill="red"></Ellipse></Canvas>
对应的后台代码:
public MainWindow()//窗口构造函数 { InitializeComponent(); elli.SetBinding(Canvas.LeftProperty, new Binding("Value") { Source = sliderY }); elli.SetBinding(Canvas.TopProperty, new Binding("Value") { Source = sliderX }); }
在上面的例子中我们整个窗体用Canvas布局,用两个Slider控制矩形和圆在Canvas中的横纵坐标。其中矩形在XAML中Binding,圆在c#代码中。如上代码。下面是效果演示图:
阅读全文
0 0
- (四)附加属性
- WPF(附加属性)
- (WPF)附加属性
- Wpf 附加属性(Attached Properties)
- WPF Silverlight 附加属性(AttachedProperty)
- WPF菜鸟谈之依赖属性,附加属性(附加《深入浅出WPF》pdf下载)
- 实验四附加
- WPF(附加属性 Slider)
- WPF 自定义附加属性
- WPF 附加属性
- 附加属性案例
- WPF 附加属性
- WPF属性(二)附加属性
- 依赖属性和附加属性
- swing入门教程(四) 附加的swing小部件(下)
- 《How Tomcat Works》读书笔记(四)-容器附加
- SQLite3使用方法大全(四)之数据库创建、附加、分离
- swing入门教程(四) 附加的swing小部件(下)
- halcon 标定
- 手动配置IPSec ah-esp 认证与加密
- 《TCP/IP原理》》笔记:第一章
- 1、笔记搭建一个个人网站——经济版
- 人脸检测发展:从VJ到深度学习(下)
- (四)附加属性
- 贪心算法----装箱问题
- linux syslog日志
- 简述面向对象的6大原则
- 多态的缺点(“覆盖”私有方法、域与静态方法)
- 解决Idea创建maven-archetype-webapp项目无java目录的问题
- 2、笔记搭建一个个人网站——Wordpress WordPress
- 【01】Bootstrap入门
- Find Duplicate File in System