命令空间:System.Windows。
UIElement提供了很多PresentationCore程序集中比较重要的特性:
- 布局: 布局系统中,比较重要的是Measure和Arrage这两个阶段。 Measure过程让一个成员决定它到底需要多大的尺寸。很多情况下,父元素经常会多次询问子元素所需要的尺寸,然后再决定给它一个比较合适的最终尺寸。这就是WPF中另一个重要思想:Size To Content。这样,WPF中所有的控件,都可以控制自己的显示尺寸,使其大小和控件的内容比较协调。
- 输入、事件: 在WPF中事件模型中最基本的、不同于以往应用程序的变化是“事件路由模型”。操作系统收到从硬件发出的输入信号后,导向相应的进程、线程。当这些关于输入信息的Win32消息被传送到WPF中时,会被转换成WPF最原始的输入信号并发送到Dispatcher“发报机”中。WPF可能会把一个原始的信号转换成多个与之相应的事件。 这里需要说一下,这里事件路由的概念。每个输入发生时,会被转换成两个具体的事件,一个preview event和一个一般事件。一个事件从控件树上发生事件的目标节点,依次传到最上层的根节点的方式,叫作“bubble”。另一种相反的方式被叫作“tunnel”。preview event就是一个正在进行tunnel的事件。这样,可以先让所有元素都有机会对事件进行过滤,或者发生一些特定的行为。然后这个事件又被从目标节点依次bubble回到根节点。 另外,不象Win32中的应用程序只有一个"TranslateAccelerator"(用来控制如“Ctrl+N”这样的组合键),因为WPF系统是“组合”而成的,所以其中的每一个元素都可以通过bubble event和tunnel event来定制自己的"TranslateAccelerator"。 UIElement实现了IInputElement接口,这个接口中定义了很多我们所熟悉的事件,如KeyDown、MouseMove等。:)
- 命令绑定: UIElement中还引入了Command Binding的概念。Command可以理解为一个较高级的事件。:)InputGesture 和ICommand都被设计为有着良好的扩展性,在使用的时候,我们可以通过命令绑定而把它们绑定在一起。
- 动画: UIElement作为比较底层的API类,实现了接口IAnimatable,为上层提供了基本的动画API。上层类可以在这些基本操作上扩展更加易用、强大的功能。
FrameworkElement(?)
命令空间:System.Windows。 - FrameworkElement在UIElement提供的布局基础上,增加了layout "slot"的概念。可以让布局人员更简单的使用属性的语法来定义布局。 2. FrameworkElement还提供了更易用的API,如可以使用BeginStoryboard方法,而不是UIElement中的BeginAnimation。 3. Binding:类似WinForm和ASP.NET,WPF全面支持属性绑定、转换、列表绑定等。其中比较新的概念是数据模板,它能让你以XML的方式来指定数据如何被展示。它不再是由你去写一个直接绑定数据的界面,而是让数据自己来决定如果显示。 4. 样式:可以理解为:WPF支持为一些通用的属性进行独立的定义,然后再绑定到需要的元素上。可以为某一元素指定使用这些样式,也可以直接把样式绑定到某一类元素上。
Control(模板)
命令空间:System.Windows.Controls。 - Control中最重要的功能就是模板的使用。说白了,其实模板就是使用属性声明的方式来为Control的属性设置孩子元素集合。 2. 还定义了一些如前景色、背景色、内容对齐方式等的简单属性。 3. Control运行交互模型和数据模型。交互模型中定义命令并绑定到动作上,数据模型提供许多属性来定义交互模型、显示。使用数据模板(属性)、交互模板(命令、事件)、显示模板(模板)可以让开发人员完全定制Control的外观和行为。 4. 另外,控件数据模型中一个新的概念叫:Content Model。例如Button的Content不再只是简单的字符串类型,而是Object类型,可以是一个特定的显示对象。