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. Windows 2008 IIS7.0安装FTP教程 IIS7.5 配置多用户FTP

    一. 安装IIS.右键[我的电脑],选择[管理]打开.     选择[角色],选择[添加角色]打开.                   二. 配置DOS.输入: CACLS "%Syste ...

  2. 传输层(一)TCP的三次握手和四次挥手及关闭套接字的原理

    TCP连接需三次握手才能建立,断开连接则需要四次握手. 客户端TCP状态迁移: CLOSED->SYN_SENT->ESTABLISHED->FIN_WAIT_1->FIN_W ...

  3. Robotlegs2 学习笔记 -- SwiftSuspenders 2.x (2)

    Swiftsuspenders2简介 Swiftsuspenders2是一个基于元数据(metadata)的IOC(控制反转,inversion of control)的AS3的解决方案.(对于元数据 ...

  4. 慕课网-安卓工程师初养成-1-1 Java简介

    来源 http://www.imooc.com/video/1430 主要内容 Java平台应用 核心概念:JVM,JDK,JRE 搭建Java开发环境 使用工具开发安卓程序 经验技巧分享 Java历 ...

  5. Informatica 启动、停止工作流命令

    切换到Infa用户su - infa 停止$INFA_HOME/server/tomcat/bin/infaservice.sh shutdown 启动$INFA_HOME/server/tomcat ...

  6. WebApi简单使用

    一.建立一个WebApi项目 WebApi项目的文件和MVC的基本项目内容差不多,都有Models View Controller等,区别在于WebApi的控制器继承的不是Controller类,而是 ...

  7. 深入探讨ES6生成器

    如果对于ES6生成器不熟悉,请先阅读并运行下http://www.cnblogs.com/linda586586/p/4282359.html里面的代码.当你感觉掌握了基础之后,我们可以深入探讨一些细 ...

  8. Excel 代码

    package com.chinabase.common.util; import java.io.FileInputStream; import java.io.FileOutputStream; ...

  9. Oracle笔记 九、PL/SQL 游标的使用

    --演示隐式游标,系统自动声明,自动打开,自动使用并且自动关闭 begin update emp set sal = 1000; dbms_output.put_line('影响的行数:' || sq ...

  10. WP8_给图片、按钮设置自定义图片

    工程目录下新建文件夹Images,将图片文件复制到Images文件夹里,本文以image1为例 1).在xaml里加背景图片 image图片: <Stretch="Fill" ...