原文:WPF依赖属性值源(BaseValueSource)

 

WPF依赖属性提供一个机制,可以获取依赖属性提供值的来源

其以BaseValueSource枚举表示

1.Default

public static readonly DependencyProperty WorkingTagProperty = DependencyProperty.Register(
"WorkingTag",
typeof(object),
typeof(CustomControl),
new UIPropertyMetadata("<working tag>"));

2.DefaultStyle和DefaultStyleTrigger(Style和StyleTrigger)

注意点:若即定义在外部程序集中的默认控件样式则为DefaultStyle和DefaultStyleTrigger,否则定义在本地项目(如在Application中重新定义控件样式,则为Style和StyleTrigger)

3.TemplateTrigger和ParentTemplateTrigger

在模板中触发

        <ControlTemplate TargetType="{x:Type local:CustomControl}">
<Button x:Name="Part_Button" Content="{TemplateBinding Title}"
IsEnabled="{TemplateBinding IsEnabled}" Background="{TemplateBinding Background}" />
<ControlTemplate.Triggers>
<Trigger SourceName="Part_Button" Property="IsEnabled" Value="False">
<Setter Property="Title" Value="disable test text"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>

4.ParentTemplate

当模板中有定义内部控件样式模板时,内部控件值变更由上级模板触发

下面TextBlock的Text的触发源为ParentTemplate

        <Style TargetType="{x:Type local:CustomControl}">
<Setter Property="Title" Value="default test text" />
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:CustomControl}">
<ControlTemplate.Resources>
<Style TargetType="Button">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<TextBlock Text="{TemplateBinding Content}"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ControlTemplate.Resources>
<Border>
<Button x:Name="Part_Button" Content="{TemplateBinding Title}"
IsEnabled="{TemplateBinding IsEnabled}" Background="{TemplateBinding Background}" />
</Border>
<ControlTemplate.Triggers>
<Trigger SourceName="Part_Button" Property="IsEnabled" Value="False">
<Setter Property="Title" Value="disable test text"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

5.Local

即本地调用了SetValue方法

public object WorkingTag
{
get { return GetValue(WorkingTagProperty); }
set { SetValue(WorkingTagProperty, value); }
}

6.Inherited

属性继承是一个向下包容继承的关系

由属性继承值更改触发,如文字大小(FontSize)就是一个继承关系,更改根元素,那么子元素就全会更改

此功能也可以用来debug用,用来检测值是由何时修改的.

.net 4.0新增方法

DependencyObject ..::. SetCurrentValue 方法

这个方法类似SetValue方法,但SetCurrentValue 不会去修改属性值源(即何处修改属性值)

参考文档:

http://msdn.microsoft.com/en-us/library/ms743230.aspx

参考绑定时bug

http://blogs.msdn.com/b/vinsibal/archive/2009/03/24/the-control-local-values-bug.aspx

http://blogs.msdn.com/b/vinsibal/archive/2009/05/21/the-control-local-values-bug-solution-and-new-wpf-4-0-related-apis.aspx

http://arbel.net/blog/archive/2009/11/04/local-values-in-dependencyobjects.aspx

WPF依赖属性值源(BaseValueSource)的更多相关文章

  1. WPF依赖属性(续)(2)依赖属性与附加属性的区别

    原文:WPF依赖属性(续)(2)依赖属性与附加属性的区别        接上篇,感谢各位的评论,都是认为依赖属性的设计并不是为了节省内存,从大的方面而讲是如此.样式,数据绑定,动画样样都离不开它.这篇 ...

  2. WPF自学入门(五)WPF依赖属性

    在.NET中有事件也有属性,WPF中加入了路由事件,也加入了依赖属性.最近在写项目时还不知道WPF依赖属性是干什么用的,在使用依赖项属性的时候我都以为是在用.NET中的属性,但是确实上不是的,通过阅读 ...

  3. WPF依赖属性(续)(3)依赖属性存储

    原文:WPF依赖属性(续)(3)依赖属性存储          在之前的两篇,很多朋友参与了讨论,也说明各位对WPF/SL计数的热情,对DP系统各抒已见,当然也出现了一些分歧. 以下简称DP为依赖属性 ...

  4. WPF依赖属性(续)(1)

    原文:WPF依赖属性(续)(1)                 之前有写过几篇文章,详细地介绍了依赖属性的基本使用方法,如果你不想了解其内部实现机制的话,那么通过那两篇文章的介绍,足以应付平时的应用 ...

  5. WPF依赖属性的正确学习方法

    前言 我在学习WPF的早期,对依赖属性理解一直都非常的不到位,其恶果就是,我每次在写依赖属性的时候,需要翻过去的代码来复制黏贴. 相信很多朋友有着和我相同的经历,所以这篇文章希望能帮助到那些刚刚开始学 ...

  6. WPF 依赖属性前言

    WPF 依赖属性前言 ​ 在.net中,我们可以属性来获取或设置字段的值,不需要在编写额外的get和set方法,但这有一个前提,那就是需要在对象中拥有一个字段,才能在此字段的基础上获取或设置字段的值, ...

  7. WPF依赖属性详解

    WPF依赖属性详解 WPF 依赖属性 英文译为 Dependency Properties,是WPF引入的一种新类型的属性,在WPF中有着极为广泛的应用,在WPF中对于WPF Dependency P ...

  8. 监听WPF依赖属性

    原文:监听WPF依赖属性 当我们使用依赖属性的时候,有时需要监听它的变化,这在写自定义控件的时候十分有用, 下面介绍一种简单的方法.   如下使用DependencyPropertyDescripto ...

  9. WPF 依赖属性源码 洞察微软如何实现DependencyProperty

    依赖属性DependencyProperty是wpf最重要的一个类,理解该类如何实现对学习wpf帮助很大! 终于找到了该类的源码!仔细阅读源码,看看微软如何玩的花招! File: Base\Syste ...

随机推荐

  1. android蓝牙主动发起配对实例

    package cn.madfinger.core; import java.io.IOException; import java.lang.reflect.Method; import java. ...

  2. thinkphp5最最最最简单的ajax实例

    thinkphp5最最最最简单的ajax实例 一.总结 一句话总结:页面端使用$.get()方法传递ajax请求,服务器端判断是不是ajax请求,是的话接受参数,进行逻辑处理之后向客户端返回值. 1. ...

  3. (转)Bash 快捷键 完整版

    转自:http://www.opsers.org/linux-home/base/full-version-of-bash-keyboard-shortcuts.html#toc-3 生活在 Bash ...

  4. 【3002】删去K个数字

    Time Limit: 3 second Memory Limit: 2 MB [问题描述] 输入一个数字串S和整数K(K小于数字串S的长度),从S中删去K个数字,使剩余数字在保持相对位置不变的情况下 ...

  5. Helloworld之Spring依赖注入/控制反转(DI/IoC)版

    Helloworld之Spring依赖注入/控制反转(DI/IoC)版 作者:雨水, 日期:2014-10-29 摘要:本文主要用于培训刚開始学习的人理解Spring中的依赖注入的基本概念. 先介绍依 ...

  6. Android自定义组件系列【9】——Canvas绘制折线图

    有时候我们在项目中会遇到使用折线图等图形,Android的开源项目中为我们提供了很多插件,但是很多时候我们需要根据具体项目自定义这些图表,这一篇文章我们一起来看看如何在Android中使用Canvas ...

  7. AngularJS之ng-options指令

    1.基本下拉效果(lable for value in array) 其中select标签中的ng-model属性必须有,其值为选中的对象或属性值. <div ng-controller=&qu ...

  8. [AngularJS] Directive for top scroll bar

    angular.directive('dblScroll', dblScroll) dblSroll.$inject = [ '$timeout' ]; function dblScroll($tim ...

  9. hdu 1166 敌兵布阵 线段树 点更新

    // hdu 1166 敌兵布阵 线段树 点更新 // // 这道题裸的线段树的点更新,直接写就能够了 // // 一直以来想要进线段树的坑,结果一直没有跳进去,今天算是跳进去吧, // 尽管十分简单 ...

  10. oracle 之 COMMENT 分类: H2_ORACLE 2014-04-24 15:30 386人阅读 评论(0) 收藏

    http://blog.csdn.net/liguihan88/article/details/3002403 无疑注释现在都被大家接受和认可,在大家编程用的IDE中都提供或有第三方插件来支持提取注释 ...