程序猿 WPF面试题

1、什么是WPF?
WPF英文全称是Windows Presentation Foundation,中文为Windows表现层基础。是微软最初在.NET Framework3.5平台推出的一个图形平台。

2、WPF由哪两部分组成?
WPF由引擎和编程框架两部分组成
引擎:WPF引擎为开发人员和设计人员提供了统一的设计文档,开发人员能够像普通的Windows Form应用程序一样进行逻辑编程,设计人员能够通过使用XAML语言描述Windows Form应用程序中各个控件的风格,以实现动画效果。
WPF引擎还为设计人员提供了基于浏览器的体验、基于窗体的应用程序、图形、视频、音频和文档提供了一个单一的运行时库,WPF让传统的Windows Form应用程序能够利用起现有的硬件软件资源,充分的利用Direct功能和硬件的编码解码功能进行窗体和控件的渲染。
框架:WPF框架为媒体、用户界面设计和文档提供的解决方案比开发人员现有的解决方案都要好,WPF框架在设计时考虑了可扩展性和可维护性,开发人员能够在WPF中创建自己的控件,还可以通过对现有的WPF控件进行改造创建新的WPF控件。
WPF框架是用于形状、图像、视频、动画、文档、三维,以及用于放置控件和内容的面板的一系列控件,这些控件和内容的面板的一系列控件是WPF框架的核心。WPF应用程序提供了若干WPF应用程序开发所需要的控件,开发人员同样能够对控件进行拖放操作实现应用程序布局和开发。


3、如何理解WPF体系结构?
WPF使用多层架构,类似于三层结构,最顶层部分为托管代码API,此层用于为开发人员编写WPF应用程序提供较高层次的服务,基于C#托管代码编写。转换.NET代码到DirectX的工作由中间层milcore.dll实现。
中间层milcore是用非托管代码实现,因为它需要与DirectX紧密集成,对性能敏感,就是消耗的资源比较多,对性能影响较大。

4、WPF对MVVM的理解
MVVM 是 Model-View-ViewModel 的缩写,它是一种软件架构风格
Model:数据模型,数据和业务逻辑都在Model层中定义
View:表UI视图,负责数据的展示(用于渲染数据)
ViewModel:视图模型,其实本质上就是View实例。就是与界面(view)对应的Model。因为,数据库结构往往是不能直接跟界面控件一一对应上的,所以,需要再定义一个数据对象专门对应view上的控件。而ViewModel的职责就是把model对象封装成可以显示和接受输入的界面数据对象。
解释:Model和View并无直接关联,而是通过ViewModel来进行联系的,Model和ViewModel之间有着双向数据绑定的联系。因此当Model中的数据改变时会触发View层的刷新,View中由于用户交互操作而改变的数据也会在Model中同步。。
简单的说,ViewModel就是View与Model的连接器,View与Model通过ViewModel实现双向绑定。

5、WPF中Binding的使用
在WPF中Binding可以比作数据的桥梁,桥梁的两端分别是Binding的源(Source)和目标(Target)。一般情况下,Binding源是逻辑层对象,Binding目标是UI层的控件对象;这样,数据就会通过Binding送达UI层,被UI层展现。

6、什么是XML扩展XAML?有何优点?
XAML是eXtensible Application Markup Language的英文缩写,相应于中文称为可扩展应用程序标记语言,它是微软公司为构建应用程序用户界面而创建的一种新的描述性语言。XAML是XML语言的一个衍生物,它的语法与XML语言完全一致,它的功能就是专门用来设计和实现程序的UI。XAML一个很大的优点就是由于WPF支持WEB开发,那么WEB开发和桌面开发的转换是很简单,修改的地方很短,同时UI与逻辑完全分离,所以逻辑代码也几乎不用改动。

7、什么是依赖属性,它和以前的属性有什么不同?为什么在WPF会使用它?
WPF提供了一组服务,服务可用于扩展公共语言运行时 (CLR) 属性的功能,通常统称为 WPF 属性系统。由 WPF 属性系统支持的属性称为依赖项属性。

8、WPF中依赖属性的优点
1)优化了属性的存储,直接减少了不必要的内存使用。
2)有属性变化通知 限制 验证等。
3)可以储存多个值,配合Expression及Animation等,打造出更灵活的使用方法。

9、如何理解WPF中的Style?
样式是组织和重用格式选项的重要工具。不是使用重复发标记填充XAML,以便设置外边距、内边距、颜色以及字体等细节,而是创建一系列封装所有这些细节的样式,然后再需要之处通过属性来应用样式。样式是可应用于元素的属性值集合。使用资源的最常见原因之一就是保存样式。

10、WPF中什么是模板 ?
模板描述了控件的整体外观和外观。对于每个控件,都有一个与之相关的默认模板,该模板给出控件的外观。模板有两类:控件模板、数据模板,它们都派生自FrameworkTemplate抽象类。

11、解释这几个类的作用及关系: Visual, UIElement, FrameworkElement, Control 。
Visual主要作用是为WPF提供2D呈现支持,主要包括输出显示,坐标转换,区域剪切等。
UIElement的主要作用是构建WPF元素和基本呈现特征的基类。例如其中定义很多与输入和焦点有关的特性,例如键盘事件,鼠标,还有一些与WPF事件模型有关的API。
FrameworkElement的主要作用是为定义的WPF元素添加一些功能。例如,布局定义 逻辑树 对象生命周期事件 支持数据绑定和动态资源引用 支持样式和动画。
Control的主要作用是为自定义应用程序控件提供基础。因为它是创建自定义应用程序控件的基类,作用就是可以重写Control类所提供的属性,方法,事件等,为自定义控件添加自定义逻辑。构建WPF应用程序页面的Window类也派生自它。

12、解释一下ResourceDictionary ?
提供包含元素和 WPF 应用程序的其他元素使用的 WPF 资源的一个哈希表/字典实现。有利于项目中资源共享。

13、路由事件的哪三种方式/策略(冒泡 直接 隧道)?
WPF中的路由事件是沿着VisualTree传递的,作用是用来调用应用程序的元素树上的各种监听器上的处理程序。
1)冒泡,这种事件处理方式是从源元素向上级流过去,直到到达根节点即顶层节点,一般为最外层的控件。
2)直接,这种处理方式是在源上处理,主要用在源元素上处理。通常setter和trigger中有所体现,我个人认为VisualState可视状态可能也是直接事件处理,也是依赖属性的状态改变。和Trigger有一定的重复,但是VisualState是通过生硬的动画间接实现依赖属性的改变。
3)隧道,又称作Preview事件,和冒泡事件处理方式相反的。元素树的根位置调用事件处理程序,依次向下直到源元素位置。
隧道事件和冒泡事件一般成对出现。同一事件,执行时首先是隧道事件,然后是冒泡事件。

14、解释Routed Events(路由事件) 与 Commands(命令)?
Event 和 Command 是程序内部通信基础,Routed Events 能够发起多重控件,并且能有序和用户沟通。
Commands是.NET Framework 提供的核心构架,来激活和去除高级别任务。
由此衍生的Animation是events的更进一步。让你能够以友好互动的方式使用Event架构,来使用多重控件。
 

你可能感兴趣的:(C#,面试题,c#)