3.依赖属性

    在用WPF编程时,常常会遇到"依赖属性"这个术语。WPF元素是带有方法,属性和事件的类。WPF元素的几乎每个属性都是依赖属性, 这是什么意思?依赖属性可以依赖其他输入,例如主题和用户喜好。依赖属性与数据绑定,动画,资源和样式一起使用

    前面我们说过WPF的体系结构,只有派生自DependencyObject基类的类才能包含依赖属性。

    (由于DependencyObject类位于层次结构的最高层,所以每个WPF元素都派生自这个基类)

    下面写一个类自定义依赖属性

    

 class CustomClass:DependencyObject
{ //CLR属性进行封装
public string Name
{
get { return (string)GetValue(NameProperty); }
set { SetValue(NameProperty, value); }
} //定义依赖属性
public static readonly DependencyProperty NameProperty = DependencyProperty.Register("Name", typeof(string), typeof(CustomClass)); }

   上面的类定义了一个依赖属性NameProperty和一个Name属性

   依赖属性使用Register()方法通过WPF依赖属性系统来注册。Register()方法可以获取依赖属性的名称,依赖属性的类型和拥有者的类型。使用DependencyObject基类的SetValue()方法,可以设置依赖属性的值,使用GetValue()方法可以获取其值。

   CustomClass cs = new CustomClass();

   cs.SetValue(CustomClass.NameProperty, txtBox1.Text);

   txtBox2.Text = (string)cs.GetValue(CustomClass.NameProperty);

实例化自定义类,设置和取得依赖属性的值

WPF的控件的属性都带有依赖属性,所以对属性进行设置

下面是设置一个Button的依赖属性

//通过包装的属性设置按钮的背景颜色
buttonA.Background = new SolidColorBrush(Colors.Red); //通过依赖性属性的SetValue设置按钮的背景颜色
SolidColorBrush brush = new SolidColorBrush(Colos.Blue);
buttonB.SetValue(Button.BackgroundProperty,brush); //通过包装的属性获取ButtonB的背景颜色
SolidColorBrush brush1 = (SolidColorBrush)(ButtonA.Background);
txt_Value1.Text = brush1.Color.ToString(); //通过依赖性属性的GetVaue获取ButtonB的背景颜色
SolidColorBrush brush2 = (SolidColorBrush)(ButtonB.GetValue(Button.BackgroundProperty));
txt_Value2.Text = b_Brush2.Color.ToString();

MSDN中给出了下面几种应用依赖属性的场景:

  1. 希望可在样式中设置属性。

  2. 希望属性支持数据绑定。

  3. 希望可使用动态资源引用设置属性。

  4. 希望从元素树中的父元素自动继承属性值。

  5. 希望属性可进行动画处理。

  6. 希望属性系统在属性系统,环境或用户执行的操作或者读取并使用样式更改了属性以前的值时报告。

  7. 希望使用已建立的,WPF进程也使用的元数据约定,例如报告更改属性值时石佛要求布局系统重新编写元素的可视化对象。

下面会写几个实际的场景应用

XAML(2) - 依赖属性的更多相关文章

  1. WPF教程:依赖属性

    一.什么是依赖属性 依赖属性就是一种自己可以没有值,并且可以通过绑定从其他数据源获取值.依赖属性可支持WPF中的样式设置.数据绑定.继承.动画及默认值. 将所有的属性都设置为依赖属性并不总是正确的解决 ...

  2. WPF中的依赖属性

    1. WPF中的依赖属性 依赖属性是专门基于WPF创建的.在WPF库实现中,依赖属性使用普通的C#属性进行了包装,使用方法与普通的属性是相同的. 1.1 依赖属性提供的属性功能 资源 数据绑定 样式 ...

  3. WPF ----在UserControl的xaml里绑定依赖属性

    场景:在定义wpf 用户控件的时候,希望使用时设置自定义的属性来改变用户控件里的状态或内容等. 下面直接上实例代码: 用户控件的后台代码,定义依赖属性 public partial class MyU ...

  4. WPF xaml中列表依赖属性的定义

    列表内容属性 如上图,是一个列表标题排序控件,我们需要定义一个标题列表,从而让调用方可以自由的设置标题信息. 在自定义控件时,会遇到列表依赖属性,那么该如何定义呢? 下面是错误的定义方式: /// & ...

  5. XAML实例教程系列 - 依赖属性和附加属性(四)

    XAML实例教程系列 - 依赖属性和附加属性 2012-06-07 13:11 by jv9, 1479 阅读, 5 评论, 收藏, 编辑 微软发布Visual Studio 2012 RC和Wind ...

  6. WPF 让普通 CLR 属性支持 XAML 绑定(非依赖属性),这样 MarkupExtension 中定义的属性也能使用绑定了

    原文:WPF 让普通 CLR 属性支持 XAML 绑定(非依赖属性),这样 MarkupExtension 中定义的属性也能使用绑定了 版权声明:本作品采用知识共享署名-非商业性使用-相同方式共享 4 ...

  7. xaml中的依赖属性

    wpf使用依赖属性完成数据绑定.动画.属性变更通知.样式化等.对于数据绑定.绑定到.NET属性源上的UI元素的属性必须是依赖属性 .net的一般属性定义如下 private int val;      ...

  8. 2000条你应知的WPF小姿势 基础篇<57-62 依赖属性进阶>

    在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000ThingsYou Should Know About C# 和 2,00 ...

  9. 2000条你应知的WPF小姿势 基础篇<51-56 依赖属性>

    前一阵子由于个人生活原因,具体见上一篇,耽搁了一阵子,在这里也十分感谢大家支持和鼓励.现在开始继续做WPF2000系列. 在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件 ...

随机推荐

  1. CCombobox AddString出错

    1.CComboBox放在对话框构造函数中, 这时CCombobox对象还没建立, 所以出错, 应该放在OnInitDialog()中初始化. 2. 使用的vs2005以上的IDE, 拖拉控件, 添加 ...

  2. [实战经验]Macbook pro 苹果系统换window系统

    1.       Macbook的window软件驱动备份 通过Boot Camp助手进行window支持苹果驱动下载 2.       拆机把SSD固态硬盘放在主盘位置,把苹果的机械盘放在光驱位置 ...

  3. 【LeetCode】8. String to Integer (atoi) 字符串转整数

    题目: Implement atoi to convert a string to an integer. Hint: Carefully consider all possible input ca ...

  4. 【PL/SQL练习】函数

    1.必须返回一个值2.只能在表达式调用 SQL> create or replace function fun1 return number is v_sum_sal emp.sal%type; ...

  5. django中添加用户

    在django中添加用户,直接在auth_user表中添加会有问题,因为这里密码是加密的,可以通过manage.py shell加入 创建User: 1 >>> from djang ...

  6. 学习总结 java 数据库 ResultSet 、PreparedStatement

    package com.hanqi.test; import java.sql.*; public class jdbcTest { public static void main(String[] ...

  7. C# 特性Attributes 和反射

    一,Attributes 类新建一个子类,DetailAttributes 二, 在类的属性声明上面加Attributes public class testAttributes { [Detail( ...

  8. .Net 乱序方法

    前两天开发一个奇葩的功能,突然间想到了用打乱顺序的方式解决.记录代码如下: /// <summary> /// 把收集回来的列表打乱顺序之后返回 /// </summary> ...

  9. 多行文字垂直居中(完美兼容chrome firefox IE6 7 8 9)

    在说到这个问题的时候,也许有人会问CSS中不是有vertical-align属性来设置垂直居中的吗?即使是某些浏览器不支持我只需做少许的CSS Hack技术就可以啊!所以在这里我还要啰嗦两句,CSS中 ...

  10. WPF拖动DataGrid中的数据到ListBox

    1.效果图: 2.XAML <Window x:Class="WpfApplication2.MainWindow" xmlns="http://schemas.m ...