WPF基础知识

本文详细讲解了XAML中的属性设置,包括特性语法、属性元素语法和内容元素语法,重点阐述依赖属性、附加属性和动态资源的区别,以及WPF中的StaticResource和DynamicResource在资源引用和数据绑定中的应用。掌握这些概念有助于高效编写和维护WPF项目。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

XAML属性设置。属性是对XAML元素特征进行描述的方法;属性不允许在XAML中重复设置多次;允许在托管代码中改变元素的属性值。这三种有关属性的说明和解释。
其中,设置属性有四种方式,分别是特性语法(属性语法),属性元素语法,内容元素语法和集合语法。这四种方法的用处不尽相同,对于特性语法来说,特性语法是最简化的属性设置语法,并且对曾使用过标记语言的开发人员而言是最直观的语法。而属性元素语法,该标记的内容是类型的对象元素,属性会将该元素作为其值。
对于大量的格式化文本,使用内容元素语法更加灵活属性标记之间可以插入大量的文本内容,这一个文本内容,当然是首选内容元素语法。元素支持一个属性元素的集合,才使用集合语法进行设置属性,本质是向对象的集合中添加属性项,这就是集合语法。
WPF三属性。分别是基本属性、附加属性和依赖属性。进一步了解中,基本属性也就是在编写代码时常写的一些属性值,是直接作用在代码中的。那什么是附加属性呢?附加属性作用于支持附加属性的元素。附加属性是由支持附加属性的父元素产生作用,支持附加属性的元素会继承所在的父元素的属性。这就是附加属性。
那依赖属性又怎么理解,我了解到,依赖属性最重要一个特点是属性值依赖于一个或者多个数据源,提供这些数据源的方式也可
以不同,由于依赖多数据源的缘故,故称之为依赖属性。依赖属性就是一种自己可以没有值,并且可以通过Binding绑定从其他数据源获取值。依赖属性可支持WPF中的样式设置、数据绑定、继承、动画及默认值。
WPF标志扩展。在使用WPF编写页面时,我们会发现,在为XAML控件属性赋值时会经常遇到两个问题,一个是设计时属性值处于未知状态,另一个则是运行时才能获取到属性值。所以,掌握WPF的标志扩展,就可以轻松实现XAML页面属性赋值,资源引用,类型转换等操作。
WPF 编程中最常用的标记扩展是支持资源引用的标记扩展,和支持数据绑定的标记扩展。支持资源引用的标志扩展有两种,一种是StaticResource 通过替换已定义资源的值来为属性提供值。 另一种就是DynamicResource 通过将值推迟为对资源的运行时引用来为属性提供值。和支持数据绑定的标记扩展 (Binding)。使用在运行时应用于父对象的数据上下文来为属性提供数据绑定值。此标记扩展相对复杂,因为它会启用大量内联语法来指定数据绑定。
AML动态资源DynamicResource。一般来说,动态资源DynamicResource拥有属于自己的适用场合,资源的值依赖一些条件,而该条件直到运行时才能确定。包括系统资源,或是用户可设置的资源。比如:可以创建引用系统属性诸如SystemColors,SystemFonts来设置值,而这些属性是动态的,它们的值又来自于运行环境和操作系统。为自定义控件引用或创建Theme Style。希望在程序运行期间调整资源字典的内容时。希望资源可以向前引用时(如上面在Canvas中引用innerLgbResource一样)资源文件很大,希望在运行时才加载。要创建的Style的值可能来自于其它值,而这些值又依赖于Theme或用户的设置。当引用资源的元素的父元素有可能在运行期改变,这个时候也需要使用动态资源。因为父元素的改变将导致资源查询的范围。Dynamic resource的限制条件:属性必须是依赖属性,或是Freezable的。
XAML动态资源DynamicResource。一般来说,动态资源DynamicResource拥有属于自己的适用场合,资源的值依赖一些条件,而该条件直到运行时才能确定。包括系统资源,或是用户可设置的资源。比如:可以创建引用系统属性诸如SystemColors,SystemFonts来设置值,而这些属性是动态的,它们的值又来自于运行环境和操作系统。为自定义控件引用或创建Theme Style。希望在程序运行期间调整资源字典的内容时。希望资源可以向前引用时(如上面在Canvas中引用innerLgbResource一样)资源文件很大,希望在运行时才加载。要创建的Style的值可能来自于其它值,而这些值又依赖于Theme或用户的设置。当引用资源的元素的父元素有可能在运行期改变,这个时候也需要使用动态资源。因为父元素的改变将导致资源查询的范围。Dynamic resource的限制条件:属性必须是依赖属性,或是Freezable的
StaticResources资源,它的适用场合有在资源第一次引用之后无需再修改资源的值。资源引用不会基于运行时的行为进行重新计算,比如在重新加载Page/Window的时候。当需要设置的属性不是DependencyObject或Freezable类型的时候,用StaticResource。当需要将资源编译到dll中,并打包为程序的一部份,或者希望在各应用程序之间共享时,也使用StaticResource。而对于DynamicResource,即使资源是定义在Theme中,也只能等到运行时确定,导致一些可能意料不到的情况发生。当需要使用资源设置大量的依赖属性(Dependency Property)的时候。由于依赖属性具有属性系统提供的值缓存机制,所以,如果能在程序装载时设置依赖属性的值,这样,依赖属性就不需要检查自己的值并返回最后的有效值了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值