• 零起点学习WPF之《WPF揭秘》读书笔记(8)——第三章 属性值继承


    3.2.3 属性值继承

    属性值继承(简称属性继承)它不是传统的面向对象的类继承,而是指属性值自顶向下沿着员叔叔传递。

    下面的代码在Window 元素上设置了Font属性。

    代码
    //手写代码,难免有误,见谅

    <Window xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation "
    xmlns:x
    = "http://schemas.microsoft.com/winfx/2006/xaml/presentation
    Title ="
    属性继承" SizeToContent = "WidthAndHeight" FontSize = "30" FontStyle = " Italic"
    Background
    = "OrangeRed">
    <StackPanel>
    <Label FontWeight = "Bold" FontSize = "20" Foreground = "White">WPF</Label>
    <Label> WPF2</Label>
    <ListBox>
    <ListBoxItem> chapter 1</ListBoxItem>
    <ListBoxItem> chapter 2</ListBoxItem>
    </ListBox>
    <StackPanel Orientation = "Horizontal" HorizontalAlignment = "Center">
    <Button MinWidth = "75" Margin = "10">Help</Button>
    <Button MinWidth = "75" Margin = "10">OK</Button>
    </StackPanel>
    <StatusBar >successed</StatusBar>
    </StackPanel>
    </Window>

    对于大部分元素来说,这两个设置将会沿着逻辑树向下传递,并由子元素继承。这个继承会影响到Button 和 LisBox元素的。然而第一个Lable的FontSize却不会收到影响,因为它本身已经被显示的设置了为 20 ,这有点像“就近原则”。
    注意:虽然StatusBar也像其他控件一样也支持这两种属性,但它的文本却不会收到两个属性的影响。

    属性值的继承不行为是受以下的两种因素影响的:
    (1)并不是每一个依赖属性都参与属性继承的。(从其内部来讲,以来属性会通过传递FrameworkPropertyMetadataOptions.Inherits给 DependencyProperty.Register方法来完成继承的 )
    (2)有其他一些优先级更高的来源设置这些属性值。

    在这个例子中,它满足后一种因素。有一些控件如StatusBar、Menu、ToolTip 控件其内部会把字体属性设置为当前的系统设置。通过这样方式,用户可以在控制面板中控制他们的字体,这对于用户来说这很熟悉,但是结果可能让你感觉更加迷惑,因为这样的控件会“吞噬”所有的继承,它会阻止继承元素沿着元素树继续向下传递。

    【在其他地方使用属性继承:】
    属性值的传递是基于元素树设计的,但是它已经被扩展到了其他上下文中。例如:值可以传递给一些看起来像XML子元素的一样的元素(这是由XAML属性元素语法造成的),但是它们并不是逻辑树或者是可视树中子元素。这些伪子元素( pseudo-children )可以是一个元素触发器、也可以是任意的属性值(并且不仅仅是Content或者Children),只要它是从Freezable派生而来的对象就行。



    返回导读目录,阅读更多随笔



    分割线,以下为博客签名:

    软件臭虫情未了
    • 编码一分钟
    • 测试十年功


    随笔如有错误或不恰当之处、为希望不误导他人,望大侠们给予批评指正。

  • 相关阅读:
    字体下载大宝库:30款好看的免费英文字体
    jQuery Mapael – 呈现动态的矢量地图
    Qt:用 __thread 关键字让每个线程有自己的全局变量
    从C++到Qt(舍弃IDE或qmake、cmake等工具的束缚,尝试通过几个例子)
    C++11(及现代C++风格)和快速迭代式开发
    EventBus + Redis发布订阅模式
    并发、并行和高并发
    Span<T>和Memory<T>
    Lucene.Net做一个简单的搜索引擎-全文索引
    技术架构演变
  • 原文地址:https://www.cnblogs.com/08shiyan/p/1823944.html
Copyright © 2020-2023  润新知