C#WPF XAML属性

C#WPF XAML属性

一、属性语法
1.属性是对XAML元素特征进行描述的方法;属性不允许在XAML中重复设置多次;允许
在托管代码中改变元素的属性值 。
(1)、属性设置的几种方式: 使用特性语法(属性语法)、使用属性元素语法 、使用内容元素语法 、使用集合语法。
2.使用特性语法(属性语法)
(1)、对象的属性通常可表示为对象元素的特性。 特性语法对设置的对象属性命名,后跟赋值运算符 (=), 特性的值始终指定为包含在引号中的字符串。
(2)、特性语法是最简化的属性设置语法,并且对曾使用过标记语言的开发人员而言是最直观的语法。
(3)、每个属性对应一个属性值,属性值类型必须与属性匹配 ,一个标记中可以设置对象的多个属性,只有实例化对象才可以设置实例属性。
(4)、缺点是如果需要放一个控件则受到限制,所以要使用到“属性元素语法”。
C#WPF XAML属性_第1张图片
3.使用属性元素语法
(1)、对于对象元素的某些属性,无法使用特性语法,因为无法在特性语法的引号和字符串限制内充分地表达提供属性值所必需的对象或信息,对于这些情况,可以使用另一个语
法,即属性元素语法。
(2)、属性元素开始标记的语法为 。 通常,该标记的内容是类型的对象元素,属性会将该元素作为其值。 指定内容之后,必须用结束标记结束属性元
素,结束标记的语法为
,某些属性可以使用属性元素语法来设置。
C#WPF XAML属性_第2张图片
4.使用内容元素语法
(1)、某些元素的属性支持内容元素语法,允许忽略元素的名称,实例对象会根据XAML元素中的第一个标记值来设置属性 。
(2)、对于大量的格式化文本,使用内容元素语法更加灵活,属性标记之间可以插入大量的文本内容。
在这里插入图片描述
(3)、缺点:XAML 内容属性值必须是连续的 ,XAML 内容属性的值必须完全在该对象元素上的任何其他属性元素之前或之后指定,无论 XAML 内容属性的值是指定为字符串,还是指定为一个或多个对象,都是如此。
C#WPF XAML属性_第3张图片
5.使用集合语法
(1)、XAML 规范要求 XAML 处理器实现来标识值类型为集合的属性。 .NET 中的常规 XAML
处理器实现基于托管代码和 CLR,并通过以下方法之一标识集合类型:类型实现 IList 、 类型实现 IDictionary 、 类型派生自 Array (有关 XAML 中数组的详细信息,请参阅 X:Array 标记扩展)。
(2)、XAML 语言包含一些优化,可以生成更易于阅读的标记。 其中一项优化是:如果某个特定属性采用集合类型,则在标记中声明为该属性的值内的子元素的项将成为集合的一部
分,在这种情况下,子对象元素的集合是设置为集合属性的值。
(3)、元素支持一个属性元素的集合,才使用集合语法进行设置属性。
(4)、使用托管代码的Add方法来增加更多的集合元素,本质是向对象的集合中添加属性项。
(5)、IList类型:
C#WPF XAML属性_第4张图片
二、基本属性
1.两种特殊属性:附加属性、依赖属性。
2.:附加属性
(1)、附加属性作用于支持附加属性的元素,简单来说,本该属于原属性的元素要作用于其他属性上时会把该元素附加在其他属性上。
C#WPF XAML属性_第5张图片
(2)、附加属性是由支持附加属性的父元素产生作用,支持附加属性的元素会继承所在的
父元素的属性。
(3)、附加属性的格式:AttachedPropertyProvider、PropertyName,父元素的标签“Canvas”加点具体的属性“Left” C#WPF XAML属性_第6张图片
3.依赖属性
(1)、依赖属性和CRL属性类似,提供一个实例级私有字段的访问封装,通过GetValue和
SetValue访问器实现属性的读写操作,(依赖属性:Dependency Properties)。
(2)、最重要一个特点是属性值依赖于一个或者多个数据源,提供这些数据源的方式也可
以不同,由于依赖多数据源的缘故,故称之为依赖属性。
(3).依赖属性就是一种自己可以没有值,并且可以通过Binding绑定从其他数据源获取值。依赖属性可支持WPF中的样式设置、数据绑定、继承、动画及默认值。
C#WPF XAML属性_第7张图片
(3)、依赖属性的特点 :无论什么时候,只要依赖属性的值发生改变,wpf就会自动根据属性的元数据触发一系列的动作,这些动作可以重新呈现UI元素,也可以更新当前的布局,刷新数据绑定等等,这种变更的通知最有趣的特点之一就是属性触发器,它可以在属性值改变的时候,执行一系列自定义的动作,而不需要更改任何其他的代码来实现。通过下面的示例来演示属性变更通知。
C#WPF XAML属性_第8张图片
(4)、可以通过多种不同类型数据源进行赋值,不同赋值顺序影响属性值的改变。
(5)、结果为,鼠标移动到第一行的时候背景颜色加深,鼠标移动到第二行的时候,背景色由黄色变成蓝色。
C#WPF XAML属性_第9张图片
三、标记扩展(Markup Extensions)

  1. 实际项目中为XAML控件属性赋值经常遇到:
    (1)、设计时属性之处于未知状态 、运行时才能获取到。
    (2)、轻松实现XAML页面属性赋值,资源引用,类型转换等操作 。
    2.特定于 WPF 的标记扩展
    (1)、WPF 编程中最常用的标记扩展是支持资源引用的标记扩展(StaticResource(静态资源引用) 和 DynamicResource(动态资源引用)),和支持数据绑定的标记扩展 (Binding)。
    (2)、StaticResource(引用数据字典中定义的静态资源) 通过替换已定义资源的值来为属性提供值。 StaticResource 计算最终在 XAML 加载时进行,并且在运行时没有访问对象图的权限。
    C#WPF XAML属性_第10张图片
    (3)、DynamicResource 通过将值推迟为对资源的运行时引用来为属性提供值。 动态资源
    引用强制在每次访问此类资源时都进行新查找,且在运行时有权访问对象图,为了获取此访问权限,WPF 属性系统中的依赖项属性和计算出的表达式支持,DynamicResource 概念,因此,只能对依赖项属性目标使用 DynamicResource。
    ①、DynamicResource(动态资源引用)与StaticResource(静态资源引用)的区别,如果把例子中的“DynamicResource”替换成“StaticResource”会报错,动态资源引用需要先有资源才有引用,而例子中是先引用才在里面定义资源,如果使用“StaticResource”则报错,根本原因:“StaticResource”查询行为不支持向前引用,(不能引用在引用点之后才定义的资源),而“DynamicResource”可以向前引用,“DynamicResource”运行时才查找并加载所定义的资源。
    C#WPF XAML属性_第11张图片
    (4)、Binding(Xaml载入时将数据绑定到XAML对象) 使用在运行时应用于父对象的数据上下文来为属性提供数据绑定值,此标记扩展相对复杂,因为它会启用大量内联语法来指定数据绑定,Binding绑定数据有两种,一种是绑定后台数据,一种是绑定现有的数据。
    C#WPF XAML属性_第12张图片
    (5)、RelativeSource(对特定数据源绑定) 提供的源信息 Binding ,该信息可在运行时对象树中导航几个可能的关系。 对于在多用途模板中创建的绑定,或在未充分了解周围的对象树的情况下以代码创建的绑定,此标记扩展为其提供专用源,两种绑定模式。
    (6)、 使用self模式 目标对象将作为源对象绑定到自身,可以实现同一对象元素不同属性之间的绑定操作,绑定自身,如自身有一个宽度,高度和宽度一样,就是高度绑定自身宽度。
    C#WPF XAML属性_第13张图片
    (7)、使用TemplatedParent模式 仅在ControlTemplate(控件模板)或者DataTemplate (数据模板)下有效不同的模板,将返回不同类型的绑定结果,绑定不同元素,如有按钮1和按钮2,按钮2需要按钮1的样式,那么就是按钮2绑定按钮1。
    C#WPF XAML属性_第14张图片
    (6)、TemplateBinding (XAML页面中对象模板绑定调用)使控件模板能够使用模板化属性的值,这些属性来自于将使用该模板的类的对象模型定义属性。 换言之,模板定义中的属性可访问仅在应用了模板之后才存在的上下文。 有关详细信息,请参阅 TemplateBinding 标记扩展。
    C#WPF XAML属性_第15张图片
    (9)、ColorConvertedBitmap 支持相对高级的映像方案。
    (10)、ComponentResourceKey 和 ThemeDictionary 支持资源查找的各个方面,特别是支
    持查找与自定义控件一起打包的资源和主题。

四、WPF的5种绑定模式(mode)
1.WPF的绑定模式(mode)是枚举的 枚举值共有5个
1:OneWay(源变就更新目标属性),Source影响着Target,但是Target却影响不到Source。
2:TwoWay(源变就更新目标并且目标变就更新源),Source与Target相互影响。
3:OneTime(只根据源来设置目标,以后都不会变),在OneWay的基础上延伸了一个OneTime,仅绑定一次。
4:OneWayToSource(与OneWay相反),Target影响Source,而Source却影响不到Target。
5:Default(可以单向或双向,是靠被值定的源或目标是否有get或set来指定的),所以绑定的话是需要选上面5个中的一个模式的,根据你的需要来选择,不选的话就会自
动选择第五个的。

(1)、在“OneWay”中输入数值,滚动条不发生变化,而拉动滚动条“OneWay”值会发生变化,因为滚动条充当源,“OneWay”充当目标,所以在“OneWay”属性中源可以改变目标,目标改变不了源。
(2)、在“OneWayToSource”中输入数值,滚动条发生变化,而拉动滚动条“OneWayToSource”值不会发生变化,因为“OneWayToSource”充当目标,滚动条充当源,所以在“OneWayToSource”属性中目标可以改变源,源改变不了目标。
(3)、在“TwoWay”中输入数值,滚动条发生变化,而拉动滚动条“TwoWay”值也会发生变化,因为滚动条充当源,“TwoWay”充当目标,所以在“TwoWay”属性中源可以改变目标,目标可以改变源。
(4)、在“OneTime”中输入数值,滚动条不会发生变化,而拉动滚动条“OneTime”值也不会发生变化,因为滚动条充当源,“OneTime”充当目标,所以在“OneTime”属性中只会在项目运行的那一刻发生变化之后就变化改变,想改变只能在设置样式的时候进行改变,是一次性的。
C#WPF XAML属性_第16张图片

你可能感兴趣的:(WPF,C#,c#,wpf,html5)