XAML
是一种基于
XML
语法的用来创建
.NET
对象树的语言。从严格意义上来讲,
XAML
与
WPF
是相互独立的。
XAML
更多的算是一种技术,并不是专门供
WPF
使用的。比如
WWF(Windows Workflow Foundation)
就能够用
XAML
表示工作流。
XAML
本质上只是一种用于构建
.NET
对象树的语言,与
WPF
框架没有特殊的关联。下面了解一下
XAML
编译器的工作原理。
命名空间
XAML
使用
XML
命名空间来表示
.NET
命名空间,但是他们之间并不是一对一的通信。一个
XML
命名空间可以包含若干个
.NET
命名空间。有两种方式实现:
第一种是将
XmlnsDefinitionAttribute
应用于那些将要包含在
XAML
中进行访问的类型。
[assembly:XmlnsDefinition(“http://...”,”mynamespace”)]
。
第二种是通过查找命名空间中的类型的方式:
xmlns:local="clr-namespace: Samples;assembly="
。如果
”clr-namespace:”
后面没有分号,那么它之后的都当做
namespace
来解析,而该命名空间一定在当前程序集中;否则,
assembly
后面跟的就是程序集信息。
生成类
x:Class="OpenXMLWriter.Window1"
子元素
XAML
编译器会将子元素加到他的
Child
、
Children
或
Content
属性中,这要根据具体的控件而定。
属性
由于
XAML
中只能够表示文本属性,更准确的说是
String
属性,因此在表示其他类型的属性,如
int
型时,就需要一种类型转换器。对于内置的元素控件系统已经自带了
TypeConverter
。
实例:(这里用到了属性元素语法,即
Parent.PropertyName
)
<
Button
VerticalAlignment
="Center"
HorizontalAlignment
="Center">
<
Button.Background
>
<
LinearGradientBrush
StartPoint
="0,0"
EndPoint
="0,1">
<
LinearGradientBrush.GradientStops
>
<
GradientStop
Offset
="0"
Color
="#800"/>
<
GradientStop
Offset
="0.35"
Color
="Red"/>
</
LinearGradientBrush.GradientStops
>
</
LinearGradientBrush
>
</
Button.Background
>
</
Button
>
等价于:
Button
b = new
Button
();
b.VerticalAlignment = VerticalAlignment
.Center;
b.HorizontalAlignment = HorizontalAlignment
.Center;
LinearGradientBrush
brush = new
LinearGradientBrush
();
brush.StartPoint = new
Point
(0, 0);
brush.EndPoint = new
Point
(0, 1);
GradientStop
gs = new
GradientStop
();
gs.Offset = 0;
gs.Color = Color
.FromRgb(0x80,
0, 0);
brush.GradientStops.Add(gs);
gs = new
GradientStop
();
gs.Offset = 0.35;
gs.Color = Colors
.Red;
brush.GradientStops.Add(gs);
b.Background = brush;
XAML
还支持附加属性。例如:
<
Button
my
:
Foo.Bar
="Blue"
Name
="btn"/>
然后在
Foo
类中自定义了一个附加属性:
public void SetBar(DependencyObject
target, Brush b){………….}
最后等价于:
Foo.SetBar(btn, Brushes.Blue);
扩展标记
(Markup extensions)
扩展标记类派生自
System.Windows.Markup.MarkupExtention
,他的使用,使属性的值更加灵活,在运行时决定其值。
public
abstract
class
MarkupExtension
{
protected
MarkupExtension() { }
public
abstract
object
ProvideValue(IServiceProvider
serviceProvider);
}
XAML
通过两种方式将数据传递给扩展标记:
第一种是构造函数。
<
Style
TargetType
="{
x
:
Type
Button
}"></
Style
>
编译时,
TypeExtension
te = new
TypeExtension
("Button"
);
第二种是设置属性,通过
PropertyName=Value
的方式。
<
TextBlock
Text
="{
Binding
Path
=p,
Mode
=OneTime,
Source
={
StaticResource
sn
}}"/>
编译后,会生产如下的代码:
Binding
bi = new
Binding
();
bi.Path = new
PropertyPath
("p"
);
bi.Mode = BindingMode
.OneTime;
bi.Source = FindResource("sn"
);
WPF
提供了许多内置的扩展标记,其中以
x:
为前缀的位于
XAML
的
XML
命名空间中,其他的位于
WPF
的命名空间中。
类型
|
说明
|
x:NullExtension
|
用来表示空值,在编译时进行求值。
<
Button
Background
="{
x
:
Null
}"/>
表示将颜色属性设置为
null
|
x:TypeExtension
|
获得对象的类型,在编译时进行求值。
<
Style
TargetType
="{
x
:
Type
Button
}"></
Style
>
|
x:ArrayExtension
|
创建一个数组。这个并不是很常使用,由于一个组可以包含多个选项,因此该标记可以有子元素。基于这个原因,他是单独作为一个标记。
<
x
:
ArrayExtension
Type
="{
x
:
Type
Brush
}"
x
:
Key
="brushes"></
x
:
ArrayExtension
>
|
x:StaticExtension
|
获得静态属性的值。将目标属性设置成指定静态属性或字段的值,参数形式通常为:
Class.Member
<
TextBlock
Background
="{
x
:
Static
Class
.Member}"
/
>
|
StaticResourceExtension
|
执行一次资源搜索。等价于使用了
FindResource
方法,通过名称返回指定资源的值。
<
TextBlock
Background
="{
StaticResource
key
}"
Name
="myText"/>
|
DynamicResourceExtension
|
创建资源绑定。他将属性值与指定的资源关联起来,会跟着资源的改变而改变。
|
ComponentResourceKey
|
为跨组件系统资源的引用创建一个资源关键字。
|
Binding
|
创建一个数据绑定
|
RelativeSource
|
创建一个
RelativeSource
用于数据绑定。
|
TemplateBinding
|
用于连接控件模板中的属性和模板化控件中的属性。
|
- 大小: 167.7 KB
分享到:
相关推荐
### WPF学习笔记——主流桌面应用开发技术 #### 一、WPF简介 **Windows Presentation Foundation (WPF)** 是微软推出的下一代图形用户界面系统,它主要用于构建具备卓越视觉体验的Windows客户端应用程序。WPF不仅...
本文将基于“dotnet 读 WPF 源代码笔记 XAML 创建对象的方法”这一主题,深入探讨如何通过XAML语言来创建和管理WPF应用中的对象。 XAML(Extensible Application Markup Language)是微软为构建WPF、Silverlight和...
**中文版WPF学习笔记** Windows Presentation Foundation(WPF)是微软.NET Framework的一部分,它为开发者提供了构建桌面应用程序的强大工具和框架。WPF是Windows Vista操作系统引入的一个关键特性,极大地扩展了...
### WPF学习笔记 #### Application概述 在WPF框架中,`Application`类扮演着核心的角色,它负责管理应用程序的生命周期、初始化与关闭等全局行为。`Application`类的使用非常关键,它确保了程序能够按照预期的方式...
### WPF学习笔记知识点概述 #### 一、Application **Application** 在 WPF 中扮演着极其重要的角色,它是应用程序的入口点,负责管理程序的生命周期。与 WinForms 的设计不同,WPF 中的 **Application** 类默认由...
这只是WPF学习笔记的冰山一角,WPF还包括但不限于数据绑定、依赖属性、控件模板、样式、布局管理、资源字典、MVVM模式、命令和路由事件等多个重要知识点。理解并掌握这些知识点,将有助于你构建功能强大、美观的桌面...
综上所述,"wpf经典代码集合 wpf经典学习笔记 wpf从菜鸟到精通" 提供了一套完整的WPF学习资源,无论你是刚接触WPF的新手,还是希望深化技能的开发者,都可以从中受益。通过深入学习这些内容,你将能够熟练运用WPF...
**WPF学习笔记.docx**文档可能深入探讨了WPF的具体技术细节,如动画、效果、数据可视化、控件扩展等,并包含实践案例和常见问题解答。 总的来说,"WPF Silverlight最新学习笔记"这套资料全面覆盖了WPF的基础知识和...
- **静态资源**:当声明为静态资源时,WPF会在解析XAML时一次性创建资源,然后在整个应用生命周期中重用。这提高了性能,但无法在运行时动态更改。 - **动态资源**:与静态资源不同,动态资源会在每次请求时进行...
本文从多个方面介绍了WPF的基础知识和技术要点,包括`Application`的初始化与启动、`Dispatcher`的工作原理、导航与路由事件的应用、XAML语言的特点、依赖属性的实现方式以及资源管理和数据绑定的技术细节。...
【WPF Binding 学习笔记】 WPF (Windows Presentation Foundation) 的数据绑定是其核心特性之一,它使得UI层和业务逻辑层之间的数据交互变得简单而直观。在WPF中,数据绑定允许UI控件(目标)动态地显示或响应数据...
总的来说,这份笔记资料提供了对WPF核心组件——NamedObject类的深入分析,并结合OpenXML技术,为我们提供了一条提升开发和调试效率的途径。通过学习这些内容,开发者可以增强对WPF框架的理解,从而创建出更加优秀和...
第二本书《wpf深入浅出 wpf学习笔记》可能是作者个人的学习心得和总结,通常这样的书籍或笔记会包含作者在实践过程中遇到的问题及解决方案,对初学者而言尤其有价值。它可能涵盖了实际项目开发中的常见问题、技巧和...
在标题提到的“**wpf 学习资料(2)**”,这表明这是一个关于WPF学习的系列资源的第二部分,可能包含了进阶的学习内容或者更深入的实践项目。 描述中提到,“**自己在学习WPF时看过的所有资源,希望对大家有所帮助**...
作为开发案列优质学习资料,这篇笔记可能包含了作者在阅读WPF源代码时发现的技巧、最佳实践,以及对BooleanBoxes类的深入分析。它可能是通过实际项目或实验来展示如何在特定场景下使用这些知识的。例如,笔记可能...