70 个最热门的 WPF 面试问题和答案(2024 年)
以下是 WPF 面试问题和答案,可帮助应届毕业生和有经验的应聘者获得理想的工作。
1.什么是WPF?
WPF 是 Microsoft Windows 最新的演示 API。它是 2D 和 3D 图形引擎。其功能包括:-
- 所有常见的用户控件。例如,复选框、按钮、滑块等。
- 支持流式和固定格式文档
- Flash 的所有功能和 HTML
- 数据绑定
- 多媒体
- 动画
2.WPF支持哪些类型的文档?
Windows Presentation Foundation (WPF) 支持的两种文档类型是流格式和固定格式文档。流格式文档会改变内容以适应屏幕大小,而固定格式文档则无论屏幕大小如何都会显示内容。
3. 命名使用 3D 所需的命名空间。
在 3D 中工作所需的命名空间是 System.Windows.Media.Medi3D。
4.WPF已经取代了DirectX,这样说对吗?
不,WPF 永远无法取代 DirectX。WPF 不能用于创建具有惊人图形的游戏。WPF 旨在取代 Windows Form,而不是 DirectX。
5.什么是依赖属性?
属于特定类但可用于其他类的属性称为依赖属性。
6.如何让StatusBar尺寸按比例增加?
通过用网格覆盖 StatusBar 的 ItemsPanel 属性。可以适当配置网格的列以获得所需的结果。
7. WPF 中的 Freezable 对象是什么?
状态被锁定,无法改变的对象称为可冻结对象。此类对象性能更佳。如果需要在线程之间共享它们,也更安全。
8.为什么WPF比Adobe Flash更受欢迎?
WPF 是一项较新的技术,因此具有最新的开发工具。它支持更广泛的编程语言,并且具有强大的控件重用功能。
9. Silverlight 与 WPF 浏览器应用程序有何不同?
其中一个主要区别是,在客户端计算机上运行 WPF 浏览器应用程序需要 .NET 框架。但 Silverlight 仅使用插件运行。另一个区别是,用 WPF 制作的应用程序依赖于 OS 因为.NET Framework 只能在 Windows 上运行。另一方面,Silverlight 插件也可以安装在非 Windows 操作系统上。
10. 说出 DependencyObject 中存在的方法的名称。
它有三个对象,分别是:
- 设定值
- 明确价值
- 取得价值
11. 撰写有关 PRISM 的文章。
PRISM 是一个用于为 WPF、Silverlight 或 Windows Phone 创建复杂应用程序的框架。PRISM 利用 MVVM、IC、命令模式、DI 和关注点分离来实现松散耦合。
12. 可以在 WPF 应用程序中使用 Windows 窗体吗?
是的,Windows 窗体可以在 WPF 中使用。Windows 窗体可以作为 WPF 弹出窗口出现。利用预安装的 WindowsFormsHost 控件的功能,可以将此 Window 窗体的控件放置在 WPF 页面中的 WPF 控件旁边。
13.简单描述一下CustomControl。
CustomControl 扩展了现有控件的功能。它由 Themes/Generic.xaml 中的默认样式和代码文件组成。它是制作控件库的最佳方式,也可以进行样式化或模板化。
14. 说出 WPF 中使用的常见程序集?
- 演示基础
- Windows基础版
- 表现核心
15. 在 WPF 中定义路径动画
路径动画是一种动画类型,其中动画对象遵循路径几何设置的路径。
16. 可以不使用 XAML 来制作 WPF 应用程序吗?
是的,可以在没有 XAML 的情况下创建 WPF 应用程序,因为在 WPF 中使用 XAML 是一个选择问题。
17.WPF中有哪些类型的窗口?
WPF 有三种类型的窗口:WPF has three types of windows:
- 普通窗口
- 页面窗口
- 浏览窗口
18.如何对 ListBox 中的元素进行排序?
可以使用 ItemsCollection 对象的属性进行排序。ItemsCollection 包含一个属性 SortDescriptions,该属性包含 System.ComponentModel.SortDescription 实例。每个 SortDescription 实例都定义元素的排序方式,并指示排序是降序还是升序。
例如,此代码根据 ContentControl 元素的字数属性对其进行排序:
myItemsControl.Items.SortDescriptions.Add(new SortDescription(“WordCount”, ListSortDirection.Descending));
19.MVVM 与 MVC 有何不同?
MVC 代表模型视图控制器,MVVM 代表模型视图视图模型。
在 MVVM 中,使用视图模型代替控制器。此视图模型位于 UI 层之下。它显示视图所需的命令对象和数据。它充当容器对象,视图从中获取其操作和数据。
20. 解释 WPF 中的路由事件。
可以调用元素树中多个侦听器上的处理程序(而不是调用该事件的单个对象)的事件称为路由事件。
21. System.Windows.Media.Visual dll 在 WPF 中如何使用?
每当需要创建自定义用户界面时,都会使用它。它是一个绘图对象,它提供制作对象的指令。这些指令包括绘图的不透明度等。Visual 类还桥接了 WPF 托管类和 MilCore.dll 的功能。
22. WPF 中有哪些不同的布局面板?
它们分别是:
- 堆栈面板
- 网格面板
- 画布面板
- 码头面板
- 包裹面板
23. 说出 WPF 中的重要子系统
主要子系统有:
- Windows.Controls.控件
- Windows 依赖项对象
- Windows 框架元素
- Windows.Media.Visuals
- 摆件
- 线程调度对象
- Windows.UI元素
24. WPF 中的 BAML 是什么意思?
BAML 是二进制应用程序标记语言的缩写。它只是经过标记、解析并转换为二进制形式的 XAML。BAML 是一种压缩声明性语言,其加载和解析速度比 XAML 更快。
25. WPF 中的页面控件和窗口控件有什么区别?
基本区别在于窗口控件控制着 Windows 应用程序,而页面控件控制着托管的浏览器应用程序。此外,窗口控件可以包含页面控件,但反之则不行。
26. WPF 中的附加属性是什么?
附加属性基本上是依赖属性,允许将值附加到任何随机对象。
27.什么是 INotifyPropertyChanged 接口?
如果属性值发生变化,InotifyPropertyChanged 会通知客户端(通常是绑定的客户端)。它有一个名为 PropertyChanged 的事件,每次 Model 对象的属性发生变化时都会引发该事件。
28. MVVM 模型中事件和命令的基本区别是什么?
命令功能更强大,使用起来比事件更有优势。动作与事件源紧密相关,因此事件无法轻易重用。但命令可以高效地在一个地方维护多个动作,然后根据我们的要求重用它们。
29. 强制关闭当前可见的 ToolTip 的方法是什么?
可以通过将工具提示的 IsOpen 属性设置为 false 来关闭它。
30.写出DynamicResource和StaticResource的区别。
最基本的区别是 StaticResource 仅评估一次资源,而 DynamicResource 每次需要资源时都会评估资源。由于这个原因,DyanamicResource 对系统负担较大,但它可以使页面或窗口加载速度更快
31.解释 MVVM 模式。
MVVM 模式将 UI 代码分为 3 个基本部分:
- 模型 - 它代表一组类,其中包含从数据库接收的数据。
- 查看– 它是与数据的视觉表示一致的代码。
- ViewModel – 它是将视图和模型绑定在一起的层。它以易于理解的方式呈现这些数据。它还控制视图如何与应用程序交互。
32. 为什么 WPF 需要布局面板?
布局面板是必需的,这样控件才能适应不同尺寸的屏幕或具有不同字体大小的屏幕。如果我们在固定像素坐标上排列控件,那么当移动到不同的环境时,此模型将失效。因此,布局面板是必需的。
33. 简述一下 UserControl。
UserControl 将现有控件包装到单个可重复使用的组中。它包含一个 XAML 文件和一个代码。UserControl 无法设置样式或模板。
34. 如何判断 Freezable 对象是否被冻结?
对象的“IsFrozen”属性可用于确定可冻结对象是否被冻结。
35.WPF中的度量单位是什么?
所有测量均以与设备无关的像素或逻辑像素为单位。一个像素是 1/96 英寸。这些逻辑像素始终以双精度表示,这使得它们也可以具有小数值。
36. 什么是装饰器?
它们是一种特殊的 FrameworkElement,可为用户提供视觉线索。它们还用于向元素添加句柄并提供有关控件状态的信息。装饰器与 UIElement 绑定,并呈现在装饰元素上方的表面上。此表面称为 AdornerLayer。装饰器大多相对于有界元素放置。
37.解释序列化?
它是将对象的状态转换为字节流的过程。
38.WPF 支持 MDI 吗?
WPF 不支持 MDI。可以使用 UserControl 提供与 MDI 相同的功能。
39. 什么是XBAP?
XBAP 是 XAML 浏览器应用程序的缩写形式。它允许 WPF 应用程序在 Web 浏览器中运行。在客户端计算机上安装 .NET 框架是运行 WPF 应用程序的先决条件。但托管应用程序并未完全进入客户端计算机,而是在沙盒环境中执行。使用 WPF,还可以创建此类应用程序,它们直接在浏览器中运行。这些应用程序称为 XBAP。
40. WPF 和 Silverlight 有哪些相似之处?
Silverlight 和 WPF 相似之处在于它们都使用 XAML 并共享相同的代码、语法和库。
41. 如何使鼠标悬停在禁用元素上时出现工具提示?
为此,可以使用 ShowOnDisabled 属性。它属于 ToolTipService 类。
42.如何让ListBox平滑滚动?
ListBox 默认配置为逐项滚动。这取决于每个元素的高度和滚动操作,因此给人一种粗糙的感觉。更好的方法是配置滚动操作,使其将项目移动几个像素,而不管其高度如何。这可以通过将 ScrollViewer.CanContentScroll 属性设置为“false”来实现。然而,这将使 ListBox 失去虚拟化属性。
43. WPF 应用程序从哪里开始执行?
在 Visual Studio 中创建的 WPF 应用程序运行时没有 Main 方法。这是因为应用程序从 XAML 编译时是特殊情况。这意味着,Visual Studio 将 ApplicationDefinition 的 Build Action 附加到 XAML 文件。这会导致自动生成 Main 方法。
44. 可以使用 WPF 创建 Windows 服务吗?
不可以,无法使用 WPF 创建 Windows 服务。WPF 是一种演示语言。Windows 服务需要特定权限才能执行某些 GUI 相关功能。因此,如果它没有获得所需的权限,就会出现错误。
45.WPF 中有哪些不同类型的路由事件?
WPF 中有三种类型的路由事件。它们是:
- 直接的 - 此事件只能由发起它的元素引发。
- 隧道施工 – 此事件首先由其起源的元素引发,然后由可视化树中每个连续的容器引发。
- 冒泡—— 此事件首先由可视化树中最上层的容器引发,然后由位于最上层容器下方的每个连续容器引发,直到到达其起源的元素。
46. 为什么将项目包装在 ComboBoxItem 中更好?
它具有一些重要属性,如 IsSelected 和 IsHighlighted,以及一些必要的事件,如 Selected 和 Unselected。ComboBoxItem 是一个内容控件,因此对于向 ComboBox 添加简单字符串非常有用。
47. 如何获取 ItemsControl 中项目的自动化 ID?
最好的方法是设置其 Name 属性,因为它默认用于自动化目的。但如果您需要为元素提供除其名称之外的 ID,则可以根据需要设置 AutomationProperties.AutomationID 属性。
48. 如何在 WPF 应用程序中检索命令行参数?
最适合的方法是在应用程序的任何随机点调用 System.Environment.GetCommandLineArgs。
49. 说出包含任意内容的类的名称。
内容控制
HeaderedContent 控件
物品控制
HeaderedItems 控件
50. 哪个命名空间有“Popup”和“Thumb”控件?
命名空间 system.windows.controls.primitives 有“Popup”和“Thumb”控件。
51. 解释一下什么是 XAML? XML 和 XAML?
XAML 代表可扩展应用程序标记语言。它是用于实例化 .NET 对象的语言。它是由 Microsoft 为下一代应用程序编写用户界面。
XML 旨在存储数据或处理存储的数据,而 XAML 是用于 .NET 编程的 XML 的扩展版本。
52. 说出使用XAML的优点?
使用 XAML 的优点是
- XAML 代码清晰易读,而且很简短
- 设计器代码与逻辑的分离
- 用于图形设计的表达式混合等工具需要 XAML 作为源
- 它明确区分了设计师和开发人员的角色
53. 如何编写代码以在 XAML 中显示“Hello World”?
显示“Hello World”。
<page xmlns= '' ''> <TextBlock> Hello, World! </TextBlock> </Page>
54. 在 XAML 中如何指定图形组件?
在 XAML 中,图形组件通过带有属性的开放或封闭标签来指定。
例如,
- 带内容的标签
点击
- 没有内容的标签
< 按钮/>
55. XAML 中的属性语法是什么?
在 XAML 中,属性语法通过在元素上声明属性来设置属性的值或为事件命名事件处理程序。属性值应括在两个引号 (“) 中。
例如,
< Button Background = “Black” Foreground “Red” Content = “This is an operating button”/>
56. 解释内容属性 XAML?
XAML 表示一种语言功能,通过该功能,类可以将其属性之一精确地分配为 XAML 属性
57. 解释 XAML 中的标记扩展是什么?
标记扩展是 XAML 中的占位符,用于在运行时解析属性。标记扩展允许您扩展 XAML,并且使用属性语法,您还可以设置可以在 XAML 中设置的任何属性。标记扩展的目的是处理字符串并返回对象。一些标准标记扩展是 xNull、x: 排列,:静态资源和动态资源。
58. XAML 元素的四种常见类型是什么?
四种常见的 XAML 元素是
- 根元素
- 面板元素
- 控制元件
- 几何元素
59. XAML 中的 X: 前缀表示什么?
X:前缀用于映射模板中的XAML命名空间。
60. XAML 语言中使用的各种 X: 前缀有哪些?
- x: Key à 为资源字典中的每个资源设置一个唯一的键
- x:Classà 它为提供代码的类指定 CLR(公共语言运行时)命名空间和类名
- x: 名称 à 它为对象元素处理后在运行时代码中存在的实例指定运行时对象名称
- x: Static à 它启用返回静态值的引用,否则该引用将是 XAML 兼容属性
- x: Type à 根据类型名称构造 Type 引用
61. 如何将属性特性设置为文字字符串而不是标记扩展?
为了避免标记扩展,你必须使用一对空的花括号,例如
内容 = “{} {这不是标记扩展}”/>
62. XAML 中对象元素可以拥有哪些类型的子元素?
对象元素可以具有三种类型的子元素
- 收集项目
- 内容属性的值
- 可类型转换为对象元素的值
63.解释什么是类型转换器?
类型转换器有助于在没有标记扩展使用的情况下将字符串转换为适当的值类型。类型转换器定义了四个成员,用于在 xaml 中与字符串之间进行转换。
- 可以转换为
- 可以转换自
- 转换成
- 转换自
64. 解释 XAML 中的对象元素语法?
要通过声明 XML 元素来实例化 CLR 类或结构,需要使用 XAML 标记语法。此语法称为对象元素语法。
65. 在 XAML 中声明对象的方法有哪些?
要在 XAML 中声明对象,有三种方法
- 直接使用对象元素语法:此语法用于声明设置属性值的根对象或嵌套对象
- 通过使用属性语法间接实现:此语法使用内联字符串值,其中包含有关如何创建对象的说明。要将属性的值设置为新创建的引用,XAML 解析器使用此字符串
- 使用标记扩展
66. XAML 文档的根元素应该包含什么?
在XAML文档中,根元素仅由某些元素组成,这些元素是Window,Canvas或Panels。
67. 什么是使用 XAML 进行数据绑定?
数据绑定提供了一种显示和与数据交互的简单方法。示例将展示如何在 XAML 中进行数据绑定。XAML 中的绑定是使用 {binding….} 语法完成的。
68. 解释如何在运行时和设计时显示不同的数据?
- 在运行时和设计时显示数据的一种方法是在 XAML 中声明数据
- 另一种方法是使用设计器 XML 命名空间中的各种数据属性在 XAML 中声明它。通常使用 ad: 前缀来声明此命名空间。
xmlns:d=http://schemas.microsoft.com/expression/blend/2008
69. 解释 XAML 中的 x:Key 指令的功能是什么?
X:Key 唯一标识在 XAML 定义的字典中创建和引用的元素。通过向 XAML 对象元素添加 x:Key 值,可以识别资源字典中的资源,这是最常见的识别方式。
70. 解释一下属性元素语法有什么用途?
借助属性元素语法,您可以添加以 parent.propertyName 形式命名的子元素。
71. 如何定义XAML中使用的自定义类?
自定义类有两种使用方式
- 使用生成主 Windows Presentation Foundation (WPF) 应用程序的代码或在后台代码中
- 在单独的程序集中作为类,例如用作类库的可执行文件或 DLL
72. 什么是 Xaml 命名空间?
命名空间可以定义为一个环境或一个抽象容器,用于保存唯一标识符或符号的逻辑分组。
这些面试问题也会对你的口试有帮助
请重新检查隧道和气泡事件定义,它们似乎互换了。
如果我错了请告诉我。