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

本文介绍了WPF中属性值继承的概念及工作原理。属性值继承是指属性值自顶向下沿着元素树传递,但并非所有依赖属性都会参与继承,且某些控件如StatusBar可能会覆盖这种继承行为。此外,还讨论了伪子元素如何应用属性继承。

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派生而来的对象就行。

转载于:https://www.cnblogs.com/08shiyan/archive/2010/09/11/1823944.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值