2024年4月29日发(作者:)
WPF 基础面试题
一 · WPF由哪两部分组成?都是做什么的?
wpf 由两个主要部分 组成:引擎和编程框架。
1 引擎。wpf引擎是基于窗体的应用程序 图形 视频 音频和文档提供了一个单一的运
行时库。重要的是WPF基于矢量的呈现引擎使应用程序可以灵活地利用高DPI监视器,
支持图形的硬件加速。
2 框架。WPF框架为媒体 用户界面设计和文档提供大量的解决方案。wpf的设计考
虑了可扩展性,使开发人员可以完全在WPF引擎的基础上创建自己的控件,也可以通过对
现有WPF控件进行再分类来创建自己的控件。
二 · 什么是WPF?
WPF英文全称是Windows Presentation Foundation,中文为Windows表现层基
础。是微软最初在.NET Framework3.5平台推出的一个图形平台。
三 · Silverlight 和 WPF的异同。
它们的运行方式是不同的。
1 silverlight是基于浏览器插件的,在浏览器中运行。
2 WPF可以编写Web程序或者桌面应用程序,可以直接编译为独立运行的exe文件。
实现功能是不同的。
1 WPF支持直接在XAML中绑定触发来触发动画,而silverlight就只能通过托管代
码或者javascript来进行。
2 WPF直接支持3D效果和3D镜头变换,但是silverlight就不支持。
它们也有相似的地方
1 silverlight 原名WPF/E 就是WPF Everywhere 是WPF的一个子集。因此它们在
很多语法实现上非常类似。
四 ·如何理解WPF体系结构?
WPF使用多层架构,类似于三层结构,最顶层部分为托管代码API,此层用于为开发
人员编写WPF应用程序提供较高层次的服务,基于C#托管代码编写。转换.NET代码到
DirectX的工作由中间层实现。中间层milcore是用非托管代码实现,因为它
需要与DirectX紧密集成,对性能敏感,就是消耗的资源比较多,对性能影响较大。
五 · 在WPF中Binding的作用及实现语法?
典型的Binding具有四个重要组成部分:Binding目标对象(binding target object)
目标对象属性(target property) Binding数据源(binding source) Path(用于指明要
从数据源中取得的值,就是我们通常写的属性名称)。
六·什么是XML扩展XAML?有何优点?
1 XAML是eXtensible Application Markup Language的英文缩写,相应于中文
称为可扩展应用程序标记语言,它是微软公司为构建应用程序用户界面而创建的一种新的
描述性语言。
2 XAML是XML语言的一个衍生物,它的语法与XML语言完全一致,它的功能就是
专门用来设计和实现程序的UI。
3 XAML一个很大的优点就是由于WPF支持WEB开发,那么WEB开发和桌面开发
的转换是很简单,修改的地方很短,同时UI与逻辑完全分离,所以逻辑代码也几乎不用改
动。
七· 解释什么是依赖属性,它和以前的属性有什么不同?为什么在WPF会使用它?
1 Windows Presentation Foundation (WPF) 提供了一组服务,这些服务可用于扩
展公共语言运行时 (CLR) 属性的功能,这些服务通常统称为 WPF 属性系统。由 WPF 属
性系统支持的属性称为依赖项属性。
2 它和以往属性的不同之处有
(1)依赖属性是一种特定类型的属性。这种属性的特殊之处在于,其属性值受到
Windows 运行时中专用属性系统的跟踪和影响。
(2)依赖属性的用途是提供一种系统的方式,用来基于其他输入(在应用运行时其内部
出现的其他属性、事件和状态)计算属性的值。
(3)依赖属性代表或支持编程模型的某种特定功能,用于定义 Windows 运行时应用,
这种模型使用 XAML 编写 UI,使用 C#、Microsoft Visual Basic 或 Visual C++ 组件
扩展 (C++/CX) 编写代码。
一般的属性没有这么复杂。
3 WPF使用它是有不少优点的
(1)优化了属性的存储,直接减少了不必要的内存使用。
(2)有属性变化通知 限制 验证等。
(3)可以储存多个值,配合Expression及Animation等,打造出更灵活的使用方
法。
八 · WPF中什么是样式?
首先明白WPF中样式属于资源中重要的一种。
同时样式也是属性值的集合,能被应用到一个合适的元素中,或者说能将一组属性应
用到多个元素。
WPF中样式可以设置任何依赖属性。
WPF中样式也支持触发器,通过属性的改变,触发一组活动,包括改变某个控件的样
式。
WPF中元素只能使用一个样式。
样式有继承的特性,样式可以继承样式。
九 · WPF中什么是模板 ?
WPF中模板是用于定义或重定义控件结构,或者说对象的外观。
WPF中模板有两类,一个是控件模板(ControlTemplate) 另一个是数据模板
(DataTemplate),它们都派生自FrameworkTemplate抽象类。
总共有三大模板 ControlTemplate,ItemsPanelTemplate,DataTemplate。
1 ControlTemplate 主要用途是更改控件的外观。它有两个重要属性:VisualTree(视
觉树)内容属性和Triggers触发器,对于触发器可以不用过多考虑,触发器可有可无。
VisualTree就是呈现我们所画的控件。Triggers可以对我们的视觉树上的元素进行一些变
化。
2 ItemsPanelTemplate 是个特殊的空间模板,主要用来标明多条目控件如何显示它
所包含的多项数据。也可以说是指定用于项的额布局的面板。多用于多个内容控件的目标。
多为Panel属性或者Panel结尾的属性。
3 DataTemplate 主要用于数据的呈现。也被称为显示绑定数据对象的模板。
十· 绑定(Binding )的基础用法
WPF 里分三种:Binding,PriorityBinding,MultiBinding,这三种Binding的基类都是
BindingBase,而BindingBase又继承于MarkupExtension。
常见的使用Binding方法是:
1 针对于继承于FrameworkElement控件。 SetBinding(DependencyProperty
dp,String path),SetBinding(DependencyProperty dp,BindingBase binding),其中
FrameworkElement中SetBinding只对DependencyProperty有效。
2 另一种是
ding(currentFolder,operty,binding);
ding的原型是
public static BindingExpressionBase SetBinding(DependencyObject
target,DependencyProperty dp,BindingBase binding)
3 清除Binding:
inding(currentFolder,operty);//删除
currentFolder上的operty绑定
llBindings(currentFolder);//删除currentFolder上的所
有绑定。
直接对Dependency Property赋值也可以解除binding,不过只对单向binding有
效。
十一 · 解释这几个类的作用及关系: Visual, UIElement, FrameworkElement,
Control 。
它们四个的关系:从ls命名空间中看,依次的继承关系是:
Visual继承UIElement,UIElement继承FrameworkElement,FrameworkElement
继承Control。
1 Visual主要作用是为WPF提供2D呈现支持,主要包括输出显示,坐标转换,区域
剪切等。
2 UIElement的主要作用是构建WPF元素和基本呈现特征的基类。例如其中定义很
多与输入和焦点有关的特性,例如键盘事件,鼠标,还有一些与WPF事件模型有关的API。
3 FrameworkElement的主要作用是为定义的WPF元素添加一些功能。例如,布局
定义 逻辑树 对象生命周期事件 支持数据绑定和动态资源引用 支持样式和动画。
4 Control的主要作用是为自定义应用程序控件提供基础。因为它是创建自定义应用
程序控件的基类,作用就是可以重写Control类所提供的属性,方法,事件等,为自定义控
件添加自定义逻辑。构建WPF应用程序页面的Window类也派生自它。
十二. 视觉树 VS 逻辑树?讲下自己的理解
1 逻辑树是视觉树的子集,也就是视觉树基本上是逻辑树的一种扩展。
2 WPF通过逻辑树来解决依赖项属性继承和资源的问题,使用视觉树来处理渲染,
事件路由,资源定位等问题。
3 逻辑树可以认为是XAML所见的,而视觉树包含了XAML元素内部的结构。
4 逻辑树的查找可以通过LogicalTreeHelper辅助类,视觉树的查找可以通过
VisualTreeHelper辅助类,其中需要注意的是对ContentElement元素的查找,无法直接
通过VisualTreeHelper进行查找,ContentElement元素并不继承Visual,而
ContentElement元素的使用时需要一个ContentElement载体
FrameworkContentElement。
十三 属性变更通知(INotifyPropertyChanged 和 ObservableCollection
是怎么理解的,都是干嘛用的?
1 INotifyPropertyChanged向客户端发出某一属性值更改的通知。
2 ObservableCollection
据集合的内置实现。表示一个动态数据集合,在添加项、移除项或刷新整个列表时,此集
合将提供通知
十四 a=10,b=15,在不用第三方变量的前提下,把a,b的值互换
a=a+b;
b=a-b;
a=a-b;
还有变态要求,需要代码最短呢。有两个结果:
1) a^=b^(b^=a^b); // 13个字节
2) a=b+(b=a)*0; // 11个字节
十五 .try{}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不
会被执行,什么时候被执行,在return前还是后?
答:会执行,在return前执行。
WPF 基础面试题
一 · WPF由哪两部分组成?都是做什么的?
二 · 什么是WPF?
三 · Silverlight 和 WPF的异同。
四 ·如何理解WPF体系结构?
五 · 在WPF中Binding的作用及实现语法?
六·什么是XML扩展XAML?有何优点?
七· 解释什么是依赖属性,它和以前的属性有什么不同?为什么在WPF会使用它?
八 · WPF中什么是样式?
九 · WPF中什么是模板 ?
十· 绑定(Binding )的基础用法?
十一 · 解释这几个类的作用及关系: Visual, UIElement, FrameworkElement,
Control 。
十二. 视觉树 VS 逻辑树?讲下自己的理解
十三 属性变更通知(INotifyPropertyChanged 和 ObservableCollection
是怎么理解的,都是干嘛用的?
十四 a=10,b=15,在不用第三方变量的前提下,把a,b的值互换
十五.try{}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会
被执行,什么时候被执行,在return前还是后?
发布评论