WPF 2024 金九银十 最新 高级 架构 口试题 C#

打印 上一主题 下一主题

主题 985|帖子 985|积分 2955

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
含入门 初级 中级 高级 不同级别WPF的口试题     相关口试题
  redis安装说明书 http://t.csdnimg.cn/iM260
  单体并发瓶颈 redis sqlsever mysql多少 http://t.csdnimg.cn/DTXIh

  Redis高频口试题http://t.csdnimg.cn/FDOnv

  数据库SqlServer笔试题 数据库SqlServer笔试题-CSDN博客

  SQL 大数据查询如何进行优化?sqlserver和oracle整理_sqlerver快速】遍历大数据并计算-CSDN博客
  WPF 2024 金九银十 最新 高级 架构 口试题 C# WPF 2024 金九银十 最新 高级 架构 口试题 C#-CSDN博客

  问题目次

入门篇

   1.  什么是  WPF  ?     2.WPF  中的  XAML  是什么?为什么必要它?它只存在于  WPF  吗?   WPF初级篇

   1.WPF  中控件的分类  ?     2.XML  和  XAML  有什么区别  ?     3.  如何明白  WPF  的样式     4.WPF   中的资源是什么?     5.  什么是静态资源和动态资源?     6.WPF  中的  Visibility.Collapsed  和  Visibility.Hidden  有什么区别  ?     7.XAML   文件中的   xmlns   是什么?     8.WPF  中的下令计划模式是什么     9.WPF  中的  xmlns   和  xmlns:x  有什么区别  ?     10.  我们什么时间应该使用  “x:name”  和  “name”  ?     11.  相对于  Winform  ,  WPF  有什么优势  ?     12.  什么是  WPF  的值转换器  ?     13.  在  WPF  中进行对齐的各种方法是什么?     14.  描述  WPF  中的多段线     15.WPF  提供了哪些不同类型的画刷?     16.  什么是  Popup  对象,以及如何打开和关闭  Popup     17.  什么是  WPF  中的旋转变换     18.  什么是布局容器?     19.  什么是可视化树?     20.  什么是触发器  ?     21.  什么是  MVVM  模式?请简要解释  MVVM  模式的结构和各个部分的职责。   WPF中级篇

   1.  描述下  WPF  的总体架构  ?     2.  描述下  WPF  对象完备的层次结构  ?     3.WPF   是建立在   Windows   窗体之上的还是完全不同的?     4.Style   和   ControlTemplate  的主要区别是什么  ?     5.  如何明白  MVVM  中的   View   和   ViewModel?     6.  如何在  WPF  应用步调中全局捕获异常?     7.WPF  中的  x:Name  和  Name  属性之间有什么区别?     8.ListBox   与   ListView -   如何选择以及何时进行数据绑定?     9.  说出使用  WPF  而不是  Windows  窗体的一些优点     10.WPF  中的下令计划模式和  ICommand  是什么?     11.  什么是可冻结对象?     12.  什么是  MVVM?     13.WPF  中可视化树和逻辑树的区别是什么?     14.  在  WPF  应用步调会合添加新文件时,  Page  和  Window  有什么区别?     15.WPF  中的样式和资源有什么区别?     16.WPF  中  Dispatcher  对象的用途是什么  ?     17.WPF  中  StaticResource  和  DynamicResource  之间有什么区别?     18.  描述下  WPF  中使用的  Prism  框架     19.WPF  中的虚拟化是什么     20.WPF  中有多少种位图结果     21.WPF  有什么优缺点     22.  如何明白绑定中的  “UpdateSourceTrigger”?     23.  什么是路由变乱  ?     24.WPF  中的路由变乱和平凡变乱有何区别?     25.  什么是数据模板选择器(  DataTemplateSelector  )?     26.  什么是  VisualStateManager  ?     27.WPF  中的可视化树有什么作用?     28.  详细说明下  WPF  中的布局容器?     29.  详细说明下  WPF  中的触发器?  30.  什么是  WPF  的  3D  ?请简要介绍其特点和用途     31.  什么是  UI  虚拟化?它是如何帮助提升  WPF  应用步调性能的?     32.  请谈谈你对  WPF  布局体系的明白,以及如何优化布局以提高性能?     33.  介绍一下  WPF  中常见的  UI  线程和后台线程之间的通信方式,以及如何避免  UI  线程壅闭?   WPF高级篇

   1.  解释  SelectedItem  、  SelectedValue  和  SelectedValuePath  之间的区别?     2.WPF   中的   ControlTemplate   和   DataTemplate   有什么区别?     3.Freezable.Clone()   和   Freezable.CloneCurrentValue()   方法有什么区别?     4.ObservableCollection   和   BindingList   有什么区别?     5.  冒泡变乱和隧道变乱之间简直切区别是什么?     6.Threads   和   Dispatchers   是什么关系?     7.ContentControl   和   ContentPresenter   之间有什么区别?     8.  为什么必要依赖属性?     9.  什么是路由筛选器     10.  什么是弱变乱模式?     11. WPF   应用步调的内存优化从哪些方面考虑?     12.  请解释  WPF  中的模型(  Model  )和多少体(  Geometry  )的区别。     13.  谈谈你在  WPF 3D  方面的项目经验,以及你在项目中碰到的挑战和办理方案。     14.  介绍一些在  WPF  应用步调中优化视觉结果和动画性能的方法。     15.  如何检测  WPF  应用步调的性能瓶颈,并进行性能分析和优化?   入门篇

   1.  什么是  WPF      WPF  (  Windows Presentation Foundation  )是一种用于创建  Windows  桌面应用步调的  UI  框架。它提供     了丰富的图形、动画、多媒体和文本处理等功能,使开发人员可以创建出当代化、高效的用户界面。     WPF  使用  XAML  (  Extensible Application Markup Language  )作为界面界说语言,允许开发人员通过声     明性标记来创建用户界面,而无需编写大量的代码。  WPF  还引入了数据绑定、下令、样式和模板等概     念,使得代码的构造和重用更加容易。     WPF  采用了基于矢量图形的渲染引擎,可以以高质量的方式呈现各种  UI  元素,包括笔墨、图像、多少形     状等。同时,  WPF  还支持  3D  图形、动画、视频和音频等媒体类型,使得开发人员可以创建丰富的交互式     用户界面。     总的来说,  WPF  是一种强大、灵活、易于使用的  UI  框架,提供了丰富的功能和工具,使得开发人员可以     创建出当代化的  Windows  桌面应用步调。     2.WPF  中的  XAML  是什么?为什么必要它?它只存在于  WPF     吗?     XAML   是用来构造   WPF UI   的   XML   文件。 以  XML  标签方式表现  UI  的重点是编写一次可以在其他地方运     行它,比如  Blend  软件也能正常加载与编辑。     XAML   不仅仅适用于   WPF  。   XAML   是一种基于   XML   的语言,它有多种变体。   WPF初级篇

   1.WPF  中控件的分类  ?   WPF  控件可以分为四类:     Control: -   大部分时间使用的基本控件。 例如文本框、按钮等。像按钮、文本框、标签等独立控件     的控件被称为内容控件。 还有其他控件可以容纳其他控件,例如   itemscontrols  。   Itemscontrol   可     以有多个文本框控件、标签控件等。     Shape: -   帮助我们创建简朴的图形控件,如椭圆、线条、矩形等。     Panel: -   有助于对齐和定位控件。 例如,  grid   帮助我们以表格方式对齐,  stack panel   有助于水平     和垂直对齐。     Content presenter: -   用于将任何   XAML   内容放入此中。     2.XML    XAML  有什么区别  ?     以下是   XML   和   XAML   之间的区别:     1.   所有   XAML   文档都可以称之为   XML   文档。 然而,反过来说却是不能的。     2. XAML   是一种声明性应用步调语言,而   XML   是一种标记语言。     3. XML   主要用于   Web   应用步调。 相比之下,  XAML   用于计划   Windows   和其他   Web   应用步调的控     件。     4. XAML   侧重于对象属性、界说以及它们之间的关系。     5. XML   是   W3C   产生的一种标记语言,用于描述其他标记语言。     3.  如何明白  WPF  的样式     WPF   样式的工作方式与   CSS   样式类似     在   CSS   中,我们为控件界说样式,并在应用步调中任何必要的地方重用类似的样式     与   WPF   中的样式允许界说属性并可在应用步调中重用的方式类似。     4.WPF   中的资源是什么?     资源提供了一种简朴的方法来重用已界说的对象和值。   WPF   中的资源允许一次设置多个控件的属性。     例如,可以使用单个资源在   WPF   应用步调中的多个元素上设置配景属性。     界说资源的最佳方式是在   Window   或   Page   元素级别。 为元素界说的任何资源也适用于该元素的子元     素。     5.  什么是静态资源和动态资源?     Static Resource - StaticResource   的值在加载时确定     Dynamic Resource -   在运行时更改属性值的情况下使用。     6.WPF  中的  Visibility.Collapsed    Visibility.Hidden  有什     么区别  ?     Visibility.Hidden   隐蔽控件,但保存它在布局中占用的空间。 以是它呈现空白而不是控件。     Visibilty.Collapsed   不呈现控件而且不保存空格。 控件占用的空间是  “  折叠的  ”     7.XAML   文件中的   xmlns   是什么?     “xmlns”  代表   XML   定名空间。 它帮助我们避免   XML   文档中的名称冲突和肴杂。     8.WPF  中的下令计划模式是什么  下令计划模式是面向对象计划模式中最强大的计划模式之一。 此模式允许将操纵请求与实际实行操纵的     对象分离,换句话说,下令模式将操纵表现为对象。   Command   对象不包罗要实行的功能。 这消除了     下令界说和功能之间的直接联系,并促进了疏松耦合。 当必要根据用户请求实现操纵时,下令模式是处     理对象的最佳模式。     下令计划模式的成员包括:   Client  、调用者、下令、具体实行内容、吸收者     9.WPF  中的  xmlns     xmlns:x  有什么区别  ?     这两个定名空间都有助于界说  /  解析   XAML UI   元素。     第一个定名空间是默认定名空间,有助于解析团体   WPF   元素。     第二个定名空间以  “x:”  为前缀,有助于解析   XAML   语言界说。     例如,对于下面的   XAML   片段,我们有两个东西,一个是  “StackPanel”  ,另一个是  “x:name”  。     “StackPanel”  由默认定名空间解析,  “x:name”  由  “xmlns:x”  定名空间解析。     10.  我们什么时间应该使用  “x:name”    “name”      “x:name”  和  “name”  没有区别,  “name”  是  “x:name”  的简写。 但是当对象无法使用  “name”  属性时,就必要     使用  “x:name”  属性。     11.  相对于  Winform    WPF  有什么优势  ?     1 -   绑定(更简约的编码)     2 -   灵活的外观和感受(资源和样式)     3 -   声明式编程   (XAML)     4 -   体现层混合动画(动画开发简朴)     5 -   快速加载(硬件加速)     6-   图形硬件无关(分辨率无关)     12.  什么是  WPF  的值转换器  ?     值转换器充当目的和源之间的桥梁,当目的与一个源绑定数据类型不一致时,必要值转换器来做中转。     例如有一个文本框和一个按钮控件, 当文本框的文本被添补或为空时,希望启用或禁用按钮控件。     在这种情况下,必要将字符串数据转换为布尔值。这可以使用值转换器实现。     要实现值转换器,必要继承  System.Windows.Data  定名空间中的  IValueConverter  ,并实现两个方法     Convert  和  ConvertBack  。     13.    WPF  中进行对齐的各种方法是什么?     FrameworkElement  有两个对齐属性:  HorizontalAlignment  和  Vertical alignment  。     Horizontal Alignment  属性是  HorizontalAlignment  罗列的一种类型,表现子元素如何水平放置在父     元素中。     HorizontalAlignment  罗列具有四个属性  Left  、  Center  、  Right  和  Stretch  。  “  左  ”  、  “  中  ”  和  “  右  ”  属性将子元素     设置为父元素的左、中和右。  Stretch  属性拉伸子元素以添补父元素分配的布局空间。     <StackPanel   x:Name  =  "myStack"   />  VerticalAlignment  属性是  HorizontalAlignment  罗列的一种类型,表现子元素在父元素中的垂直位     置。     VerticalAlignment  罗列具有四个属性  Top  、  Center  、  Bottom  和  Stretch  。  “  顶部  ”  、  “  中心  ”  和  “  底部  ”  属性将     子元素设置为父元素的顶部、中心或底部。  Stretch  属性拉伸子元素以垂直添补父元素分配的布局空间。     14.  描述  WPF  中的多段线     多段线是由一条或多条直线(或圆弧)线段构成的对象。矩形是您已经熟悉的多段线示例。正如您所看     到的,它是一个可以修改的对象,可以使用比四条单独的线更容易的方式进行操纵。     换句话说,多段线是毗连直线的集合。  Polyline  对象表现多段线形状,并使用给定点绘制多段线。  Points     特性表现多段线中的点。  Stroke  属性设置颜色,  StrokeThickness  表现多段线的线宽。     15.WPF  提供了哪些不同类型的画刷?     画笔和笔是用于绘制和添补图形对象的对象。  WPF  采用  XAML  进行渲染,每个  XAML  控件都有一个  WPF     类。例如,  XAML  中的标记和  WPF  中的  SolidColorBrush  类都表现纯色画笔。     在  XAML  和  WPF  模型中,提供了以下画笔对象:     1. SolidColorBrush     2. LinearGradientBrush     3. RadialGradientBrush     4. DrawingBrush     5. Visual Brush     6. ImageBrush     16.  什么是  Popup  对象,以及如何打开和关闭  Popup     Popup  是一个浮动在页面或窗口上的窗口,提供一些快速操纵的功能。例如,页面或窗口上的登录控件     或控件的动画弹出提示。  XAML  的  Popup  元素表现  WPF Popup  控件。     打开:当  IsOpen  设置为  true  时,弹出控件显示其内容     关闭:当  IsOpen  设置为  false  时,  Popup  控件显示其内容。     17.  什么是  WPF  中的旋转变换     RotateTransform  将元素绕点顺时针旋转指定角度。  WPF  中的  RotateTransform  对象表现     RotateTransform  。  Angle  属性表现顺时针旋转的角度(以度为单位)。  CenterX  和  CenterY  属性表现中     心点的  X  和  Y  坐标。默认情况下,  ScaleTransform  以点(  0,0  )为中心,该点对应于矩形的左上角。     18.  什么是布局容器?     布局容器是一种  WPF  控件,用于确定子元素在其内部的布局方式和位置。它们包括  StackPanel  、  Grid  、     WrapPanel  等,用于实现不同的布局需求。     19.  什么是可视化树?     可视化树是  WPF  中用于表现界面元素(如控件、容器等)之间层次关系的树结构。它描述了窗口或用户     控件中的所有可见元素以及它们之间的父子关系。可视化树对于布局、渲染和变乱通报等方面起着重要     作用。     20.  什么是触发器  ?  触发器是一种用于在特定条件下更改控件外观或行为的机制。  WPF  中的触发器可以基于属性值、数据绑     定、路由变乱等进行触发,并允许在特定条件满足时进行样式、模板和触发器的切换。     21.  什么是  MVVM  模式?请简要解释  MVVM  模式的结构和各     个部分的职责。     MVVM  (  Model-View-ViewModel  )模式是一种用于构建用户界面的软件架构模式。它将应用步调分为     三个主要部分:  Model  、  View  和  ViewModel  。     1.   Model  :     Model  代表应用步调的数据模型,负责管理数据的获取、存储、验证及业务逻辑。     Model  通常不直接与视图进行交互,而是由  ViewModel  来访问和操纵。     Model  是独立于用户界面的,可以被多个  ViewModel  共享。     2.   View  :     View  是用户界面的展示层,负责在屏幕上呈现数据和吸收用户输入。     View  通常是  XAML  文件界说的  UI  元素,如窗口、按钮、文本框等。     View  不应包罗任何业务逻辑,只负责将数据从  ViewModel  显示到界面,并将用户输入通报给     ViewModel  处理。     3.   ViewModel  :     ViewModel  充当  Model  和  View  之间的中介,负责处理视图逻辑、数据转换和  UI  交互。     ViewModel  包罗了视图所需的数据以及与数据相关的操纵,通常实现了下令、属性绑定等功     能。     ViewModel  通过数据绑定与  View  进行通信,将用户输入转换为操纵  Model  的指令,同时将     Model  的数据更新反映到  View  上。     MVVM  模式的优势在于清晰地分离了界面逻辑、业务逻辑和数据模型,使得代码更易于维护、测试和扩     展。  ViewModel  作为  View  和  Model  之间的桥梁,降低了耦合度,提高了代码的可复用性。另外,  MVVM     还提倡数据驱动的编程方式,通过数据绑定实现了视图与逻辑的解耦,提升了开发效率。    WPF中级篇

   1.  描述下  WPF  的总体架构  ?     User32:   决定了哪个控件显示在屏幕上的哪个位置。     DirectX:   WPF  内部使用  DirectX   与驱动步调对话并渲染呈现内容。     Milcore:   媒体集成库。 此部分好坏托管代码,由于它充当   WPF   托管和   DirectX/User32   非托管     API   之间的桥梁。     Presentation core :   WPF   公开的低级   API  ,提供   2D   、   3D   、几多么功能。     Presentation framework:   此部分具有高级功能,如应用步调控件、布局。 帮助您构建应用步调     的内容等。     2.  描述下  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  类。     3.WPF   是建立在   Windows   窗体之上的还是完全不同的?     这两个是完全不同的技术。 它们确实为两个方向提供了一些互操纵性层,但除此之外没有任何共同之     处。   Windows   窗体或多或少是   Win32/MFC   之上的轻量级包装器,这意味着它在   .NET   中的可扩展性并     非在所有情况下都那么好。   WPF   是一个重新开始实现的新   UI   框架。 在自界说现有类型时,  WPF   也更     加灵活。     WPF   更适合创建  “  华丽  ”  的   GUI  。 只是它必要比   WinForms   更新的   .net   框架,而且必要兼容   dx9   或     更高的   GPU  。     WinForms   仍然是一项强大的技术,通常可以以比   WPF   更快的速率开发,但是,最终,这两种技     术都可以用来实现类似的目的。   WinForms   通常用于开发业务应用步调,而   WPF   通常用于创建更     多基于最终用户的软件、应用步调等。     4.Style      ControlTemplate  的主要区别是什么  ?     样式在控件上设置属性。     ControlTemplate   是大多数控件的属性,用于指定它们的呈现方式。     详细地说,可以使用一种样式对一组属性的设置进行分组,以便重新使用它来标准化已有控件。 样式可     以在控件上显式设置,也可以应用于所有特定类型。     控件模板可以通过样式设置或在控件上显式设置以更改其显示方式。 所有控件都有嵌入在   .net wpf   程     序会合的默认模板(和样式)。     5.  如何明白  MVVM  中的   View      ViewModel?     View  是客户端界面、输入输出界面或用户界面。 收集了窗口、导航页面、用户控件、资源文件、样式和     主题、自界说工具和控件的所有用户界面元素。     View  不知道   ViewModel   和   Model  ,反之亦然,  ViewModel   和   Model   不知道   View   ,而且控件是完全分     离的。     但是  ViewModel  知道  View  的需求。 它们通过数据绑定和依赖属性或多个属性进行通信。     ViewModel   是一个非可视类。   MVVM   计划模式不派生自任何基于   WPF   的类。   ViewModel   不直接知道     View  。   View   和   ViewModel   之间的通信是通过一些属性和绑定进行的。     一个   View-Model   可以毗连到多个模型,像一对多关系一样工作,并为   View   封装业务逻辑和数据。     6.  如何在  WPF  应用步调中全局捕获异常?     使用  “Application.DispatcherUnhandledException”  变乱。  请留意,仍有一些异常会导致应用步调崩溃,例如在尝试保存到数据库时出现堆栈溢出、内存耗尽或网     络毗连丢失等情况。     7.WPF  中的  x:Name    Name  属性之间有什么区别?     它们不是同一件事。     x:Name   是一个   xaml   概念,主要用于引用元素。当您为元素提供   x:Name xaml   属性时,  “  指定的     x:Name   将成为处理   xaml   时在底层代码中创建的字段的名称,而且该字段保存对对象的引用。  ”     [MSDN],  以是,它是一个计划时天生的字段,默认情况下具有内部访问权限。     Name   是   FrameworkElement  对象的现有字符串类型的属性  ,   以其他  WPF  元素中都包罗此属性  .     因此,这也意味着   x:Name   可以用于更广泛的对象。 这是一种使   xaml   中的任何内容都可以或许被给定名称     引用的技术。     8.ListBox      ListView -   如何选择以及何时进行数据绑定?     ListView   是一个专门的   ListBox  (继承自   ListBox  )。   ListView  允许指定不同的视图而不是直接列表。 可     以滚动本身的视图,也可以使用   GridView  (想想类似资源管理器的  “  详细信息视图  ”  )。 它基本上是多列     列表框,跟   windows   窗体列表视图的体现类似。     如果不必要   ListView   的附加功能,只是显示项目列表(即使模板很复杂),使用   ListBox  就充足了。     9.  说出使用  WPF  而不是  Windows  窗体的一些优点     使用   WPF   取代   Windows   窗体的优点:     XAML   使更容易的创建和编辑   GUI  ,并允许在计划模式   (XAML)   和后台代码(  C#  、  VB.NET   等)之     间拆分工作。     数据绑定,使开发项目可以更清晰地分离数据和布局。     使用硬件加速来绘制   GUI  ,以得到更好的性能。     10.WPF  中的下令计划模式和  ICommand  是什么?     ICommand   是   MVVM   的核心组件。   ICommand   在   MVVM   中常常使用,它提供了  View  和     ViewModel  (用户界面和业务逻辑)之间的分离逻辑。   XAML   提供了一种通过   ICommand   更好地绑定     GUI   变乱的方法。   ICommand   要求用户界说两个方法,  bool CanExecute   和   void Execute  。   CanExecute     方法只是告诉用户,我可以实行这个   Action   吗? 这对于控制   GUI   元素的可操纵性非常有用。     ICommand   非常简朴,但是也可以完在更加有趣和复杂的功能。   ICommand   将用户界面集成到业务逻     辑中,或者在视图与视图模型之间进行直接通信。 它还为视图提供了更新模型  /  视图模型的机制。     11.  什么是可冻结对象?     Freezable   是一种特殊类型的对象,具有两种状态:  unfrozen   和   frozen  。 解冻时,  Freezable   的行为与     任何其他对象一样。 冻结后,无法再修改   Freezable  。     Freezable   提供了一个   changed   变乱来关照观察者对对象的任何修改。 冻结   Freezable   可以提高其性     能,由于它不再必要在更改关照上耗费资源。 冻结的   Freezable   也可以跨线程共享,而未冻结的     Freezable   则不能。     只管   Freezable   类有许多应用步调,但   WPF  中的大多数   Freezable   对象都与图形子体系相关。     12.  什么是  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   的优势     模块化     测试驱动开发     分离   UI   和业务层作为视图和视图模型。     Page  和  Window  之间的代码共享。     易于维护。     MVVM   的特性列表     它分离了业务层和表现层,如   MVP   和   MVC     改进关注点的结构  /  分离(视图、视图模型和模型)。     实现更好的计划  /  开发人员工作流程。     增强简朴性和可测试性。     通过  XAML  支持强大数据绑定功能     无需使用代码隐蔽文件     提供多情况的应用开发能力。     强大的数据绑定、下令、验证等等。     计划者和开发者可以一起工作。     13.WPF  中可视化树和逻辑树的区别是什么?     WPF   用户界面的元素是分层相关的。 这种关系称为逻辑树。 一个元素的模板由多个视觉元素构成。 这     棵树被称为   VisualTree  。     逻辑树   描述了用户界面元素之间的关系。 逻辑树负责:     继承   DependencyProperty   值     解析   DynamicResources   引用     查找绑定的元素名称     转发路由变乱     视觉树  包罗所有逻辑元素,包括每个元素模板的所有视觉元素。 视觉树负责:     渲染视觉元素     传播元素不透明度     传播布局和渲染变换     传播   IsEnabled   属性。     进行命中测试     相对泉源   (FindAncestor)     14.    WPF  应用步调会合添加新文件时,  Page    Window      什么区别?     页面旨在用于导航应用步调(通常带有后退和前进按钮,例如欣赏器)。 页面必须托管在     NavigationWindow   或   Frame   中。     Windows   只是平凡的   WPF   应用步调   Windows  ,但可以通过   Frame   容器托管页面。  15.WPF  中的样式和资源有什么区别?     资源用于针对多种类型的控件的属性,而样式一次只能为一种类型的控件界说属性。 我们还可以将不同     的样式界说为一种公共资源的一部分。     这是一个开放式问题。 参考你的经验来提供相关的答案。     16.WPF    Dispatcher  对象的用途是什么  ?     几乎每个   WPF   元素都具有线程关联性。 这意味着只能从创建该元素的线程访问此类元素。 为此,每个     必要线程关联的元素最终都是从   DispatcherObject   类派生的。 此类提供名为   Dispatcher   的属性,该属     性返回与   WPF   元素关联的   Dispatcher   对象。     Dispatcher   类用于在他的附加线程上实行工作。 它有一个工作项队列,负责在调度步调线程上实行工作     项。     17.WPF    StaticResource    DynamicResource  之间有什     么区别?     在实际运行应用步调之前加载   XAML   期间,将解析   StaticResource   并将其分配给属性。 它只会     被分配一次,而且忽略对资源字典的任何更改。     DynamicResource   在加载期间将一个   Expression   对象分配给该属性,但直到运行时当     Expression   对象被要求提供值时才实际查找资源。 这会导致直到在活动时必要它时才查找资源。     一个很好的例子是对稍后在   XAML   中界说的资源的前向引用。 另一个例子是直到运行时才会存在     的资源。 如果源资源字典发生更改,它将更新目的。     18.  描述下  WPF  中使用的  Prism  框架     Prism  旨在在  WPF  中构建具有单个代码库的应用步调。它有助于以模块化的方式开发客户端应用步调,     以便将大型应用步调的复杂性划分为更简朴的模块。     换句话说,  “  Prism  由  Microsoft Patterns and Practices  开发,提供引导,旨在帮助您更轻松地计划和构建     丰富、灵活且易于维护的  Windows Presentation Foundation  (  WPF  )桌面应用步调。  ”  。     以下是基本架构:     1.   App.XAML:   调用  Application_Startup  上的  Boot Strapper  。     2.   BootStrapper:   一个调用  Shell  (  Shell.XAML  )的类文件,从而创建模块目次。     3.   Shell:   类似一个具有地区的母版页,一个界说地区的容器     4.   Region:   视图呈现的地区,类似视图占位符     5.   View:   具有用户界面的  XAML  文件     6.   Module:   每个模块可以有一个或多个视图,这些视图通过地区管理器注册到地区(在  Shell  中)     19.WPF  中的虚拟化是什么     WPF  中的虚拟化技术提高了  UI  元素的渲染性能。通过应用虚拟化,布局体系确保在屏幕上只呈现容器的     可见项。例如,列表控件可能有数千个项目,但虚拟化将减少对可见项目的渲染。     WPF  中的  VirtualizingStackPanel  控件用于实现虚拟化。  VirtualizingStackPanel  的  IsVirtualizing  属性激活     虚拟化。默认情况下,  IsVirtualization  属性设置为  true  。当  IsVirtualization  设置为  false  时,     VirtualizingStackPanel  的行为与平凡  StackPanel  类似。  VirtualizingStackPanel.VirtualizationMode  属性有两个值,  Standard  和  Recycling  。  VirtualizationMode     的默认值为  Standard  ,这意味着  VirtualizingStackPanel  为每个可见项目创建一个项目容器,并在不再需     要时(例如当项目滚动到视图外时)丢弃它。当  ItemsControl  包罗许多项时,创建和丢弃项容器的过程     会降低性能。在这种情况下,使用  Recycling  重用项目容器,而不是每次都创建一个新容器。     20.WPF  中有多少种位图结果     位图结果使计划人员和开发人员可以或许将视觉结果应用于渲染的  WPF  内容。例如,位图结果可以轻松地将     阴影结果或含糊结果应用于图像或按钮。     以下是  WPF  中可用的位图结果:     1. BlurBitmapEffect     2. DropShadowBitmapEffect     21.WPF  有什么优缺点     优点:     丰富的多媒体集成:要在  win32  或  Windows  窗体应用步调中使用三维图形、视频、语音和丰富的文     档检察,必要分别学习几种独立的技术,并在有限的原生支持的情况下将它们融合在一起。  WPF  应     用步调可以在同一个编程模型中使用所有这些功能。     屏幕分辨率无关:  WPF  允许您缩小或放大屏幕上的元素,与屏幕分辨率无关。它使用矢量图形使应     用步调的分辨率独立。     硬件加速:  WPF  构建在  Direct3D  之上,使用图形处理单位(  GPU  )而不是中心处理器单位(  CPU  )     进行图形渲染。这为  WPF  应用步调提供了硬件加速的好处,允许更平滑的图形和增强的性能。     声明式编程:  WPF  使用可扩展应用步调标记语言(  XAML  )声明性编程来界说应用步调对象的布局     和表现三维模型等。这允许计划人员与开发人员直接为同一个  WPF  应用步调进行协同作业。     丰富的构成和定制:  WPF  控件易于自界说。您不必要编写任何代码来以非常独特的方式自界说控     件。  WPF  还允许您为外观完全不同的应用步调创建外观。     易于部署:  WPF  提供了部署传统  Windows  应用步调的选项(使用  Windows Installer  或  Click     Once  )。这一特性并非  WPF  独有,但仍然是该技术的重要构成部分。     国际化与当地化支持:控件中的静态文本和  String  函数的返回数据根据最终用户操纵体系指定的区     域性和语言进行修改。     缺点:     WPF  的内置控件远比没有  WinForms  的丰富多样。     WPF  提供了一条新的学习曲线,相比而言  Winform  更简朴些     没有  MDI  子窗口模式     22.  如何明白绑定中的  “UpdateSourceTrigger”?     这是绑定上的一个属性,用于控制从目的到源的数据流,并用于双向数据绑定。默认模式是核心改变但     有许多其他选项可用时。     UpdateSourceTrigger  提供以下选项:     Default  :这是默认值,大多数控件都会失去核心而触发更新。     LostFocus  :直到核心移出控件时触发更新     PropertyChanged  :每当目的属性发生更改时,就会进行值更新。     Explicit  :用于延迟源更新,直到用户通过单击按钮等强制实行时进行更新。     23.  什么是路由变乱  ?  路由变乱是基于控件的层次结构的,是  WPF  提供的一种新的基础结构,它允许变乱通过隧道沿视觉树从     根元素向内到达目的元素,或者冒泡到根元素。路由变乱与正常变乱类似。     路由变乱有三种类型,如下所示:     冒泡变乱:在控件层次结构中首先引发的隧道变乱。这些变乱由  Root  元素引发。这允许变乱沿树向     下隧穿。     隧道变乱:冒泡变乱是控件首先引发的变乱,而不是控件层次结构中其他控件引发的变乱。它允许     泡泡上升到树,直到根元素。首先引发隧道变乱,然后引发冒泡变乱。     直接变乱:直接变乱通常由控件本身引发。此变乱的行为与  .NET  通例变乱类似。     24.WPF  中的路由变乱和平凡变乱有何区别?     WPF  中的路由变乱(  Routed Event  )与平凡变乱不同,它在整个元素树中的多个元素之间传播,而不仅     仅局限于触发变乱的元素。路由变乱提供了一种变乱体系,可以沿着元素树从源元素到目的元素传播,     以便在不同层次结构上注册和处理变乱。     1.   路由变乱的传播方式:     冒泡计谋(  Bubbling  ):路由变乱从子元素向父元素传播,直到达到根元素为止。例如,当     一个按钮被点击时,  Click  变乱会先从按钮开始传播到其父级元素,然后传播到更高层级的元     素。     隧道计谋(  Tunneling  ):路由变乱从父元素向子元素传播,直到达到源元素为止。例如,当     一个鼠标按下变乱发生时,  PreviewMouseDown  变乱会先从根元素开始向下传播到按钮元     素,然后再传播到更低层级的元素。     直接计谋(  Direct  ):路由变乱只在当前元素上触发,并不传播到其他元素。     2.   路由变乱的变乱处理:     使用  XAML  :可以在  XAML  中通过在元素上附加变乱处理步调来处理路由变乱。例如,使用     Button  按钮的  Click  变乱时,可以在  XAML  中添加  Click  变乱处理步调,当按钮被点击时将调用     相关方法。     使用代码:也可以通过在代码中为路由变乱添加变乱处理步调来处理变乱。例如,可以使用     Button  的  AddHandler  方法或使用  EventSetter  在样式中设置变乱处理步调。     3.   停止路由变乱的进一步传播:     在变乱处理步调中调用  e.Handled = true;  可以停止路由变乱进一步向上传播或向下传播。这     将阻止其他元素上注册的类似路由变乱的变乱处理步调被触发。     使用隧道计谋时,可以在  Preview  变乱中停止变乱传播,以便只处理预览变乱而不触发相应的     平凡变乱。     通过使用路由变乱,开发人员可以更灵活地处理和管理多个元素之间的变乱传播和处理。路由变乱使得     在  UI  元素层次结构中注册和处理变乱变得更加方便和可扩展,同时提供了更多的控制能力和交互性。     25.  什么是数据模板选择器(  DataTemplateSelector  )?     数据模板选择器是一种机制,允许根据数据的类型或其他条件选择使用不同的数据模板来呈现数据。它     可以根据特定规则选择合适的数据模板进行数据绑定。     数据模板选择器是一个自界说类,继承自  DataTemplateSelector  基类,并重写此中的  SelectTemplate  方     法。这个方法在数据绑定过程中会被自动调用,用于确定应该使用哪个数据模板。     在  SelectTemplate  方法中,可以根据不同的条件逻辑进行判断,并返回对应的数据模板。您可以根据数     据对象的类型、属性值或其他条件来确定使用哪个数据模板。     26.  什么是  VisualStateManager    VisualStateManager  (视觉状态管理器)是在  WPF  中用于管理控件视觉状态和转换的机制。它可以让开     发人员根据不同的控件状态设置相应的可视化属性和样式,并在状态之间实现平滑的过渡。     在  WPF  中,使用  VisualStateManager  通常必要以下步骤:     1.   界说控件的视觉状态:在控件模板(  ControlTemplate  )中,使用     VisualStateManager.VisualStateGroups  属性界说一个或多个视觉状态组(  VisualStateGroup  ),     每个视觉状态组表现一组相关的视觉状态。     2.   在每个视觉状态中界说状态的过渡结果:在每个  VisualState  中,可以界说控件在不同状态之间过渡     时的结果。     3.   触发状态转换:在必要触发状态转换的地方,例如鼠标悬停、点击等变乱中,使用     VisualStateManager.GoToState  方法切换到指定的视觉状态。     通过上述步骤,我们可以根据控件状态,在不同的视觉状态之间平滑地切换结果。  VisualStateManager     提供了更好的可维护性和可扩展性,使开发人员可以或许更容易地管理和控制控件的外观行为,并提供更丰     富的用户交互体验。     27.WPF  中的可视化树有什么作用?     可视化树(  Visual Tree  )是  WPF  中用于表现界面元素之间层次关系的树状结构。它描述了窗口或用户控     件中的所有可见元素以及它们之间的父子关系。可视化树在布局、渲染和变乱通报等方面起着重要作     用。     详细说明如下:     1.   树状结构:可视化树是一个树状结构,由一系列相互关联的元素节点构成。每个元素节点代表一个     界面元素,如控件、容器、图形等。     2.   父子关系:可视化树中的节点之间通过父子关系进行毗连。每个元素节点都可以有一个父节点和多     个子节点。根节点通常是窗口或用户控件。     3.   可见元素:可视化树只包括可见的元素,即那些  Visibility  属性设置为  Visible  的元素。不可见的元素     (如  Collapsed  或  Hidden  )将不会包罗在可视化树中。     4.   自动构建:可视化树是在元素被添加到窗口或用户控件时自动构建的。  WPF  框架负责处理元素之间     的父子关系,并确保树状结构正确地反映了界面元素的层次关系。     5.   布局和渲染:可视化树对布局和渲染起着重要作用。当进行布局操纵时,  WPF  会遍历可视化树,计     算每个元素的大小和位置。随后,渲染操纵会遍历可视化树,并使用计算得到的布局信息将元素绘     制到屏幕上。     6.   变乱通报:可视化树在变乱通报中起着关键作用。当变乱被触发时,它会从根节点沿着树的路径向     下通报。  WPF  框架会将变乱路由到得当的元素,并找到对应变乱处理步调来处理该变乱。     通过可视化树,  WPF  可以或许正确地管理界面元素之间的父子关系、布局和渲染过程以及变乱的通报。这使     得开发人员可以轻松地构建复杂的界面,实现灵活的布局和交互结果,并提供响应性和可维护性的应用     步调。     28.  详细说明下  WPF  中的布局容器?     在  WPF  中,布局容器是一种用于确定子元素在其内部的布局方式和位置的控件。布局容器负责管理和安     排其子元素的大小、位置和层次结构,以便在界面中创建良好的布局。     WPF  提供了多种布局容器,每个容器都有不同的布局方式和特性,可以根据需求选择得当的容器。以下     是几个常用的布局容器:     1. StackPanel  (堆栈面板):  StackPanel  按照水平或垂直方向依次排列子元素。它可以根据内容自动     调整大小,并根据必要进行换行或溢出。     2. Grid  (网格):  Grid  将子元素按照行和列的情势进行布局。它允许子元素占据不同数量和大小的单     元格,可以灵活地创建复杂的布局结构。  3. WrapPanel  (自动换行面板):  WrapPanel  按照水平或垂直方向排列子元素,并在必要时自动换     行。它适用于必要自动顺应空间并换行的场景。     4. DockPanel  (停靠面板):  DockPanel  根据指定的次序将子元素停靠到容器的边缘。子元素可以停     靠在上、下、左、右或中心位置。     5. Canvas  (画布):  Canvas  允许通过指定子元素的正确位置来进行布局。它适用于必要自由定位和     控制元素位置的场景,但不提供自动调整和流式布局。     6. UniformGrid  (匀称网格):  UniformGrid  将子元素匀称地分布在行和列中。它类似于  Grid  ,但要     求所有单位格具有类似的大小。     使用布局容器,可以根据必要创建复杂的界面布局并控制子元素的位置和大小。布局容器通过处理各种     布局算法和规则,帮助实现灵活的  UI  计划和顺应不同屏幕尺寸的响应式布局。     29.  详细说明下  WPF  中的触发器?     触发器(  Trigger  )是一种用于在特定条件下更改控件外观或行为的机制。  WPF  中的触发器可以基于属性     值、数据绑定、路由变乱等进行触发,并允许在特定条件满足时进行样式、模板和触发器的切换。     1.   触发器类型:  WPF  中有两种类型的触发器,分别是属性触发器(  Property Trigger  )和变乱触发器     (  Event Trigger  )。     2.   属性触发器:属性触发器根据绑定对象的属性值来触发相应的操纵。当绑定的属性达到指定条件     时,触发器会自动激活。例如,可以使用属性触发器在按钮的  IsEnabled  属性为  true  时改变其配景     颜色。     3.   变乱触发器:变乱触发器根据绑定对象的路由变乱来触发相应的操纵。当指定的路由变乱触发时,     触发器会实行相应的动作。例如,可以使用变乱触发器在按钮点击变乱触发时实行一些额外的逻     辑。     4.   触发条件:触发器根据界说的条件来确定何时触发相关的操纵。条件可以是一些比力表达式、绑定     值、数据转换器的返回值等。触发器可以根据条件的满足与否来切换控件的外观或行为。     5.   触发操纵:触发器可以实行各种操纵,如更改控件的样式、模板、属性值等。这些操纵可以导致控     件的外观、行为或状态发生变化,从而提供不同的用户体验。     6.   多重触发器:  WPF  还支持多重触发器(  MultiTrigger  )和变乱触发器(  EventTrigger  )。多重触发     器可以在满足多个条件时触发操纵,而变乱触发器可以根据特定的路由变乱来触发操纵。     通过触发器,开发人员可以根据特定的条件和变乱动态地改变控件的外观和行为,以响应用户的交互和     状态变化。触发器使得界面的自顺应和交互性得以实现,同时提高了可维护性和代码的重用性。     必要留意的是,触发器通常与样式(  Style  )和模板(  Template  )一起使用,以便在特定情况下自动应用     相应的样式和模板。触发器是  WPF  中强大的功能之一,可以帮助开发人员创建富有动态性和交互性的应     用步调界面。     30.  什么是  WPF    3D  ?请简要介绍其特点和用途     WPF 3D  是  Windows Presentation Foundation  (  WPF  )框架中用于创建和展示三维图形的功能。它使     开发人员可以或许在  WPF  应用步调中轻松地集成和显示具有传神视觉结果的三维场景和对象。     特点包括:     基于  XAML     WPF 3D  使用  XAML  (  Extensible Application Markup Language  )来描述和界说三维     场景,使得界面计划更加灵活和易于实现。     支持数据绑定:   WPF 3D  支持数据绑定功能,可以将三维对象与数据模型相结合,实现动态更新和     交互。     灯光和材质:   支持不同类型的灯光和材质,可以为三维对象赋予传神的光影结果。     动画和转换:   提供丰富的动画和转换结果,可以实现三维对象的动态结果和过渡。     交互性:   支持用户与三维对象之间的交互,如拖拽、缩放、旋转等操纵。     用途包括:  数据可视化:   可用于创建复杂的数据可视化图表和图形,帮助用户更直观地明白数据。     虚拟现实应用:   可用于构建虚拟现实应用步调,如虚拟漫游、虚拟展示等。     游戏开发:   适用于开发简朴的  3D  游戏或娱乐应用,提供可定制的三维场景和对象。     产品展示:   可用于展示产品的三维模型,增强产品展示的吸引力和交互性。     教育培训:   可用于创建交互式的教育培训应用,使学习过程更生动和有趣。     31.  什么是  UI  虚拟化?它是如何帮助提升  WPF  应用步调性能     的?     当提到  WPF  中的  UI  虚拟化时,通常指的是对大量数据进行高效显示的技术。在  WPF  中,当必要显示大量     数据(例如列表、表格等)时,如果直接将所有数据项加载到  UI  控件中,可能会导致性能下降和内存占     用过高。这时就必要使用  UI  虚拟化技术来优化性能。     UI  虚拟化的基本原理是:只在屏幕上显示可见地区内的数据项,而不是将所有数据项都加载到内存中并     同时显示。当用户滚动或改变可见地区时,体系会动态地加载新的数据项或卸载不再可见的数据项,以     保持界面流畅和减少内存占用。     具体来说,  WPF  中的一些控件(如   ItemsControl   及其派生类)在实现  UI  虚拟化时,会根据可视范围动     态天生和接纳数据项的  UI  元素,而不是一次性天生全部数据项的  UI  元素。这样可以有用减少内存占用和     加速界面响应速率。     在口试中,关于  UI  虚拟化的问题可能涉及以下内容:     UI  虚拟化的界说及原理     UI  虚拟化与非虚拟化方式的性能差别     如何在  WPF  中实现  UI  虚拟化     UI  虚拟化对性能的影响和优势     如何处理数据项的动态加载和卸载     32.  请谈谈你对  WPF  布局体系的明白,以及如何优化布局以     提高性能?     WPF  (  Windows Presentation Foundation  )中的布局体系是控告件在界面上的排列和定位方式。  WPF     提供了多种布局容器(如   Grid   、   StackPanel   、   Canvas   等)以及强大的布局功能,使开发者可以或许灵活     地计划复杂的用户界面。     在  WPF  布局体系中,每个控件都可以使用不同的布局容器来实现特定的排列方式。开发者可以通过设置     控件的布局属性(如   Margin   、   HorizontalAlignment   、   VerticalAlignment   等)来控制控件在界面     上的位置和大小。同时,  WPF  还支持嵌套布局容器,使得可以创建复杂的布局结构。     为了优化布局以提高性能,开发者可以考虑以下几点:     1.   使用合适的布局容器  :根据界面的需求选择合适的布局容器,避免过度嵌套和不必要的布局结构。     例如,   StackPanel   适合一维排列,   Grid   适合网格布局。     2.   公道使用布局属性  :避免在每个控件上都设置大量的布局属性,只管减少布局计算的复杂度。公道     使用布局属性可以提高布局性能。     3.   利用布局缓存  :  WPF  会对布局进行缓存以提高性能,但必要留意当控件内容或布局属性发生变化时     要及时更新布局缓存。     4.   避免布局循环  :布局循环指的是控件之间相互依赖导致布局无法正常完成的情况。避免出现布局循     环可以提高性能并避免布局异常。     5.   异步加载布局  :在必要加载大量控件或复杂布局时,可以考虑使用异步加载来提高响应速率和性     能。     6.   减少控件数量  :只管减少界面上不必要的控件数量,只显示必要的内容,以降低布局和渲染的开     销。  通过公道计划布局结构、优化布局属性的设置、利用布局缓存等方法,开发者可以有用提高  WPF  应用程     序的性能。     33.  介绍一下  WPF  中常见的  UI  线程和后台线程之间的通信方     式,以及如何避免  UI  线程壅闭?     在  WPF  应用步调中,  UI  线程(也称为主线程)负责处理用户交互、界面更新和渲染等使命,而后台线程     则用于实行长时间运行的使命、  I/O  操纵或其他不必要壅闭  UI  线程的工作。为了保持界面的流畅和响应     性,必要在  UI  线程和后台线程之间进行有用的通信,而且避免  UI  线程被壅闭。     以下是  WPF  中常见的  UI  线程和后台线程之间的通信方式,以及如何避免  UI  线程壅闭的方法:     1.   Dispatcher  (调度器)  :     UI  线程中的每个   UIElement   都关联着一个   Dispatcher   对象,可以通过该对象的   Invoke   或     BeginInvoke   方法将操纵推送到  UI  线程实行,从而实现  UI  线程和后台线程之间的通信。     通过   Dispatcher   对象可以将后台线程中的使命安全地调度到  UI  线程实行,例如更新  UI  元素的     属性、触发  UI  变乱等。     2.   Task Parallel Library (TPL)  :     使用  TPL  中的   Task   和   TaskScheduler   可以轻松地在后台线程实行使命,并在必要时切换到  UI     线程更新界面。     通过   Task.Run   或   Task.Factory.StartNew   在后台线程实行耗时使命,然后使用     TaskScheduler.FromCurrentSynchronizationContext   切换回  UI  线程实行  UI  更新操纵。     3.   Async/Await  模式  :     使用   async/await   关键字可以方便地编写异步代码,而且自动在  UI  线程和后台线程之间切     换,避免  UI  线程壅闭。     在异步方法中使用   await   关键字可以暂停实行并释放  UI  线程,待异步操纵完成后再返回  UI  线     程继续实行。     避免  UI  线程壅闭的方法包括:     使用异步操纵  :将耗时的操纵放到后台线程实行,避免在  UI  线程上实行壅闭操纵。     分批加载数据  :对于大量数据的加载或处理,可以分批进行,避免一次性加载过多数据导致  UI  线程     壅闭。     使用非壅闭的  API  :只管使用非壅闭的异步  API  实行  I/O  操纵,如异步文件读取、异步网络请求等。     优化算法和操纵  :优化后台线程的算法和操纵,只管减少对  UI  线程的影响。    WPF高级篇

   1.  解释  SelectedItem    SelectedValue      SelectedValuePath  之间的区别?     SelectedItem   属性返回您的列表绑定到的整个对象。 因此,假设您已将一个列表绑定到一组     Category   对象(每个   Category   对象都具有   Name   和   ID   属性)。 例如。     ObservableCollection<Category>   。   SelectedItem   属性将返回当前选择的   Category   对     象。 然而,出于绑定目的,也可能有另一种情况,并不想得到整个   Category   对象绑定到列表绑定     到结果,而是该   Category   对象上的单个属性的值(例如它的   ID   属性)。     因此,我们将   SelectedValuePath   属性和   SelectedValue   属性作为另一种绑定方式(将它们相     互结合使用)。 假设您有一个   Product   对象,您的视图绑定到该对象(具有   ProductName  、     Weight   等属性)。假设在该   Product   对象上有一个   CategoryID   属性,而且希望用户可以或许从种别     列表中为产品选择一个种别。 必要将   Category   对象的   ID   属性分配给   Product   对象的  CategoryID   属性。这就是  “SelectedValuePath”  和  “SelectedValue”  属性的用武之地。  使用     SelectedValuePath='ID'   将   Category   对象上的   ID   属性分配给列表绑定到的   Product   对象上的     属性,然后将   SelectedValue   属性绑定到   DataContext   上的属性( 即产品)。     下面的示例演示了这一点。 有一个   ComboBox   绑定到一个种别列表(通过   ItemsSource  )。 将产品上     的   CategoryID   属性绑定为选定值(使用   SelectedValue   属性)。 通过   SelectedValuePath   属性将此与     种别的   ID   属性相关联。 而且只在   ComboBox   中显示   Name   属性和   DisplayMemberPath   属性)。     2.WPF   中的   ControlTemplate      DataTemplate   有什么     区别?     通常,控件是为了它本身而呈现的,并不反映底层数据。 例如,一个   Button   不会绑定到一个业务对象     ——  它在那里纯粹是为了可以点击它。 但是,通常会出现  “ContentControl”  或  “ListBox”  ,以便它们可以     为用户呈现数据。     因此,  “DataTemplate”  用于为底层数据提供可视化结构,而  “ControlTemplate”  与底层数据无关,     只是为控件本身提供可视化布局。     “ControlTemplate”  通常只包罗  “TemplateBinding”  表达式,绑定回控件本身的属性,而     “DataTemplate”  将包罗标准绑定表达式,绑定到其  “DataContext”  的属性(业务  /  域对象或 检察模     型)。     3.Freezable.Clone()      Freezable.CloneCurrentValue()     方法有什么区别?     Clone   实际上复制绑定表达式。 因此,如果对象的一个属性被绑定,它在副本中仍然是绑定的。     另一方面,   CloneCurrentValues   只复制当前值,顾名思义。 不会保存绑定,因此如果修改了绑     定的源,则不会更新副本中的值。     4.ObservableCollection      BindingList   有什么区别?     实际的区别在于   BindingList   用于  WinForms  ,而   ObservableCollection   用于  WPF  。 从   WPF   的角     度来看,  BindingList   没有得到正确支持,除非真的必须,否则您永远不会在   WPF   项目中真正使用它。     5.  冒泡变乱和隧道变乱之间简直切区别是什么?     WPF   为我们提供了许多不同的变乱处理机制  ——  它们是冒泡、隧道和直接。 这些都称为路由变乱。     Direct event   -   最符合直观感受的就是直接路由变乱了。 这是项目本身处理发生的变乱的地方。     一个很好的例子是在标准   WinForms   中处理鼠标按钮的   onClick   变乱。 这是在   GUI   项中引发变乱     并由所述   GUI   元素处理的地方。     Bubbling Event   -   当变乱没有被元素处理(比如文本框)而且变乱  “  冒泡  ”  到包罗它的   UI   容器时,     就会发生冒泡。 例如,假设有一个包罗面板的窗口,在该面板内有一个  Grid  ,在  Grid  内有一个     TextBox  。 如果  TextBox  未处理该变乱,则它会移动、通报或  “  冒泡  ”  到  Grid  上(由于  Grid  包罗     TextBox  ),如果未在该级别处理,则变乱会进一步向上冒泡  “   树  ”  (称为可视化树)到面板,在那     里它可能会或可能不会被处理。 这个过程一直持续到它被处理或变乱跳出最顶层的元素。     <ComboBox   ItemsSource  =  "{Binding Categories}"                    SelectedValue  =  "{Binding CategoryID, Mode=TwoWay}"                    SelectedValuePath  =  "ID"                    DisplayMemberPath  =  "Name"   />  Tunneling   -   隧道与冒泡相反。 变乱不是沿着可视化树  “  向上  ”  移动,而是沿着可视化树向下传播到     被视为源的元素。 隧道变乱的标准   WPF   定名界说是它们都以  “Preview”  开头,例如     previewdownkey   和   previewmousebuttondown  。 可以在它们到达  “  目的  ”  元素的途中捕获它们并     进行处理。     6.Threads      Dispatchers   是什么关系?     WPF   应用步调只有一个   UI   线程来处理所有   UI   交互和用户输入。 还有一个  “  隐蔽  ”  线程负责渲染,但通常     开发人员不会处理它。     Dispatcher / Thread   关系是一对一的,即一个   Dispatcher   总是与一个线程相关联,可用于将实行分派     到该线程。   Dispatcher.CurrentDispatcher   返回当火线程的调度步调,也就是说,当在工作线程上     调用   Dispatcher.CurrentDispatcher   时,将得到该工作线程的调度步调。     Dispatchers   是按需创建的,这意味着如果访问   Dispatcher.CurrentDispatcher   而且没有与当火线     程关联的调度步调,则会创建一个。     应用步调中的调度步调数量始终小于或等于应用步调中的线程数量。     7.ContentControl      ContentPresenter   之间有什么区     别?     ContentControl   是包罗其他元素并具有   Content   属性(例如,   Button   )的控件的基类。     ContentPresenter   用于在控件模板中显示内容。     ContentControl   ,可以直接使用(它应该用作基类),而   ContentPresenter   用来显示其控件模     板中的内容部分。     个人经验(并非适用于所有情况,请自行判断):     1.   在   ControlTemplate   中使用   ContentPresenter     2.   在   ControlTemplate   之外(包括   DataTemplate   和外部模板)只管不要使用它们中的任何一     个,如果必须使用,可以   ContentPresenter   优先     3.   如果必要创建一个承载内容的自界说  “  无外观  ”  控件,而且无法通过更改现有控件的模板(这应该是     非常稀有的)得到类似的结果,则可以将   ContentControl   子类化。     8.  为什么必要依赖属性?     主要区别在于,平凡   .NET   属性的值是直接从类中的私有成员 读取,而   DependencyProperty   的值在调     用   GetValue( )   从   DependencyObject   继承的方法。     当设置依赖属性的值时,它不会存储在对象的字段中,而是存储在基类   DependencyObject   提供的键和     值字典中。 条目的键是属性的名称,值是您要设置的值。     依赖属性的优点如下:     减少内存占用     当   UI   控件的   90%   以上的属性通常保持其初始值时,为每个属性存储一个字段是一种巨大的消耗。 依赖     属性通过仅在实例中存储修改的属性来办理这些问题。 默认值在依赖属性中存储一次。     值继承     当访问依赖项属性时,将使用值解析计谋来解析该值。 如果没有设置当地值,则依赖属性会向上导航逻     辑树,直到找到一个值。 当您在根元素上设置   FontSize   时,它适用于下面的所有文本块,除非在元素     中覆盖该属性值。  更改关照     依赖属性具有内置的更改关照机制。 通过在属性元数据中注册回调,您会在属性值更改时收到关照。 这     在数据绑定中会使用到。     9.  什么是路由筛选器     路由筛选器(  Routed Event Filter  )是一种在路由变乱传播过程中对变乱进行筛选和处理的机制。它允     许开发人员通过自界说逻辑来决定是否处理特定的路由变乱。路由筛选器可用于选择性地取消或延迟路     由变乱的处理,以满足特定的需求。     1.   路由变乱传播:在  WPF  中,路由变乱可以沿着元素树的路径进行传播,从源元素向上冒泡或从根元     素向下隧道传播。在变乱传播过程中,每个元素都有机会对变乱进行处理。     2.   筛选路由变乱:通过使用路由筛选器,可以在变乱到达指定元素时,对变乱进行筛选和处理的决     策。路由筛选器提供了一种机制,让开发人员可以选择性地取消或延迟变乱的处理,或者根据条件     来决定是否实行特定的操纵。     3.   自界说逻辑:通过自界说路由筛选器的逻辑,可以根据必要处理特定的路由变乱。开发人员可以根     据变乱携带的数据、变乱源元素的属性、应用步调的状态等,来判断是否要处理该变乱。     4.   取消变乱处理:如果路由筛选器决定不处理某个路由变乱,它可以选择性地取消变乱的进一步传播     和处理。这通常通过设置变乱参数的  Handled  属性为  true  来实现,从而阻止变乱继续向上传播。     5.   延迟变乱处理:偶尔候,在某些条件下,可能必要延迟对变乱的处理。通过路由筛选器,可以将事     件标记为已处理,并在稍后的时间点再实行相应的操纵。这种方式可以提供更灵活的变乱处理机     制。     6.   多个路由筛选器:多个元素可以注册不同的路由筛选器来处理同一个路由变乱。在变乱传播过程     中,每个筛选器会按照注册的次序进行实行,直到某个筛选器决定取消或处理该变乱。     通过使用路由筛选器,开发人员可以根据特定的条件和需求,选择性地处理或延迟路由变乱的实行。这     提供了一种很好的机制,用于优化变乱处理的逻辑和流程,并允许开发人员对变乱的传播和处理过程进     行精致控制。     必要留意的是,路由筛选器通常与路由变乱(  Routed Event  )和下令(  Command  )一起使用,以提供     更灵活的变乱处理和交互体验。     10.  什么是弱变乱模式?     弱变乱模式(  Weak Event Pattern  )是一种用于办理潜伏的内存泄漏问题的变乱处理机制。在  WPF  中,     当使用变乱订阅者时,通过使用弱变乱模式,可以避免因变乱处理而导致对象无法垃圾接纳的问题。弱     变乱模式对于处理长时间运行的应用步调和大量变乱处理非常有用。     1.   内存泄漏问题:在传统的变乱处理中,通常是通过订阅者将本身的变乱处理方法注册到变乱源上。     这样的变乱订阅会形成对象之间的引用关系,导致订阅者对象无法被垃圾接纳,即使其不再必要。     2.   弱变乱模式的办理方案:弱变乱模式通过引入一个中心层来办理内存泄漏问题。这个中心层称为弱     变乱管理器(  Weak Event Manager  ),它作为变乱源和变乱订阅者之间的桥梁。     3.   弱变乱管理器的作用:弱变乱管理器负责跟踪变乱源和变乱订阅者之间的弱引用。它使用弱引用来     保存订阅者对象的引用,从而包管当订阅者对象不再被其他地方引用时,可以或许被垃圾接纳。     4.   弱引用的特点:与平凡的强引用不同,弱引用不会阻止垃圾接纳器对其引用对象进行释放。当被引     用的对象变得不可达时,垃圾接纳器会自动清理并接纳这些对象的内存。     5.   使用弱变乱模式:开发人员可以通过使用弱变乱管理器为变乱源和变乱订阅者之间建立弱引用关     系。这样,订阅者对象即使没有被其他地方引用,仍然可以或许被垃圾接纳,从而避免内存泄漏问题。     6.   实现弱变乱模式:在  WPF  中,弱变乱模式的实现通常必要创建自界说的弱变乱管理器,并应用于特     定的变乱。弱变乱管理器可以通过派生自  WeakEventManager  类来实现,并重写相应的方法以处理     变乱订阅和取消订阅的逻辑。  弱变乱模式是一种非常有用和有用的机制,用于办理因变乱处理而导致的内存泄漏问题。它允许变乱订     阅者对象在不再必要时可以或许被正确释放,从而提高应用步调的性能和稳定性。在处理长时间运行的应用     步调和大量变乱处理时,使用弱变乱模式特别重要。     11. WPF   应用步调的内存优化从哪些方面考虑?     在   WPF   应用步调开发中,进行内存优化好坏常重要的,可以提高应用步调的性能和用户体验。以下是一     些关于如何优化   WPF   应用步调内存的发起:     1.   使用  UI  虚拟化:   当显示大量数据时,使用像   VirtualizingStackPanel   这样的虚拟化面板可以确     保只有当前可见的元素才会被加载到内存中,从而减少内存占用。     2.   避免内存泄漏:   确保在不必要时释放对资源和变乱处理步调的引用,特别是在长时间运行的应用程     序中。使用弱引用来避免潜伏的内存泄漏问题。     3.   公道使用资源:   只管避免创建过多的重复资源,尤其是在样式、模板和图片等资源上。考虑将共享     的资源界说在   ResourceDictionary   中并进行公道管理。     4.   定时清理资源:   可以在得当的机会手动调用垃圾接纳器(   GC.Collect()   ),但要留意不要滥用,     由于这可能会导致性能下降。     5.   使用弱变乱处理步调:   当必要在变乱处理步调中引用外部对象时,可以使用弱变乱处理步调     (  Weak Event Pattern  )来避免潜伏的内存泄漏问题。     6.   控制窗口生命周期:   在必要展示的界面中,及时关闭不再必要的窗口,避免持续存在大量未使用的     窗口实例。     7.   缓存管理:   公道管理应用步调中的缓存,避免过多缓存数据占用过多内存空间。可以通过设置缓存     的大小、逾期计谋等方式来优化内存使用。     8.   使用绑定和下令模式:   使用绑定和下令模式可以或许更好地解耦界面元素和业务逻辑,减少变乱处理程     序的复杂性,从而提高内存使用效率。     9.   避免频仍创建对象:   在循环或频仍调用的代码块中,只管避免频仍创建临时对象,可以考虑对象池     等技术来复用对象,减少内存分配和垃圾接纳的开销。     通过以上方法和发起,可以有用地优化   WPF   应用步调的内存使用,提高应用步调的性能和稳定性。在开     发过程中,及时监测和优化内存使用情况也好坏常重要的。     12.  请解释  WPF  中的模型(  Model  )和多少体       Geometry  )的区别。     在  WPF  中,模型(  Model  )和多少体(  Geometry  )是两个相关但不同的概念。     简朴来说,多少体(  Geometry  )是描述三维对象形状的数学表现,而模型(  Model  )则包括多少体、材     质、光照等属性,用于构建最终的三维对象。     具体来说,多少体(  Geometry  )是指描述三维对象的多少形状和结构的信息,如顶点、边和面等。在     WPF  中,多少体通常由  MeshGeometry3D  或其他多少体类表现,用于界说三维对象的形状。     而模型(  Model  )是一个更大的概念,它包括了多少体、材质、光照等属性,用于完备地描述一个三维     对象。在  WPF  中,模型通常由  Model3D  类表现,可以包括一个或多个多少体、材质和其他变换等信息,     用于构建最终的可视化对象。     因此,可以说多少体是模型的一部分,而模型则是一个更加完备和综合的概念,用于描述和渲染三维对     象。这两者在  WPF  中都饰演着重要的角色,帮助开发人员构建丰富多彩的三维场景和可视化结果。     13.  谈谈你在  WPF 3D  方面的项目经验,以及你在项目中遇     到的挑战和办理方案。  在  WPF 3D  方面的项目经验可以包括利用  WPF 3D  技术开发三维可视化应用步调,展示复杂的三维场景或     模型,实现用户与三维对象的交互等。在项目中可能会碰到一些挑战,例如性能优化、复杂场景的渲     染、用户交互体验等方面。以下从以下几个方面谈变挑战和办理方案:     1.   性能优化  :在处理大型或复杂的三维场景时,可能会出现性能瓶颈。办理方案可以包括使用简化的     多少体、减少渲染复杂度、归并网格等方式来优化性能。     2.   用户交互  :实现用户与三维对象的交互是一个重要的挑战。可以通过捕获鼠标变乱、实现拖拽、旋     转、缩放等操纵来增强用户交互体验。     3.   光照和材质  :正确设置光照和材质是展现三维场景真实感的关键。挑战在于平衡光照结果和性能消     耗,可以通过调整光照参数、使用合适的材质等方式来达到理想结果。     4.   数据处理和加载  :处理大量的三维数据并将其加载到应用步调中也是一个挑战。可以采用延迟加     载、分段加载等计谋来提高数据加载效率。     5.   跨平台兼容性  :如果必要在不同平台上运行  WPF 3D  应用步调,可能碰面临跨平台兼容性的挑战。     可以考虑使用跨平台的  UI  框架或技术来办理这个问题。     通过降服这些挑战并采取相应的办理方案,开发人员可以成功地完成  WPF 3D  项目,并实现预期的功能和     结果。     14.  介绍一些在  WPF  应用步调中优化视觉结果和动画性能的     方法。     在  WPF  应用步调中,实现良好的视觉结果和动画性能是提升用户体验的重要因素之一。以下是一些优化     视觉结果和动画性能的方法:     1.   使用硬件加速  :     WPF  支持硬件加速,可以通过启用   CacheMode   、   BitmapCache   或     RenderOptions.BitmapScalingMode   等属性来利用  GPU  进行渲染,从而提高性能。     使用   UIElement.CacheMode   属性对频仍更新但不常常改变的元素进行缓存,减少渲染开销。     2.   避免过度绘制  :     仅在必要时才进行绘制操纵,避免不必要的界面更新。     使用透明度、裁剪和可见性等属性来限制元素的可见地区,减少绘制地区。     3.   优化布局  :     公道使用布局容器和布局属性,减少布局计算的复杂度。     避免过度嵌套和布局循环,优化布局结构以提高性能。     4.   使用合适的动画类型  :     对于简朴的动画结果,可以使用   DoubleAnimation   、   ColorAnimation   等基本动画类型。     对于复杂的动画结果,可以考虑使用   Storyboard   、   KeyFrameAnimation   等更高级的动画类     型。     5.   控制动画速率和持续时间  :     避免过慢或过快的动画速率,以保持平滑的动画结果。     控制动画的持续时间,避免长时间运行的动画导致性能问题。     6.   使用可视化结果(  Visual Effects    :     WPF  提供了一些内置的可视化结果,如阴影、含糊、投影等,可以通过   Effect   属性添加到元     素上。     使用可视化结果时要留意其性能开销,避免过度使用或在不必要的情况下启用结果。     7.   异步加载资源  :     在启动应用步调时,可以异步加载资源文件(如图片、样式等),以提高应用步调的响应速     度。     8.   使用缓存  :  使用缓存可以减少耗时的计算和渲染操纵,提高性能。例如,可以使用   BitmapCache   对复杂     的元素进行缓存。     9.   避免频仍的界面更新  :     控制界面的更新频率,避免在短时间内频仍地更新大量元素,可以使用计时器或其他方式控制     更新频率。     15.  如何检测  WPF  应用步调的性能瓶颈,并进行性能分析和  优化?     检测  WPF  应用步调的性能瓶颈并进行性能分析和优化是提升应用步调性能的重要步骤。以下是一些方法     和工具可以帮助你完成这个使命:     1.   使用性能监视器  :     WPF  提供了一些内置的性能监视器,如   Performance Profiling Tools   和   Perforator   ,     可以用于及时监视应用步调的性能指标,如  FPS  (帧率)、  CPU  使用率、内存占用等。     使用性能监视器可以帮助你快速定位性能问题,并了解哪些部分对性能产生了影响。     2.   使用性能分析工具  :     使用专业的性能分析工具,如  Visual Studio  的   Performance Profiler   、  ANTS     Performance Profiler  等,可以深入分析应用步调的性能问题。     这些工具可以提供详细的性能报告、调用栈跟踪、资源使用情况等,帮助你找到性能瓶颈所     在。     3.   查抄  UI  线程壅闭  :     查抄是否有耗时的操纵在  UI  线程上实行,导致界面卡顿或不响应。     使用异步操纵、后台线程或优化算法和操纵,将耗时的操纵从  UI  线程中移出,以提高响应性     能。     4.   分析布局和渲染性能  :     查抄布局和渲染操纵是否过于复杂,导致性能下降。     使用   Snoop   等工具可以及时检察  WPF  元素的布局、渲染和绘制信息,帮助你优化布局结构和     减少不必要的渲染操纵。     5.   优化数据绑定和数据加载  :     查抄数据绑定是否过于频仍或复杂,导致性能下降。     使用延迟加载、虚拟化和分页等技术,优化大量数据的加载和显示。     6.   优化资源使用  :     查抄应用步调中是否存在内存泄漏或资源占用过高的情况。     使用内存分析工具,如   .NET Memory Profiler   、   dotMemory   等,检测和办理内存泄漏问     题。     7.   使用性能优化本领  :     使用硬件加速、合适的动画类型、缓存等本领来提升视觉结果和动画性能,如前面提到的方     法。     8.   进行基准测试  :     使用基准测试工具和技术对不同的优化方案进行比力和评估。     通过比力不同优化方案的性能指标,选择最佳的优化计谋。     相关口试题
  redis安装说明书 http://t.csdnimg.cn/iM260
  单体并发瓶颈 redis sqlsever mysql多少 http://t.csdnimg.cn/DTXIh

  Redis高频口试题http://t.csdnimg.cn/FDOnv

  数据库SqlServer笔试题 数据库SqlServer笔试题-CSDN博客

  SQL 大数据查询如何进行优化?sqlserver和oracle整理_sqlerver快速】遍历大数据并计算-CSDN博客
  WPF 2024 金九银十 最新 高级 架构 口试题 C# WPF 2024 金九银十 最新 高级 架构 口试题 C#-CSDN博客


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

万万哇

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表