(更新时间)2021年11⽉18⽇WPF2021秋招WPF⾼频⾯试题
⼊门篇[2]
⽂章⽬录
1. 谈谈什么是WPF?
WPF 是微软推出的表现层UI开发框架,全称 Windows Presentation Foundation。 相对Winform来讲,它使⽤⼀种全新的桌⾯应⽤程序 UI 的开发⽅式。 除了像Winform那样在“Windows 窗体”上删除控件之外,WPF 还为应⽤程序开发提供了额外的功能改善,包括丰富的⽤户界⾯、动画等等。
简⽽⾔之,可以使⽤ WPF 完成以下操作:
绘制普通控件和图形。
轻松加载/播放⾳频和视频⽂件。
提供平滑的图形效果,例如阴影和颜⾊渐变。
使⽤可跨相同控件使⽤的共享样式,以提供相同的主题、⽪肤和设计。
变换对象,包括形状、控件和视频。
可以创建和动画 3D 图形。
可以轻松绘制可缩放的⽮量图形⽽不会出现锯齿状锯齿。
2. 说说WPF中的XAML是什么?为什么需要它?它只存在于WPF吗?
XAML 是⽤来组织 WPF UI 的 XML ⽂件。 以XML标签⽅式表⽰UI的重点是编写⼀次可以在其他地⽅运⾏它,⽐如Blend软件也能正常加载与编辑。
XAML 不仅仅适⽤于 WPF。 XAML 是⼀种基于 XML 的语⾔,它有多种变体。
WPF初级篇[13]
3.简单描述下WPF的样式
WPF 样式的⼯作⽅式与 CSS 样式类似
在 CSS 中,我们为控件定义样式,并在应⽤程序中任何需要的地⽅重⽤相同的样式
与 WPF 中的样式允许定义属性并可在应⽤程序中重⽤的⽅式相同。
4.WPF 中的资源是什么?
资源提供了⼀种简单的⽅法来重⽤已定义的对象和值。 WPF 中的资源允许⼀次设置多个控件的属性。 例如,可以使⽤单个资源在 WPF 应⽤程序中的多个元素上设置背景属性。
定义资源的最佳⽅式是在 Window 或 Page 元素级别。 为元素定义的任何资源也适⽤于该元素的⼦元素。
5.WPF中的Visibility.Collapsed和Visibility.Hidden有什么区别?
Visibility.Hidden 隐藏控件,但保留它在布局中占⽤的空间。 所以它呈现空⽩⽽不是控件。
Visibilty.Collapsed 不呈现控件并且不保留空格。 控件占⽤的空间是“折叠的”
6.什么是静态资源和动态资源?
Static Resource - StaticResource 的值在加载时确定
Dynamic Resource - 在运⾏时更改属性值的情况下使⽤。
7.WPF中控件的分类?
WPF控件可以分为四类:
Control: - ⼤部分时间使⽤的基本控件。 例如⽂本框、按钮等。像按钮、⽂本框、标签等独⽴控件的控件被称为内容控件。 还有其他控件可以容纳其他控件,例如 itemscontrols。 Itemscontrol 可以有多个⽂本框控件、标签控件等。
Shape: - 帮助我们创建简单的图形控件,如椭圆、线条、矩形等。
Panel: - 有助于对齐和定位控件。 例如,grid 帮助我们以表格⽅式对齐,stack panel 有助于⽔平和垂直对齐。
Content presenter: - ⽤于将任何 XAML 内容放⼊其中。
8.WPF中的命令设计模式是什么初中生考不上高中咋办
命令设计模式是⾯向对象设计模式中最强⼤的设计模式之⼀。 此模式允许将操作请求与实际执⾏操作的对象分离,换句话说,命令模式将操作表⽰为对象。 Command 对象不包含要执⾏的功能。 这消除了命令定义和功能之间的直接联系,并促进了松散耦合。 当需要根据⽤户请求实现操作时,命令模式是处理对象的最佳模式。
命令设计模式的成员包括: Client、调⽤者、命令、具体执⾏内容、接收者
9.XML和XAML有什么区别?汉丁顿 惠特莉
以下是 XML 和 XAML 之间的区别:
1. 所有 XAML ⽂档都可以称之为 XML ⽂档。 然⽽,反过来说却是不能的。
2. XAML 是⼀种声明性应⽤程序语⾔,⽽ XML 是⼀种标记语⾔。
3. XML 主要⽤于 Web 应⽤程序。 相⽐之下,XAML ⽤于设计 Windows 和其他 Web 应⽤程序的控件。
4. XAML 侧重于对象属性、定义以及它们之间的关系。
5. XML 是 W3C 产⽣的⼀种标记语⾔,⽤于描述其他标记语⾔。
10.WPF中的xmlns 和xmlns:x有什么区别?
这两个命名空间都有助于定义/解析 XAML UI 元素。
第⼀个命名空间是默认命名空间,有助于解析整体 WPF 元素。
第⼆个命名空间以“x:”为前缀,有助于解析 XAML 语⾔定义。
例如,对于下⾯的 XAML ⽚段,我们有两个东西,⼀个是“StackPanel”,另⼀个是“x:name”。 “StackPanel”由默认命名空间解析,“x:name”由“xmlns:x”命名空间解析。
<StackPanel x:Name="myStack" />
11.相对于Winform,WPF有什么优势?
1 - 绑定(更简约的编码)
2 - 灵活的外观和感受(资源和样式)
银行预留手机号码怎么改3 - 声明式编程 (XAML)在天晴了的时候仿写
4 - 表现层混合动画(动画开发简单)
5 - 快速加载(硬件加速)
6- 图形硬件⽆关(分辨率⽆关)
12.什么是WPF的值转换器?
值转换器充当⽬标和源之间的桥梁,当⽬标与⼀个源绑定数据类型不⼀致时,需要值转换器来做中转。
例如有⼀个⽂本框和⼀个按钮控件, 当⽂本框的⽂本被填充或为空时,希望启⽤或禁⽤按钮控件。
在这种情况下,需要将字符串数据转换为布尔值。这可以使⽤值转换器实现。
要实现值转换器,需要继承System.Windows.Data命名空间中的IValueConverter,并实现两个⽅法Convert和ConvertBack。
13.XAML ⽂件中的 xmlns 是什么?
“xmlns”代表 XML 命名空间。 它帮助我们避免 XML ⽂档中的名称冲突和混淆。
14.我们什么时候应该使⽤“x:name”和“name”?
“x:name”和“name”没有区别,“name”是“x:name”的简写。 但是当对象⽆法使⽤“name”属性时,就需要使⽤“x:name”属性。
WPF中级篇[17]
15.描述下WPF对象完整的层次结构?
Object: 由于 WPF 是使⽤ .NET 创建的,因此 WPF UI 类继承的第⼀个类是 .NET 对象类。
Dispatcher: ⼀个抽象基类,⽤于绑定到⼀个线程上的类。与Windows窗体类似,WPF也要求仅从创建线程中调⽤⽅法和属性。WPF应⽤程序使⽤为⼈熟知的单线程亲和(Single-Thread Affinity,STA)模型,这意味着整个⽤户界⾯由单个线程拥有。从另⼀个线程与⽤户界⾯进⾏交互是不安全的。通过继承⾃DispathcerObject类,⽤户界⾯中的每个元素都可以检查代码是否在正确的线程上运⾏,并能通过访问调度程序为⽤户界⾯线程封送代码。
Dependency: 所有⽀持依赖属性的类的基类。依赖属性可以依赖其他输⼊,例如主题和⽤户喜好。依赖属性与数据绑定,动画,资源和样式⼀起使⽤。
Visual: 所有可见元素的基类都是Visual。这个类包含点击测试和转换等特性
UI Element: 所有需要基本显⽰功能的WPF元素的抽象基类是UIElement。这个类提供了⿏标移动,拖放,按键的通道和起泡事件;提供了可以由派⽣类重写的虚显⽰⽅法;以及布局⽅法。WPF不再使⽤Window句柄,这个类就可以⽤Window句柄
FrameworkElement: FrameworkElement派⽣⾃基类UIElement,实现了由基类定义的⽅法的默认代
最后,所有 WPF 控件 textbox 、 button 、 grids 以及可以从 WPF ⼯具箱中想到的任何内容都继承⾃FrameworkElement类。
16.描述下WPF的总体架构?
User32: 决定了哪个控件显⽰在屏幕上的哪个位置。
欧阳夏丹透视装
DirectX: WPF内部使⽤DirectX 与驱动程序对话并渲染呈现内容。
Milcore: 媒体集成库。 此部分是⾮托管代码,因为它充当 WPF 托管和 DirectX/User32 ⾮托管 API 之间的桥梁。
Presentation core : WPF 公开的低级 API,提供 2D 、 3D 、⼏何等功能。
**Presentation framework: **此部分具有⾼级功能,如应⽤程序控件、布局。 帮助您构建应⽤程序的内容等。
17.Style 和 ControlTemplate的主要区别是什么?
样式在控件上设置属性。
ControlTemplate 是⼤多数控件的属性,⽤于指定它们的呈现⽅式。
详细地说,可以使⽤⼀种样式对⼀组属性的设置进⾏分组,以便重新使⽤它来标准化已有控件。 样式可以在控件上显式设置,也可以应⽤于所有特定类型。
控件模板可以通过样式设置或在控件上显式设置以更改其显⽰⽅式。 所有控件都有嵌⼊在 wpf 程序集中的默认模板(和样式)。18.WPF 是建⽴在 Windows 窗体之上的还是完全不同的?
这两个是完全不同的技术。 它们确实为两个⽅向提供了⼀些互操作性层,但除此之外没有任何共同之处。 Windows 窗体或多或少是
Win32/MFC 之上的轻量级包装器,这意味着它在 .NET 中的可扩展性并⾮在所有情况下都那么好。 WPF 是⼀个从头开始实现的新 UI 框架。 在⾃定义现有类型时,WPF 也更加灵活。
WPF 更适合创建“华丽”的 GUI。 只是它需要⽐ WinForms 更新的 框架,并且需要兼容 dx9 或更⾼的 GPU。
WinForms 仍然是⼀项强⼤的技术,通常可以以⽐ WPF 更快的速度开发,但是,最终,这两种技术都可以⽤来实现相同的⽬标。
WinForms 通常⽤于开发业务应⽤程序,⽽ WPF 通常⽤于创建更多基于最终⽤户的软件、应⽤程序等。
19.如何理解MVVM中的 View 和 ViewModel?
View是客户端界⾯、输⼊输出界⾯或⽤户界⾯。 收集了窗⼝、导航页⾯、⽤户控件、资源⽂件、样式和主题、⾃定义⼯具和控件的所有⽤户界⾯元素。
View不知道 ViewModel 和 Model,反之亦然,ViewModel 和 Model 不知道 View ,并且控件是完全分离的。
但是ViewModel知道View的需求。 它们通过数据绑定和依赖属性或多个属性进⾏通信。
ViewModel 是⼀个⾮可视类。 MVVM 设计模式不派⽣⾃任何基于 WPF 的类。 ViewModel 不直接知道View。 View 和 ViewModel 之间的通信是通过⼀些属性和绑定进⾏的。
⼀个 View-Model 可以连接到多个模型,像⼀对多关系⼀样⼯作,并为 View 封装业务逻辑和数据。
20.如何在WPF应⽤程序中全局捕获异常?
使⽤“Application.DispatcherUnhandledException”事件。
请注意,仍有⼀些异常会导致应⽤程序崩溃,例如在尝试保存到数据库时出现堆栈溢出、内存耗尽或⽹络连接丢失等情况。
21.WPF中的x:Name和Name属性之间有什么区别?
它们不是同⼀件事。
x:Name是⼀个 xaml 概念,主要⽤于引⽤元素。当您为元素提供 x:Name xaml 属性时,“指定的 x:Name 将成为处理 xaml 时在底层代码中创建的字段的名称,并且该字段保存对对象的引⽤。”[MSDN],所以,它是⼀个设计时⽣成的字段,默认情况下具有内部访问权限。
Name 是 FrameworkElement对象的现有字符串类型的属性, 以其他WPF元素中都包含此属性.
因此,这也意味着 x:Name 可以⽤于更⼴泛的对象。 这是⼀种使 xaml 中的任何内容都能够被给定名称引⽤的技术。
22.ListBox 与 ListView - 如何选择以及何时进⾏数据绑定?
ListView 是⼀个专门的 ListBox(继承⾃ ListBox)。 ListView允许指定不同的视图⽽不是直接列表。 可以滚动⾃⼰的视图,也可以使⽤GridView(想想类似资源管理器的“详细信息视图”)。 它基本上是多列列表框,跟 windows 窗体列表视图的表现类似。
如果不需要 ListView 的附加功能,只是显⽰项⽬列表(即使模板很复杂),使⽤ ListBox就⾜够了。
刘镇伟23.说出使⽤WPF⽽不是Windows窗体的⼀些优点
使⽤ WPF 代替 Windows 窗体的优点:
XAML 使更容易的创建和编辑 GUI,并允许在设计模式 (XAML) 和后台代码(C#、VB.NET 等)之间拆分⼯作。
数据绑定,使开发项⽬可以更清晰地分离数据和布局。
使⽤硬件加速来绘制 GUI,以获得更好的性能。
24.WPF中的命令设计模式和ICommand是什么?
ICommand 是 MVVM 的核⼼组件。 ICommand 在 MVVM 中经常使⽤,它提供了View和ViewModel(⽤户界⾯和业务逻辑)之间的分离逻辑。 XAML 提供了⼀种通过 ICommand 更好地绑定 GUI 事件的⽅法。 ICommand 要求⽤户定义两个⽅法,bool CanExecute 和void Execute。 CanExecute ⽅法只是告诉⽤户,我可以执⾏这个 Action 吗? 这对于控制 GUI 元素的可操作性⾮常有⽤。
ICommand ⾮常简单,但是也可以完在更加有趣和复杂的功能。 ICommand 将⽤户界⾯集成到业务逻辑中,或者在视图与视图模型之间进⾏直接通信。 它还为视图提供了更新模型/视图模型的机制。
25.什么是可冻结对象?
Freezable 是⼀种特殊类型的对象,具有两种状态:unfrozen 和 frozen。 解冻时,Freezable 的⾏为与任何其他对象⼀样。 冻结后,⽆法再修改 Freezable。
Freezable 提供了⼀个 changed 事件来通知观察者对对象的任何修改。 冻结 Freezable 可以提⾼其性能,因为它不再需要在更改通知上花费资源。 冻结的 Freezable 也可以跨线程共享,⽽未冻结的 Freezable 则不能。
尽管 Freezable 类有许多应⽤程序,但 WPF中的⼤多数 Freezable 对象都与图形⼦系统相关。
26.什么是MVVM?
MVVM(Model View ViewModel)是⼀个在WPF中制作应⽤的框架。 MVVM 与 MVC 框架相同。 它是⼀个三层架构,我们可以使⽤MVVM 进⾏松耦合开发。
MVVM 由 John Gossman 于 2005 年推出,当时专门⽤于 WPF,作为 Martin Fowler 更⼴泛的演⽰模型模式的具体应⽤。 基于MVVM 模式的应⽤程序的实现使⽤各种平台功能,这些功能以某种形式可⽤于 WPF、Xarmarin 移动端、Web和 Windows。 许多商业应⽤程序,包括 Microsoft Expression 产品,都是在 MVVM 之后构建的。
MVVM 的优势