WPF 依赖属性和附加属性

除了普通的 CLR 属性, WPF 还有一套自己的属性系统。这个系统中的属性称为依赖属性。

1. 依赖属性

为啥叫依赖属性?不叫阿猫阿狗属性?

通常我们定义一个普通 CLR 属性,其实就是获取和设置一个私有字段的值。假设声明了 100 个 CLR 属性,每个属性占用 8 个字节(byte)的私有字段。那么实例化 10000 个这个类,就至少消耗了 100 * 8 * 10000 = 7.63M 内存。实际上,并非用到所有的属性。这就造成了内存浪费。

如何解决这种属性资源浪费的问题?

现实中一个例子,假设出去旅游,不可能把所有的日常生活用品都带去,一般也就带上日常换洗衣物,像锅碗瓢盆、洗衣粉、厕纸、洗发水等都要带上,岂不乱成一锅。所以,有些东西可以在要用的时候再去获取。

这就是 WPF 依赖属性的理念, 依赖属性本身没有值, 它依赖绑定源来获取值

在 UserControl 中定义一个依赖属性,snippet 快捷方式(propdp),

public partial class DependencyPropertyDemo : UserControl
{
   
   
    /// <summary>
    /// 获取或设置MyProperty的值
    /// </summary>  
    public string MyProperty
    {
   
   
        get => (string)GetValue(MyPropertyProperty);
        set => SetValue(MyPropertyProperty, value);
    }

    /// <summary>
    /// 标识 MyProperty 依赖属性。
    /// </summary>
    public static readonly DependencyProperty MyPropertyProperty =
        DependencyProperty.Register(nameof(MyProperty), typeof(string), 
            typeof(DependencyPropertyDemo), new PropertyMetadata(default(string)));

    public DependencyPropertyDemo()
    {
   
   
        InitializeComponent();
    }
}

可以进方法 DependencyProperty.Register 查看,实质是调用内部 RegisterCommon 方法把属性注册到一个 Hashtable

private static Hashtable PropertyFromName = new Hashtable();

private static DependencyProperty RegisterCommon
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值