WPF的基础

WPF:
WPF即Windows Presentation Foundation,翻译为中文“Windows呈现基础”,是微软推出的基于Windows Vista的用户界面框架,属于.NET Framework 3.0的一部分。它提供了统一的编程模型、语言和框架,真正做到了分离界面设计人员与开发人员的工作;同时它提供了全新的多媒体交互用户图形界面。
WPF特点
1、统一的编程模型
WPF提供的编程模型统一普通控件、语音、视频、文档3D等技术,这些媒体类型能够统一协调工作,降低了我们的学习成本。
2、与分辨率无关
WPF是基于矢量绘图的,因此它产生的图形界面能够支持各种分辨率的显示设备,而不会像WinForm等在高分辨率的现实设备上产生锯齿。
3、硬件加速技术
WPF是基于Direct3D创建。在WPF应用程序中无论是2D还是3D的图形或者文字内容都会被转换为3D三角形、材质和其他Direct3D对象,并由硬件负责渲染,因此它能够更好的利用系统的图像处理单元GPU,从硬件加速中获得好处。
4、声明式编程
WPF引入一种新的XAML语言(Extensible Application Markup Language)来开发界面。使用XAML语言将界面开发以及后台逻辑开发很好的分开,降低了前后台开发的耦合度,使用户界面设计师与程序开发者能更好的合作,降低维护和更新的成本。
5、易于部署
WPF除了可以使用传统的Windows Installer以及ClickOnce方式来发布我们的桌面应用程序之外,还可以将我们的应用程序稍加改动发布为基于浏览器的应用程序。
基本概念
1、XAML是派生自XML的可扩展应用程序标记语言(Extensible Application Markup Language)。微软创造。应用在WPF,WF,Silverlight,Metro App等开发技术中。
2、在WPF中,XAML用来开发用户界面。继承了XML的Tag,Attribute等语法。另有一些语法上的创新。
3、在WPF中,XAML运行在CLR之上,但它不编译为IL,而是编译为BAML代码,在运行时会被解析成CLR类型(Types)。
4、WPF中XAML是大小写敏感的。
基本语法
1、Tag语法=对象元素(Object Elements)
每个标签即是一个对象元素,将被解析为一个WPF Framework(主要PresentationFramework.dll)中的类的实例。下面的代码就是一个对象元素,运行时会被解析为一个Button对象实例。


或写成

2、Attribute赋值语法
2.1 普通字符串赋值。下面代码给Button的Property和Event赋值。字符串将被通过包装好的TypeConverter来转换成对象。TypeConverter使用C#的Attribute技术来实现的。

2.2 标记扩展赋值。用花括号这种方式赋值就叫标记扩展赋值。常用的地方是在用到绑定和资源的时候。

2.3 属性元素赋值。有的时候简单字符串赋值不了的,就用属性元素赋值。


2.4 内容赋值。控件要有Content这个属性,也就是要继承自ContentControl这个类,才能这么赋值。夹在标签中间。


2.5 集合赋值。下面例子是给StackPanel.Children这个属性赋值一个集合,被省略了。这个属性的类型是UIElementCollection。在这个例子,我们也看到WPF支持一些省略的写法,在实际开发中运用,可以使XAML代码更简洁。


    
    

3、命名空间。
一般用在Root元素上(Application,Window,UserControl,Page,ResourceDictionary等)。如下例子,xmlns为引入命名空间的attribute。第一行xmlns是没有指定别名的,是默认命名空间,它指定的命名空间包含了微软提供所有的XAML控件的程序集。第二行xmlns别名是x,也是微软提供的命名空间,这里面主要包含了一些关于解析Xaml语言的程序集。第三行xmlns是自己引入的,开发人员自己写的控件等,可以通过命名空间这种方式引用到XAML文档来使用。

    

4、附加属性,附加事件。
下面例子,Panel.ZIndex就是附加属性,而附加事件是界面上用不了的。具体在写属性和事件时候讨论。


  
  

5、树。
XAML文档是树状结构的。在WPF中,有逻辑树(Logical Tree)和可视树(Visual Tree)的概念,在运行时会维护这两棵树。逻辑树是以我们看到的控件为节点的,这些控件一般继承与FrameworkElement or FrameworkContentElement,而可视树能看到控件内部的元素,这些元素一般继承自Visual类。WPF提供了两个辅助类(LogicalTreeHelper and VisualTreeHelper)来操作这两棵树。

你可能感兴趣的:(wpf)