WPF依赖属性-依赖属性介绍

22 篇文章 2 订阅

WPF的设计理念是:数据驱动,UI与逻辑松耦合

一、传统的CLR属性
public class Person
{
    private string _Name;
    public string Name
    {
        get
        {
             return _Name;
         }
         set
         {
            _Name = value;
         }
     }
 }
二、CLR属性特点:
  • CLR属性,是实例属性;
  • 在多级继承的情况下,孙孙辈对象占用内存空间不可避免的膨胀;
三、依赖属性
// 1. 使类型继承DependencyObject类
    public class Person : DependencyObject
    {
        // 2. 声明一个静态只读的DependencyProperty 字段
        public static readonly DependencyProperty nameProperty;
        static Person()
        {
            // 3. 注册定义的依赖属性
            nameProperty = DependencyProperty.Register("Name", typeof(string), typeof(Person), 
                new PropertyMetadata("Learning Hard",OnValueChanged)); 
        }
        // 4. 属性包装器,通过它来读取和设置我们刚才注册的依赖属性
        public string Name
        {
            get { return (string)GetValue(nameProperty); }
            set { SetValue(nameProperty, value); }
        }
        private static void OnValueChanged(DependencyObject dpobj, DependencyPropertyChangedEventArgs e)
        {
            // 当只发生改变时回调的方法
        }
    }
四、依赖属性的特点

1、依赖属性声明为:类的静态只读对象;
2、依赖属性是通过DependencyObject注册的属性;
3、依赖属性读取是通过DependencyObject的方法读取;
4、类的依赖属性只有一份,且由DependecyObject维护。
5、多级继承,且大多数字段值不改变的情况下,减少内存占比
 DependencyProperty将一个对象依赖属性存储在一个全局的Hashtable中;通过依赖对象(DependencyObject)的GetValue和SetValue存取数据;
6、 依赖属性值可以通过Binding依赖于其它对象上,这就使得数据源一变动;依赖于此数据源的依赖属性全部进行更新

五、依赖属性特性应用

1、依赖属性(值传递)继承
中逻辑树上实际父级变动,在子级没有显式指定值时,默认采用父级的值
 如下图中:窗体上所有的字体都变大(从20变成了50),并不需要通过设置每个控件的属性;只需要设置窗体的属性,这个窗体的子控件就会适应这一改变,并且使用相同的设置
在这里插入图片描述

<Window xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  Title="WPF Example" SizeToContent="WidthAndHeight"
  FontSize="50" FontStyle="Italic"
  Background="Blue">
    <StackPanel>
        <Label FontWeight="Bold" FontSize="20" Foreground="White">
            Hi There!
        </Label>
        <Label>2015 Solidmango</Label>
        <ListBox>
            <ListBoxItem>Item1</ListBoxItem>
            <ListBoxItem>Item2</ListBoxItem>
        </ListBox>
        <StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
            <Button MinWidth="75" Margin="10">Help</Button>
            <Button MinWidth="75" Margin="10">OK</Button>
        </StackPanel>
        <StatusBar>Solidmango</StatusBar>
    </StackPanel>
</Window>

2、属性的改变通知
CLR属性只有通过事件响应函数或者回调函数来传递属性性改变; 依赖属性只需配置就可以(见第三部分的示例)

更详细的介绍参见依赖属性的传递

五、依赖属性的优先级

在这里插入图片描述
参考文档
WPF快速入门系列(2)——深入解析依赖属性

一站式WPF–依赖属性(DependencyProperty)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BoBPage

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值