C#开发笔记
02、入门
03、进阶
04、架构
01、知识概念
01、基础语法
02、面向对象
03、集合、异常、泛型、LINQ、委托、EF
04、多线程
05、WPF
06、ASP.NET MVC
07、ASP.NET Core
08、ADO.NET、XML、HTTP、AJAX、WebService
09、常见的算法
10、数据库概念知识
11、数据库SQL查询(附建表语句)
00、高阶
05、U3D
01、基础
001、问的比较多的问题
06、前端开发
001、CSS基础
本文档使用 MrDoc 发布
-
+
首页
05、WPF
#### 1.WPF 由哪两部分组成? **wpf 由两个主要部分 组成:引擎和编程框架。** **1 引擎。wpf 引擎是基于窗体的应用程序 图形 视频 音频和文档提供了一个单一的运行时库。重要的是 WPF 基于矢量的呈现引擎使应用程序可以灵活地利用高 DPI 监视器,支持图形的硬件加速。** **2 框架。WPF 框架为媒体 用户界面设计和文档提供大量的解决方案。wpf 的设计考虑了可扩展性,使开发人员可以完全在 WPF 引擎的基础上创建自己的控件,也可以通过对现有 WPF 控件进行再分类来创建自己的控件。** #### 2.什么是 WPF? **WPF 英文全称是 Windows Presentation Foundation,中文为 Windows 表现层基础。是微软最初在.NET Framework3.5 平台推出的一个图形平台。** #### 3. Silverlight 和 WPF 的异同? **它们的运行方式是不同的:** **1 silverlight 是基于浏览器插件的,在浏览器中运行。** **2 WPF 可以编写 Web 程序或者桌面应用程序,可以直接编译为独立运行的 exe 文件。** **实现功能是不同的:** **1 WPF 支持直接在 XAML 中绑定触发来触发动画,而 silverlight 就只能通过托管代码或者 javascript 来进行。** **2 WPF 直接支持 3D 效果和 3D 镜头变换,但是 silverlight 就不支持。** **它们也有相似的地方:** **silverlight 原名 WPF/E 就是 WPF Everywhere 是 WPF 的一个子集。因此它们在很多语法实现上非常类似。** #### 4.如何理解 WPF 体系结构? **WPF 使用多层架构,类似于三层结构,最顶层部分为托管代码 API,此层用于为开发人员编写 WPF 应用程序提供较高层次的服务,基于 C#托管代码编写。转换.NET 代码到 DirectX 的工作由中间层 milcore.dll 实现。** **中间层 milcore 是用非托管代码实现,因为它需要与 DirectX 紧密集成,对性能敏感,就是消耗的资源比较多,对性能影响较大。** #### 5. 在 WPF 中 Binding 的作用及实现语法? **典型的 Binding 具有四个重要组成部分:Binding 目标对象(binding target object) 目标对象属性(target property) Binding 数据源(binding source) Path(用于指明要从数据源中取得的值,就是我们通常写的属性名称)。** #### 6.什么是 XML 扩展 XAML?有何优点? **1 XAML 是 eXtensible Application Markup Language 的英文缩写,相应于中文称为可扩展应用程序标记语言,它是微软公司为构建应用程序用户界面而创建的一种新的描述性语言。** **2 XAML 是 XML 语言的一个衍生物,它的语法与 XML 语言完全一致,它的功能就是专门用来设计和实现程序的 UI。** **3 XAML 一个很大的优点就是由于 WPF 支持 WEB 开发,那么 WEB 开发和桌面开发的转换是很简单,修改的地方很短,同时 UI 与逻辑完全分离,所以逻辑代码也几乎不用改动。** #### 7. 解释什么是依赖属性,它和以前的属性有什么不同?为什么在 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 等,打造出更灵活的使用方法。** #### 8. WPF 中什么是样式? **首先明白 WPF 中样式属于资源中重要的一种。** **同时样式也是属性值的集合,能被应用到一个合适的元素中,或者说能将一组属性应用到多个元素。** **WPF 中样式可以设置任何依赖属性。** **WPF 中样式也支持触发器,通过属性的改变,触发一组活动,包括改变某个控件的样式。** **WPF 中元素只能使用一个样式。** **样式有继承的特性,样式可以继承样式。** #### 9. WPF 中什么是模板 ? **WPF 中模板是用于定义或重定义控件结构,或者说对象的外观。** **WPF 中模板有两类,一个是控件模板(ControlTemplate) 另一个是数据模板(DataTemplate),它们都派生自 FrameworkTemplate 抽象类。** **总共有三大模板 ControlTemplate,ItemsPanelTemplate,DataTemplate。** **1 ControlTemplate 主要用途是更改控件的外观。它有两个重要属性:VisualTree(视觉树)内容属性和 Triggers 触发器,对于触发器可以不用过多考虑,触发器可有可无。VisualTree 就是呈现我们所画的控件。Triggers 可以对我们的视觉树上的元素进行一些变化。** **2 ItemsPanelTemplate 是个特殊的空间模板,主要用来标明多条目控件如何显示它所包含的多项数据。也可以说是指定用于项的额布局的面板。多用于多个内容控件的目标。多为 Panel 属性或者 Panel 结尾的属性。** **3 DataTemplate 主要用于数据的呈现。也被称为显示绑定数据对象的模板。** #### 10. 绑定(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 另一种是 BindingOperations.SetBinding(currentFolder,TextBlock.TextProperty,binding);** **BindingOperations.SetBinding 的原型是** **public static BindingExpressionBase SetBinding(DependencyObject target,DependencyProperty dp,BindingBase binding)** **3 清除 Binding:** **BindingOperations.ClearBinding(currentFolder,TextBlock.TextProperty);**[//删除 currentFolder 上的 TextBlock.TextProperty 绑定](//xn--currentFolderTextBlock-xy68a461dy41skgxg.xn--TextProperty-2r1w8917a) **BindingOperations.ClearAllBindings(currentFolder);//删除 currentFolder 上的所有绑定。** **直接对 Dependency Property 赋值也可以解除 binding,不过只对单向 binding 有效。** #### 11. 解释这几个类的作用及关系: Visual, UIElement, FrameworkElement, Control 。 **它们四个的关系:从 System.Windows.Controls 命名空间中看,依次的继承关系是:** **Visual 继承 UIElement,UIElement 继承 FrameworkElement,FrameworkElement 继承 Control。** **1 Visual 主要作用是为 WPF 提供 2D 呈现支持,主要包括输出显示,坐标转换,区域剪切等。** **2 UIElement 的主要作用是构建 WPF 元素和基本呈现特征的基类。例如其中定义很多与输入和焦点有关的特性,例如键盘事件,鼠标,还有一些与 WPF 事件模型有关的 API。** **3 FrameworkElement 的主要作用是为定义的 WPF 元素添加一些功能。例如,布局定义 逻辑树 对象生命周期事件 支持数据绑定和动态资源引用 支持样式和动画。** **4 Control 的主要作用是为自定义应用程序控件提供基础。因为它是创建自定义应用程序控件的基类,作用就是可以重写 Control 类所提供的属性,方法,事件等,为自定义控件添加自定义逻辑。构建 WPF 应用程序页面的 Window 类也派生自它。** #### 12. 视觉树 VS 逻辑树? **1 逻辑树是视觉树的子集,也就是视觉树基本上是逻辑树的一种扩展。** **2 WPF 通过逻辑树来解决依赖项属性继承和资源的问题,使用视觉树来处理渲染,事件路由,资源定位等问题。** **3 逻辑树可以认为是 XAML 所见的,而视觉树包含了 XAML 元素内部的结构。** **4 逻辑树的查找可以通过 LogicalTreeHelper 辅助类,视觉树的查找可以通过 VisualTreeHelper 辅助类,其中需要注意的是对 ContentElement 元素的查找,无法直接通过 VisualTreeHelper 进行查找,ContentElement 元素并不继承 Visual,而 ContentElement 元素的使用时需要一个 ContentElement 载体 FrameworkContentElement。** **六 属性变更通知(INotifyPropertyChanged 和 ObservableCollection)** **1 INotifyPropertyChanged 向客户端发出某一属性值更改的通知。** **2 ObservableCollection 类,它是实现 INotifyCollectionChanged 接口的数据集合的内置实现。表示一个动态数据集合,在添加项、移除项或刷新整个列表时,此集合将提供通知** #### 13. 解释一下 ResourceDictionary ? **提供包含元素和 WPF 应用程序的其他元素使用的 WPF 资源的一个哈希表/字典实现。** **有利于项目中资源共享。** #### 14. 路由事件的哪三种方式/策略(冒泡 直接 隧道)? **WPF 中的路由事件是沿着 VisualTree 传递的,作用是用来调用应用程序的元素树上的各种监听器上的处理程序。** **(1)冒泡,这种事件处理方式是从源元素向上级流过去,直到到达根节点即顶层节点,一般为最外层的控件。** **(2)直接,这种处理方式是在源上处理,主要用在源元素上处理。通常 setter 和 trigger 中有所体现,我个人认为 VisualState 可视状态可能也是直接事件处理,也是依赖属性的状态改变。和 Trigger 有一定的重复,但是 VisualState 是通过生硬的动画间接实现依赖属性的改变。** **(3)隧道,又称作 Preview 事件,和冒泡事件处理方式相反的。元素树的根位置调用事件处理程序,依次向下直到源元素位置。** **隧道事件和冒泡事件一般成对出现。同一事件,执行时首先是隧道事件,然后是冒泡事件。** #### 15. 解释 Routed Events(路由事件) 与 Commands(命令)? **Event 和 Command 是程序内部通信基础,Routed Events 能够发起多重控件,并且能有序和用户沟通。** **Commands 是.NET Framework 提供的核心构架,来激活和去除高级别任务。** **由此衍生的 Animation 是 events 的更进一步。让你能够以友好互动的方式使用 Event 架构,来使用多重控件。**
个人天使
2025年2月12日 17:24
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码