1. 概述

信赖属性(DependencyProperty)是UWP的宗旨概念,它是有DependencyObject提供的一种特殊的特性。由于UWP的大约所有UI元素都是合二为一于DependencyObject的FramewordElement,并且那几个UI元素的大致拥有属性及它们出现在XAML中的大致所有属性都是依靠属性,所以可以说器重属性是尤其为UI设计的特性系统。
图片 1

依靠属性的定义:

/// <summary>
/// 获取或设置Title的值
/// </summary>  
public string Title
{
    get { return (string)GetValue(TitleProperty); }
    set { SetValue(TitleProperty, value); }
}

/// <summary>
/// 标识 Title 依赖属性。
/// </summary>
public static readonly DependencyProperty TitleProperty =
    DependencyProperty.Register("Title", typeof(string), typeof(MyPage), new PropertyMetadata(string.Empty));

如上述代码所示,和CLR属性分歧依赖属性必要定义TitleProperty
,然后在性质包装器(Getter和Setter)中经过GetValue和SetValue函数操作属性值。

2. 应用的气象

UWP的爱慕属性经过大幅简化(相对于WPF),更关怀它的基本成效:使用绑定,通过三个输入计算属性值,属性值变化文告,节约内存使用。

2.1 绑定

透过性能包装器,看重属性可以像CLR属性那样选用,也得以在XAML中通过绑定来使用,那是CLR属性无法提供的功效。

在XAML中使用:

<TextBlock x:Name="TextElement"
            Text="{Binding Title}" />

在代码中接纳:

var binding = new Windows.UI.Xaml.Data.Binding();
binding.Path = new PropertyPath("Title");
TextElement.SetBinding(TextBlock.TextProperty, binding);

2.2 通过多个输入统计属性值

在UWP中依赖属性通过三个输入源计算属性的值,从而使开发人士就幸免了不须要的性质设置值或者处理属性值变更公告。以下列表从优先级由高到低列出了借助属性的施用各样。

图片 2

  • 动画值 正在运转的动画片,或具有 HoldEnd
    行为的卡通。若要举办动画处理,动画的靶子属性必须是借助项属性。
  • 本地值 在代码中平昔为目的实例设置的属性值,或者在 XAML
    中安装的属性值。

    本地值可以透过调用ClearValue函数清除,从而使属性值还原成默许值(以我的阅历来说,很少会用到)。

  • 模板属性 假诺在某个模板(来自 ControlTemplate 或
    DataTemplate)中开创一个元素,该因素就会具有这么些模板属性。

  • 体制设置器 Style中的Setter。
  • 继承值
    元素可以从其在目标树中的父级继承着重项属性的值。譬如开发人士不必为各类TextBlock设置FontSize,只须要为父容器设置FontSize即可套用到父容器中的所有TextBlock上。
  • 默认值
    不是指数据类型的默许值,是指PropertyMetadata中指定的默许值。在上头Title的例子中,默许值是string.Empty。

2.3 属性值变化公告

行使着重属性,不必再落实INotifyPropertyChanged即可在性质改变时公告UI更新。也可以在PropertyMeta中采用PropertyChangedCallback或DependencyObject.RegisterPropertyChangedCallback监视看重属性的属性值改变。

2.4 节约内存使用

面前提到,UWP可以不必为所有值都设置值,UI元素的依靠属性可以从样式、继承值、默许值等统计出实际值,并不要求分配内存;即使设置了当地值,那些地点值将积存在HashTable中,之后从那几个HashTable中读取。那是一种以时间换空间的做法。
借使一个Control自身及所继承的FrameworkElement等父类型中拥有的习性加起来大致50个,它的控件模板中大概有3个FrameworkElement,所有属性都是double类型并且存有都不须求设置值,一个Control就可以节约50
* 3 *
8=1200字节的内存空间。我做过的系列最多而且在UI上放了10W个Control,那么就一起节省了大体上100M内存。
如此那般极端的情状也才节省那一点内存,成效好像也没那么大(难道我算错了?)。关于节约内存那一点多少了然下就好,有助于驾驭重视属性的原理,并且面试的时候有可能有救助。

3 信赖属性和CLR属性之间的挑三拣四

行使依赖属性的景观

  • 大多所有继续DependencyObject的类中的属性都应有是重视属性;
  • 急需利用Binding、Style或动画设置值的属性;
  • 需求监视属性值变化布告;
  • 内存真的实在不够用;

应用CLR属性的动静

  • 集合属性。在UWP中广泛的集合属性,唯有ItemsControl的ItemsSource等个别几个是借助属性,别的半数以上都是CLR属性,譬如Hub的Sections;
  • CPU品质敏感的场子。看重属性是用时间换空间的概念,假使须要频仍读写而又不需求绑定,可以考虑采取CLR属性;

4. 凭借属性和线程

所有看重属性都只能在UI线程上利用,否则会抛分外(“应用程序调用一个已为另一线程整理的接口。”)。但是要是利用Async形式的话常常会避开了线程的题材。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图