美文网首页
依赖属性

依赖属性

作者: Lulus | 来源:发表于2017-12-29 17:51 被阅读0次

概念

依赖属性就是自己自己没有值,通过Binding从数据源获得值,就是依赖在别人身上,拥有依赖属性的对象称为依赖对象

应用依赖属性的场景

1、在样式中设置属性。
2、属性支持数据绑定。
3、使用动态资源引用设置属性。
4、从元素树中的父元素自动继承属性值。
5、属性可进行动画处理。
6、属性系统在属性系统、环境或用户执行的操作或者读取并使用样式更改了属性以前的值时报告。
7、使用已建立的、WPF 进程也使用的元数据约定,
例如报告更改属性值时是否要求布局系统重新编写元素的可视化对象。依赖对象创建时并不包含存储数据空间。WPF中必须使用依赖对象作为依赖属性的宿主。

用于数据绑定

依赖属性是针对一个类的静态属性
每个类实例去这个静态属性里面Get属于自己的那一个属性

对象有属性,属性的值去公共数据区域【所有类实例的依赖属性都放在一个静态变量(公共区域)里面】里面取
优势:公共数据区域不在UI线程,所以可以随时修改数值

Tips

WPF界面元素为依赖对象,所有属性为依赖属性,所以支持绑定

1

示例

自定义控件

public class CustomBorder : Border
{
    public CustomBorder()
    {
        //初始化时默认给定一个背景色 
        Background = Brushes.Blue;
    }
    

    //属性
    public Double Transparency
    {
        get { return (Double)GetValue(TransparencyDependency); }
        set { SetValue(TransparencyDependency, value); }
    }

    //注册依赖属性
    public readonly static DependencyProperty TransparencyDependency =
        DependencyProperty.Register( 
        //属性名
        "Transparency",
        //属性数据类型
        typeof(Double),
        //拥有者
        typeof(CustomBorder),
        //处理方法
        new PropertyMetadata(new PropertyChangedCallback(transparencyPropertyChangedCallback))
        );

    //当属性修改时的处理
    static void transparencyPropertyChangedCallback(DependencyObject sender, DependencyPropertyChangedEventArgs e)
    {
        CustomBorder border = (sender as CustomBorder);
        if (border != null)
        {
            border.Opacity = 1 - Convert.ToDouble(e.NewValue) / 255;
        }
    }
}

DependencyProperty的Register方法

有几种重载方法,下面展示两种

5
//
// 摘要:
//     使用指定的属性名称、属性类型、所有者类型和属性元数据注册依赖属性。
//
// 参数:
//   name:
//     要注册的依赖属性的名称。
//
//   propertyType:
//     属性的类型。
//
//   ownerType:
//     正在注册依赖属性的所有者类型。
//
//   typeMetadata:
//     依赖属性的属性元数据。
//
// 返回结果:
//     一个依赖属性标识符,应使用它来设置类中 public static readonly 字段的值。 稍后将此标识符用来引用依赖属性,从而实现以编程方式设置其值或获取元数据等操作。
public static DependencyProperty Register(string name, Type propertyType, Type ownerType, PropertyMetadata typeMetadata);

前台

<Grid>
    <local:CustomBorder x:Name="bord" Transparency="{Binding ElementName=slider1, Path=Value}"></local:CustomBorder>
    <Slider Grid.Row="1" HorizontalAlignment="Left" Name="slider1" Width="130" Value="0" Minimum="0" Maximum="255" />
</Grid>

示例代码

https://github.com/zLulus/NotePractice/tree/dev3/WPF/WpfDemo/DependencyProperties

相关文章

  • 依赖属性

    概念 依赖属性就是自己自己没有值,通过Binding从数据源获得值,就是依赖在别人身上,拥有依赖属性的对象称为依赖...

  • 依赖属性 & 附加属性

    一、概述 依赖属性指属性没有值,通过Binding从数据源中获取值 二、使用 2.1 依赖属性 Register ...

  • WPF 依赖属性和依赖对象

    WPF的所有UI控件都是依赖对象,控件的属性都是依赖属性。依赖属性(DependencyProperty)是一种自...

  • watch和computed的区别

    计算属性Computed: 计算属性通常依赖于其他数据属性。对于依赖属性的任何改变都会触发计算属性的逻辑。计算属性...

  • 依赖属性|简单属性|附加属性

    依赖属性 简单理解就是属性,支持继承,比如 Window 有 Font 属性,Button 也有 Font 属性,...

  • 阿里大于短信功能的java实现

    utils 依赖 yml 属性 注入属性类 发送

  • Vue.js 计算属性依赖

    一是计算属性可以依赖其他计算属性;二是计算属性不仅可以依赖当前Vue实例数据,还可以依赖其他实例的数据。

  • 第四章计算属性

    为了简化逻辑,当某个属性的值依赖其他属性的值,我们可以使用计算属性 什么是计算属性 计算属性就是当其依赖属性的值发...

  • computed、watch和methods区别

    1.computed是计算属性,依赖其他属性值,并且computed的值有缓存。只有computed依赖的属性值发...

  • 自定义滑动TabLayout

    依赖 属性 滑动TabLayout,对于ViewPager的依赖性强 作用属性设置指示器的高边距mIndicato...

网友评论

      本文标题:依赖属性

      本文链接:https://www.haomeiwen.com/subject/eihwgxtx.html