[UWP]美学原理依赖属性1:概述

二.肆 节约内部存款和储蓄器使用

后面提到,UWP能够不必为全部值都设置值,UI成分的依靠属性能够从样式、继承值、私下认可值等总结出实际值,并不须要分配内部存储器;若是设置了本地值,这几个地面值将积存在HashTable中,之后从这一个HashTable中读取。那是一种以时日换空间的做法。
只要八个Control本人及所继承的FrameworkElement等父类型中兼有的习性加起来粗粗四十5个,它的控件模板中山大学约有二个FrameworkElement,全体属性都是double类型并且有着都不须求设置值,3个Control就能够省去50
* 3 *
八=1200字节的内部存款和储蓄器空间。小编做过的体系最多而且在UI上放了十W个Control,那么就合计节省了大概拾0M内部存款和储蓄器。
如此那般极端的图景也才节省这一点内存,效用好像也没那么大(难道笔者算错了?)。关于节约内部存款和储蓄器这一点多少精晓下就好,有助于领会信赖属性的法则,并且面试的时候有相当大希望有协理。

2. 选用的场地

美学原理,UWP的依赖性属性经过大幅简化(相对于WPF),更关怀它的主干职能:使用绑定,通过七个输入总结属性值,属性值变化文告,节约内部存款和储蓄器使用。

二.二 通过多少个输入总结属性值

在UWP中正视属性通过多个输入源计算属性的值,从而使开发职员就防止了不要求的性质设置值可能处理属性值变更通告。以下列表从优先级由高到低列出了借助属性的使用各种。

美学原理 1

  • 动画值 正在周转的动画片,或具有 HoldEnd
    行为的动画片。若要实行动画处理,动画的目的属性必须是借助项属性。
  • 本地值 在代码中一向为目的实例设置的属性值,也许在 XAML
    中安装的属性值。

    本地值能够经过调用ClearValue函数清除,从而使属性值还原成暗中同意值(以本身的经验来说,很少会用到)。

  • 模板属性 如若在某些模板(来自 ControlTemplate 或
    DataTemplate)中开创一个要素,该因素就会怀有那一个模板属性。

  • 体制设置器 Style中的Setter。
  • 继承值
    成分能够从其在对象树中的父级继承信赖项属性的值。譬如开发人士不必为每一种TextBlock设置FontSize,只必要为父容器设置FontSize即可套用到父容器中的全数TextBlock上。
  • 默认值
    不是指数据类型的默许值,是指PropertyMetadata中钦命的暗许值。在地点Title的例证中,暗中同意值是string.Empty。

三 注重属性和CLBMWX3属性之间的取舍

动用注重属性的事态

  • 大多全数继续DependencyObject的类中的属性都应当是重视属性;
  • 需求动用Binding、Style或动画设置值的习性;
  • 亟待监视属性值变化公告;
  • 内部存款和储蓄器真的确实不够用;

利用CL本田CR-V属性的意况

  • 集合属性。在UWP西藏中国广播公司大的集合属性,唯有ItemsControl的ItemsSource等少数多少个是借助属性,别的大多数皆以CLXC90属性,譬如Hub的Sections;
  • CPU品质敏感的场地。依赖属性是用时间换空间的定义,假诺须求频仍读写而又不须要绑定,能够思考选用CLRubicon属性;

四. 凭借属性和线程

具有注重属性都只能在UI线程上行使,否则会抛格外(“应用程序调用八个已为另1线程整理的接口。”)。不过假使选用Async形式的话平常会规避了线程的题材。

1. 概述

借助于属性(DependencyProperty)是UWP的中央概念,它是有DependencyObject提供的一种奇特的品质。由于UWP的大约全部UI成分都以合2为1于DependencyObject的FramewordElement,并且那一个UI成分的差不多全数属性及它们出现在XAML中的大致全体属性都以依靠属性,所以能够说依赖属性是专门为UI设计的属性系统。
美学原理 2

依赖属性的概念:

/// <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));

如上述代码所示,和CL昂科雷属性不一致注重属性须求定义TitleProperty
,然后在性质包装器(Getter和Setter)中经过GetValue和SetValue函数操作属性值。

2.1 绑定

通过质量包装器,正视属性可以像CL汉兰达属性那样采纳,也能够在XAML中通过绑定来行使,那是CLXC90属性不能提供的功力。

在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);

二.三 属性值变化文告

动用信赖属性,不必再落到实处INotifyPropertyChanged即可在质量改变时公告UI更新。也可以在PropertyMeta中使用PropertyChangedCallback或DependencyObject.RegisterPropertyChangedCallback监视依赖属性的属性值改变。