收藏 分销(赏)

WPF经典知识总结.doc

上传人:仙人****88 文档编号:6998745 上传时间:2024-12-24 格式:DOC 页数:134 大小:2.28MB 下载积分:10 金币
下载 相关 举报
WPF经典知识总结.doc_第1页
第1页 / 共134页
WPF经典知识总结.doc_第2页
第2页 / 共134页


点击查看更多>>
资源描述
WPF 基础知识 Windows Presentation Foundation (WPF) 是下一代显示系统,用于生成能带给用户震撼视觉体验的 Windows 客户端应用程序。使用 WPF,您可以创建广泛的独立应用程序以及浏览器承载的应用程 序。 WPF 的核心是一个与分辨率无关并且基于向量的呈现引擎,旨在利用现代图形硬件的优势。WPF 通过一整套应用程序开发功能扩展了这个核心,这些功能包括 可扩展应用程序标记语言 (XAML)、 控件、数据绑定、布局、二维和三维图形、动画、样式、模板、文档、媒体、文本和版式。WPF 包含在 Microsoft .NET Framework 中,使您能够生成融入了 .NET Framework 类库的其他元素的应用 程序。 为了支持某些更强大的 WPF 功能并简化编程体验,WPF 包括了更多编程构造,这些编程构造增强 了属性和事件:依赖项属性和路由事件。有关依赖项属性的更多信息,请参见依赖项属性概述。 有关路由事件的更多信息,请参见路由事件概述。 这种外观和行为的分离具有以下优点: 1 降低了开发和维护成本,因为外观特定的标记并没有与行为特定的代码紧密耦合。 2 开发效率更高,因为设计人员可以在开发人员实现应用程序行为的同时实现应用程序的外观。 3 可以使用多种设计工具实现和共享 XAML 标记,以满足应用程序开发参与者的要求:Microsoft Expression Blend 提供了适合设计人员的体验,而 Visual Studio 2005 针对开发人员。 4 WPF 应用程序的全球化和本地化大大简化(请参见 WPF 全球化和本地化概述)。 在运行时,WPF 将标记中定义的元素和属性转换为 WPF 类的实例。例如,Window 元素被转换为 Window 类的实 例,该类的 Title 属性 (Property) 是 Title 属性 (Attribute) 的值。 注意在 constructor 中 Call:  InitializeComponent(); x:Class 属性用于将标记与代码隐藏类相关联。InitializeComponent 是从代码隐藏类的构造函数中调用的,用于将标记中定义的 UI 与代码隐藏类相合并。((生成应用程序时将为您生成 InitializeComponent,因此您不需要手动实现它。)x:Class 和 InitializeComponent 的组合确保您的实现无论何时创建都能得到正确的初始化。 .NET Framework、System.Windows、标记和代码隐藏构成了 WPF 应用程序开发体验的基础 窗口: WPF 对话框:MessageBox、OpenFileDialog、SaveFileDialog 和 PrintDialog。 WPF 提供了以下两个选项作为替代导航宿主: · ·  Frame,用于承载页面或窗口中可导航内容的孤岛。 NavigationWindow,用于承载整个窗口中的可导航内容。 启动:StartupUri="MainWindow.xaml" />此标记是独立应用程序的应用程序定义,并指示 WPF 创建一个在应用程 序启动时自动打开 MainWindow 的 Application 对象。 WPF 控件一览 此处列出了内置的 WPF 控件。 · · · · · · · · · · ·  按钮:Button 和 RepeatButton。 对话框:OpenFileDialog、PrintDialog 和 SaveFileDialog。 数字墨迹:InkCanvas 和 InkPresenter。 文档:DocumentViewer、FlowDocumentPageViewer、FlowDocumentReader、FlowDocumentScrollViewer 和 StickyNoteControl。 输入:TextBox、RichTextBox 和 PasswordBox。 布局:Border、BulletDecorator、Canvas、DockPanel、Expander、Grid、GridView、GridSplitter、 GroupBox、Panel、ResizeGrip、Separator、ScrollBar、ScrollViewer、StackPanel、Thumb、Viewbox、 VirtualizingStackPanel、Window 和 WrapPanel。 媒体:Image、MediaElement 和 SoundPlayerAction。 菜单:ContextMenu、Menu 和 ToolBar。 导航:Frame、Hyperlink、Page、NavigationWindow 和 TabControl。 选择:CheckBox、ComboBox、ListBox、TreeView、RadioButton 和 Slider。 用户信息:AccessText、Label、Popup、ProgressBar、StatusBar、TextBlock 和 ToolTip。 输入和命令 :控件通常检测和响应用户输入。WPF 输入系统使用直接事件和路由事件来支持文本输入、焦点管理和鼠标定位。有 关更多信息,请参见输入概述。 布局系统的基础是相对定位,它提高了适应窗口和显示条件变化的能力。此外,布局系统还管理控件之间的协商以确定布局。协 商过程分为两步:第一步,控件向父控件通知它所需的位置和大小;第二步,父控件通知该控件它可以具有多大空间 · · · · · ·  Canvas:子控件提供其自己的布局。 DockPanel:子控件与面板的边缘对齐。 Grid:子控件按行和列放置。 StackPanel:子控件垂直或水平堆叠。 VirtualizingStackPanel:子控件被虚拟化,并沿水平或垂直方向排成一行。 WrapPanel:子控件按从左到右的顺序放置,如果当前行中的控件数多于该空间所允许的控件数,则换至下一行 由父控件实现的、供子控件使用的属性是一种 WPF 构造,称为“附加属性” 为了简化应用程序开发,WPF 提供了一个数据绑定引擎以自动执行这些步骤。数据绑定引擎的核心单元是 Binding 类,它 的任务是将控件(绑定目标)绑定到数据对象(绑定源)。下图说明了这种关系。 WPF 数据绑定引擎还提供了其他支持,包括验证、排序、筛选和分组。此外,当标准 WPF 控件显示的 UI 不合适时,数据绑定 还支持使用数据模板为绑定的数据创建自定义 UI。 WPF 引进了一组广泛的、可伸缩且灵活的图形功能,它们具有以下优点: · · · ·  与分辨率和设备无关的图形。WPF 图形系统的基本度量单位是与设备无关的像素,它等于一英寸的 1/96,而不管实际的 屏幕分辨率是多少,为与分辨率和设备无关的呈现提供了基础。每个与设备无关的像素都会自动缩放,以符合呈现该像素的 系统上的每英寸点数 (dpi) 设置。 更高的精度。WPF 坐标系是使用双精度浮点数字测量的,而不是使用单精度浮点数字。转换值和不透明度值也以双精度表 示。WPF 还支持广泛的颜色域 (scRGB),并为管理来自不同颜色空间的输入提供完整的支持。 高级图形和动画支持。WPF 通过为您管理动画场景简化了图形编程;您不需要担心场景处理、呈现循环和双线性内插算法。 此外,WPF 还提供了命中测试支持和全面的 alpha 合成支持。 硬件加速。WPF 图形系统利用了图形硬件的优势来最小化 CPU 使用率。 Path 对象可用于绘制闭合或开放形状、多线形状,甚至曲线形状。 Geometry 对象可用于对二维图形数据进行剪裁、命中测试和呈现。 WPF 二维功能的子集包括渐变、位图、绘图、视频绘制、旋转、缩放和扭曲等视觉效果。这些都可以使用画笔完成;下图演示了某 些示例。 WPF 动画支持可以使控件变大、旋转、调节和淡化,以产生有趣的页面过渡和更多效果。您可以对大多数 WPF 类(甚至自定义类) 进行动画处理。下图演示了一个简单的活动动画。 为了加快高质量的文本呈现,WPF 提供了以下功能: · · · · ·  OpenType 字体支持。 ClearType 增强。 利用硬件加速优势的高性能。 文本与媒体、图形和动画的集成。 国际字体支持和回退机制。 WPF 本身支持使用三种类型的文档:流文档、固定文档和 XML 纸张规范 (XPS) 文档。WPF 还提供了用于创建、查看、管理、批注、 打包和打印文档的服务。 XML 纸张规范 (XPS) 文档建立在 WPF 的固定文档基础上。XPS 文档使用基于 XML 的架构进行描述,该架构本质上就是电子纸的 分页表示。XPS 是一个开放的、跨平台的文档格式,旨在简化分页文档的创建、共享、打印和存档。XPS 技术的重要功能包括: 打包 WPF System.IO.Packaging API 允许您的应用程序将数据、内容和资源组织成一个可移植、易于分发和访问的 ZIP 文档。可以包 括数字签名以对程序包中包含的项目进行身份验证,并确定签名的项目未被篡改或修改。您还可以使用权限管理对软件包进行加密, 以限制对受保护信息的访问。 打印 .NET Framework 包括一个打印子系统,WPF 通过支持更好的打印系统控制对其进行了增强。打印增强功能包括: · · · ·  实时安装远程打印服务器和队列。 动态发现打印机功能。 动态设置打印机选项。 打印作业重新路由和重新排列优先级次序。 内容模型 大多数 WPF 控件的主要目的都是为了显示内容。在 WPF 中,构成控件内容的项目类型和数量被称为控件的“内容模型”。有些控件 只能包含一个项目和内容类型;例如,TextBox 的内容为字符串值,该值被分配给 Text 属性。 触发器 尽管 XAML 标记的主要目的是实现应用程序的外观,但您仍然可以使用 XAML 实现应用程序行为的某些方面。一个示例就是使用触 发器根据用户交互更改应用程序的外观。有关更多信息,请参见样式设置和模板化中的“触发器”。 数据模板 控件模板使您可以指定控件的外观,数据模板则允许您指定控件内容的外观。数据模板通常用于改进绑定数据的显示方式。下图演示 ListBox 的默认外观,它被绑定到一个 Task 对象集合,该集合中的每个任务都有一个名称、说明和优先级。 开发人员和设计人员使用样式可以对其产品的特定外观进行标准化。WPF 提供了一个强大的样式模型,其基础是 Style 元素。下面 的示例创建一个样式,该样式将窗口中的每个 Button 的背景色设置为 Orange。 资源 一个应用程序中的各控件应共享相同的外观,包括从字体和背景色到控件模板、数据模板和样式的所有方面。您可以使用 WPF 对 用 户界面 (UI) 资源的支持将这些资源封装到一个位置,以便于重复使用。 资源范围有多种,包括下面按解析顺序列出的范围: 1. 2. 3.  单个控件(使用继承的 FrameworkElement..::.Resources 属性)。 Window 或 Page(也使用继承的 FrameworkElement..::.Resources 属性)。 Application(使用 Application..::.Resources 属性)。 范围的多样性使您可以灵活选择定义和共享资源的方式。 作为将资源与特定范围直接关联的一个备用方法,您可以使用单独的 ResourceDictionary(可以在应用程序的其他部分引用) 打包一个或多个资源。例如,下面的示例在资源字典中定义默认背景色。 由于 WPF 的外观由模板定义,因此 WPF 为每个已知 Windows 主题包括了一个模板, WPF 中的主题和外观都可以使用资源字典非常轻松地进行定义 自定义控件 尽管 WPF 提供了大量自定义项支持,您仍然可能会遇到现有 WPF 控件不能满足应用程序或用户需求的情况。在以下情况下可能会 出现这种情形: · · · · ·  无法通过自定义现有 WPF 实现的外观来创建您需要的 UI。 现有 WPF 实现不支持(或很难支持)您需要的行为。 用户控件模型。从 UserControl 派生的自定义控件,由其他一个或多个控件组成。 控制模型。从 Control 派生的自定义控件,用于生成使用模板将其行为和外观相分离的实现,与多数 WPF 控件非常相似。 从 Control 派生使您可以比用户控件更自由地创建自定义 UI,但可能需要投入更多精力。 框架元素模型。从 FrameworkElement 派生的自定义控件,其外观由自定义呈现逻辑(而不是模板)定义。 WPF 是一种全面的显示技术,用于生成多种类型的具有视觉震撼力的客户端应用程序。本文介绍了 WPF 的关键功能。 下一步为生成 WPF 应用程序! 将数据连接到控件 在此步骤中,您将编写代码来检索从 HomePage 上的人员列表中选定的当前项,并在实例化过程中将对该当前项的引用传递给 ExpenseReportPage 的构造函数。ExpenseReportPage 使用已传入的项设置数据上下文,这就是 ExpenseReportPage.xaml 中定义的控件要绑定的内容。 WPF 3.5 定义了一个新的 XML 命名空间 WPF 3.5 生成应用程序时,可以使用此命名空间或在 WPF 3.0 中定义的命名空间。 应用程序 应用程序模型已得到下列改进: · · · · ·  提供全面的外接程序支持,可以支持独立应用程序和 XAML 浏览器应用程序 (XBAP) 中的非可视化和可视化外接程序。 XBAP 现在可在 Firefox 中运行。 可以在 XBAP 与同一源站点中的 Web 应用程序之间共享 Cookie。 为提高工作效率而改进的 XAML IntelliSense 体验。 更广泛的本地化支持。 WPF 中的可视化和非可视化外接程序 可扩展的应用程序可以公开它的功能,从而允许其他应用程序与该应用程序集成并扩展其功能。外接程序是应用程序公 开其扩展性的一种常见方式。在 .NET Framework 中,外接程序通常是作为动态链接库 (.dll) 打包的程序集。外接程 序由宿主应用程序在运行时动态加载,以便使用和扩展由宿主公开的服务。宿主和外接程序通过已知协定进行交互,该 协定通常是由宿主应用程序发布的公共接口。 对 XBAP 的 Firefox 支持 WPF 3.5 的一个插件使得 XBAP 能够从 Firefox 2.0 中运行,WPF 3.0 中没有这个功能。其中的重要功能包括: · ·  如果 Firefox 2.0 是默认浏览器,XBAP 将使用这一配置。也就是说,如果 Firefox 2.0 是默认浏览器,XBAP 将不使 用 Internet Explorer。 运行 Internet Explorer 的 XBAP 所具备的安全功能对于在 Firefox 2.0 中运行的 XBAP 同样可用,其中包括部分信 任的安全沙盒。由浏览器提供的其他安全功能因浏览器而异。 Cookie 独立 WPF 应用程序和 XBAP 可以创建、获取和删除会话和持久性 Cookie。在 WPF 3.5 中,可以在 XBAP、Web 服务器和同一源站点中的 HTML 文件之间共享持久性 Cookie。 图形 现在,您可以将通过 HTTP 下载的图像缓存到本地 Microsoft Internet Explorer 临时文件缓存中,这样,对该图像 的后续请求将来自本地磁盘而非 Internet。根据图像大小的不同,这一功能可以显著改善网络性能。为支持此功能, 添加了下面的成员: · · · ·  BitmapImage..::.UriCachePolicy BitmapDecoder..::.Create(Uri, BitmapCreateOptions, BitmapCacheOption, RequestCachePolicy) BitmapFrame..::.Create(Uri, RequestCachePolicy) BitmapFrame..::.Create(Uri, BitmapCreateOptions, BitmapCacheOption, RequestCachePolicy) 添加了 BitmapSource..::.DecodeFailed 事件,用以在图像由于文件头损坏而加载失败时向用户发出通知。 数据绑定 数据绑定已得到下列改进: · · ·  新的调试机制降低了调试数据绑定的难度。 数据模型通过提供对 IDataErrorInfo 接口的支持,可以实现对业务层的验证。另外,验证模型现在还支持使用属性语法 来设置验证规则。 数据绑定模型现在支持 LINQ 和 XLINQ。 文档 FlowDocumentPageViewer、FlowDocumentScrollViewer 和 FlowDocumentReader 各有一个名为 Selection 的 新的公共属性。该属性获取表示文档中选定内容的 TextSelection。 应用程序是否具有特定于语言或非特定于语言的资源。例如,您是否为 Application、Page 和 Resource 类型指定了 UICulture 项目属性或可本地化的元数据? 本主题包括下列各节。 · · · · · · · · · · ·  System.Object System.Threading.DispatcherObject System.Windows.DependencyObject System.Windows.Media.Visual System.Windows.UIElement System.Windows.FrameworkElement System.Windows.Controls.Control 摘要 相关主题 WPF 主要编程模型是通过托管代码公开的。在 WPF 的早期设计阶段,曾有过大量关于如何界定系统的托管组件和非托 管组件的争论。CLR 提供一系列的功能,可以令开发效率更高并且更加可靠(包括内存管理、错误处理和通用类型系统 等),但这是需要付出代价的。 下图说明了 WPF 的主要组件。关系图的红色部分(PresentationFramework、PresentationCore 和 milcore)是 WPF 的主要代码部分。在这些组件中,只有一个是非托管组件 – milcore。milcore 是以非托管代码编写的,目的是 实现与 DirectX 的紧密集成。WPF 中的所有显示是通过 DirectX 引擎完成的, · ·  System.Threading.DispatcherObject · · ·  WPF 中的大多数对象是从 DispatcherObject 派生的,这提供了用于处理并发和线程的基本构造。WPF 基于调度程序实 现的消息系统。其工作方式与常见的 Win32 消息泵非常类似;事实上,WPF 调度程序使用 User32 消息执行跨线程调用。 System.Windows.DependencyObject 生成 WPF 时使用的主要体系结构原理之一是首选属性而不是方法或事件。属性是声明性的,使您更方便地指定意图而 不是操作。它还支持模型驱动或数据驱动的系统,以显示用户界面内容。这种理念的预期效果是创建您可以绑定到的更 多属性,从而更好地控制应用程序的行为。 WPF 提供一个丰富的属性系统,该属性系统是从 DependencyObject 类型派生的。该属性系统实际是一个“依赖”属性系 统,因为它会跟踪属性表达式之间的依赖关系,并在依赖关系更改时自动重新验证属性值。例如,如果您具有一个会继承的 属性(如 FontSize),当继承该值的元素的父级发生属性更改时,会自动更新系统。 WPF 属性系统的基础是属性表达式的概念。 属性系统还提供属性值的稀疏存储 属性系统的最后一个新功能是附加属性的概念 Visual 实际上是到 WPF 组合系统的入口点 可视对象和绘制指令的整个树都要进行缓存 System.Windows.UIElement UIElement 定义核心子系统,包括 Layout、Input 和 Event。 输入是作为内核模式设备驱动程序上的信号发出的,并通过涉及 Windows 内核和 User32 的复杂进程路由到正确的进程 和线程。与输入相对应的 User32 消息一旦路由到 WPF,它就会转换为 WPF 原始输入消息,并发送到调度程序。WPF 允许原始输入事件转换为多个实际事件,允许在保证传递到位的情况下在较低的系统级别实现类似“MouseEnter”的功能。 每个输入事件至少会转换为两个事件 – “预览”事件和实际事件。WPF 中的所有事件都具有通过元素树路由的概念。如 果事件从目标向上遍历树直到根,则被称为“冒泡”,如果从根开始向下遍历到目标,它们被称为“隧道”。输入预览事件 隧道,使树中的任何元素都有机会筛选事件或对事件采取操作。然后,常规(非预览)事件将从目标向上冒泡到根。 为了进一步深化此功能,UIElement 还引入了 CommandBindings 的概念。WPF 命令系统允许开发人员以命令终结点(一种用于 实现 ICommand 的功能)的方式定义功能 FrameworkElement 引入的主要策略是关于应用程序布局。FrameworkElement 在 UIElement 引入的基本布局协定之上生成, 并增加了布局“插槽”的概念,使布局制作者可以方便地拥有一组面向属性的一致的布局语义。HorizontalAlignment、 VerticalAlignment、MinWidth 和 Margin 等属性使得从 FrameworkElement 派生的所有组件在布局容器内具有一致的行为。 FrameworkElement 引入的两个最关键的内容是数据绑定和样式。WPF 中数据绑定的最值得关注的功能之一是引入了数据模板 样式实际上是轻量级的数据绑定 System.Windows.Controls.Control 控件的最重要的功能是模板化。 数据模型(属性)、交互模型(命令和事件)及显示模型(模板)之间的划分,使用户可以对控件的外观和行为进行完全自定义。最 常见的控件数据模型是内容模型 您就能够创建更丰富的应用程序,这些应用程序在根本上会将数据视为应用程序的核心驱动力。 可扩展应用程序标记语言 (XAML) 语言支持,以便您能够在可扩展应用程序标记语言 (XAML) 标记中创建大部分应用程序 UI。 XAML 简化了为 .NET Framework 编程模型创建 UI 的过程。您可以在声明性 XAML 标记中创建可见的 UI 元素,然后使用代码隐 藏文件(通过分部类定义与标记相连接)将 UI 定义与运行时逻辑相分离。 与其他大多数标记语言不同,XAML 直接呈现托管对象的实例化。这种常规设计原则简化了使用 XAML 创建的对象的代码和调试访 问。 XAML 有一组规则,这些规则将对象元素映射为类或结构,将属性 (Attribute) 映射为属性 (Property) 或事件,并将 XML 命名空 间映射为 CLR 命名空间。XAML 元素映射为被引用程序集中定义的 Microsoft .NET 类型,而属性 (Attribute) 则映射为这些类型 的成员。 每个实例都是通过调用基础类或结构的默认构造函数并对结果进行存储而创建的。为了可用作 XAML 中的对象元素,该类或结构必须 公开一个公共的默认(无参数)构造函数。 <Button.Content> This is a button </Button.Content> XAML 的属性 (Property) 元素语法表示了与标记的基本 XML 解释之间的巨大背离。对于 XML,<类型名称.属性> 代表了另一个 元素,该元素仅表示一个子元素,而与 TypeName 父级之间没有必然的隐含关系。在 XAML 中,<类型名称.Property> 直接表示 Property 是类型名称 的属性(由属性元素内容设置),而绝不会是一个名称相似(碰巧名称中有一个点)但却截然不同的元素。 引用值和标记扩展 标记扩展是一个 XAML 概念。在属性语法中,花括号({ 和 })表示标记扩展用法。此用法指示 XAML 处理不要像通常那样将属性 值视为一个字符串或者可直接转换为文本字符串的值。 WPF 应用程序编程中最常用的标记扩展是 Binding(用于数据绑定表达式)以及资源引用 StaticResource 和 DynamicResource。 通过使用标记扩展,即使属性 (Property) 不支持对直接对象实例化使用属性 (Attribute) 语法,也可以使用属性 (Attribute) 语法 为属性 (Property) 提供引用值 资源只是 WPF 或 XAML 启用的一种标记扩展用法 Typeconverter 的属性值: 但是很多 WPF 类型或这些类型的成员扩展了基本字符串属性处理行为,因此更复杂的对象类型的实例可 通过字符串指定为属性值 该对象元素的任何 XML 子元素都被当作包含在一个表示该内容属性的隐式属性元素标记中来处理。在标记中,可以省略 XAML 内容 属性的属性元素语法。在标记中指定的任何子元素都将成为 XAML 内容属性的值。 XAML 内容属性值必须连续 XAML 处理器和序列化程序将忽略或删除所有无意义的空白,并规范化任何有意义的空白。只有当您在 XAML 内容属性中指定字符 串时,才会体现此行为的重要性。简言之,XAML 将空格、换行符和制表符转化为空格,如果它们出现在一个连续字符串的任一端, 则保留一个空格。 一个 XAML 文件只能有一个根元素,这样才能成为格式正确的 XML 文件和有效的 XAML 文件。通常,应选择属于应用程序模型一 部分的元素(例如,为页面选择 Window 或 Page,为外部字典选择 ResourceDictionary,或为应用程序定义根选择 Application)。下面的示例演示 WPF 页面的典型 XAML 文件的根元素,其中的根元素为 Page。 代码隐藏、事件处理程序和分部类要求 1 分部类必须派生自用作根元素的类的类型。您可以在代码隐藏的分部类定义中将派生留空,但编译的结果会假定页根作为 分部类的基类,即使在没有指定的情况下也是如此(因为分部类的标记部分确实将页根指定为基)。 2 编写的事件处理程序必须是 x:Class 标识的命名空间中的分部类所定义的实例方法。您不能限定事件处理程序的名称来 指示 XAML 处理器在其他类范围中查找该处理程序,也不能将静态方法用作事件处理程序。 3 事件处理程序必须与相应事件的委托匹配。 类要能够实例化为对象元素,必须满足以下要求: · ·  自定义类必须是公共的且支持默认(无参数)公共构造函数。(托管代码结构隐式支持这样的构造函数。) 自定义类不能是嵌套类(嵌套类和其语法中的“点”会干扰其他 WPF 功能,例如附加属性)。 · · · · ·  x:Class 可以声明为充当可扩展应用程序标记语言 (XAML) 元素树的根元素并且正在编译(可扩展应用程序标记语言 (XAML) 通过 Page 生成操作包括在项目中)的任何元素的属性,也可以声明为已编译应用程序的应用程序定义中的 Application 根的属性。在页面根元素或应用程序根元素之外的任何元素上以及在未编译的可扩展应用程序标记语言 (XAML) 文件的任何环境下声明 x:Class 都会导致编译时错误。 用作 x:Class 的类不能是嵌套类。 完全可以在没有任何代码隐藏的情况下拥有 XAML 页,从这个角度而言,x:Class 是可选的,但是,如果页面声明了事件 处理属性值,或者实例化其定义类在代码隐藏类中的自定义元素,那么将最终需要为代码隐藏提供对适当类的 x:Class 引 用(或 x:Subclass)。 x:Class 属性的值必须是一个指定类的完全限定名的字符串。对于简单的应用程序,只要命名空间信息与代码隐藏的构建 方式相同(定义从类级别开始),就可以省略命名空间信息。页面或应用程序定义的代码隐藏文件必须在代码文件内,而该 代码文件应作为产生已编译应用程序的项目的一部分而包括在该项目中。必须遵循 CLR 类的命名规则;有关详细信息,请 参见 Type Definitions(类型定义)。默认情况下,代码隐藏类必须是 public 的,但也可以通过使用 x:ClassModifier 属性定义为另一访问级别。 请注意,x:Class 属性值的此含义是 WPF XAML 实现所特有的。WPF 外部的其他 XAML 实现可能不使用托管代码,因此 可能使用不同的类解析公式。 x:Code 是在 XAML 中定义的一种指令元素。x:Code 指令元素可以包含内联编程代码。 自定义类作为 XAML 元素的要求 为了可方便地用作路由事件,CLR 事件应实现显式 add 和 remove 方法,这两种方法分别添加和移除 CLR 事件签名的处理程序,并将这些处理程序转发到 AddHandler 和 RemoveHandler 方法 XAML 处理器是指可根据其规范(通过编译或解释)将 XAML 接受为语言、并且可以生成结果基础类以供运行时对象模型使用(也 是根据 XAML 规范)的任意程序 当用于提供属性 (Attribute) 值时,将标记扩展与 XAML 处理器区分开来的语法就是左右大括号({ 和 })。然后,由紧跟在左大括 号后面的字符串标记来标识标记扩展的类型。 StaticResource 通过替换已定义资源的值来为 XAML 属性提供值 DynamicResource 通过将值推迟为对资源的运行时引用来为 XAML 属性提供值 Binding 按应用于元素的数据上下文来为属性提供数据绑定值。此标记扩展相对复杂,因为它会启用大量内联语法来指定数据绑定。 有关详细信息, 通过 TemplateBinding,控件模板可以使用来自要利用该模板的类的对象模型定义属性中的模板化属性的值 XAML 处理器中的属性处理使用大括号作为标记扩展的指示符。 这些声明之间的关系是:XAML 实际上是语言标准,而 WPF 是将 XAML 作为语言使用的一个实现。XAML 语言指定一些为了兼容 而假定要实现的语言元素,每个元素都应当能通过针对 XAML 命名空间执行的 XAML 处理器实现进行访问。WPF 实现为其自己的 API 保留默认命名空间,为 XAML 中需要的标记语法使用单独的映射前缀。按照约定,该前缀是 x:,此 x: 约定后面是项目模板、 示例代码和此 SDK 中语言功能的文档。XAML 命名空间定义了许多常用功能,这些功能即使对于基本的 WPF 应用程序也是必需的。 例如,若要通过分部类将任何代码隐藏加入 XAML 文件,您必须将该类命名为相关 XAML 文件的根元素中的 x:Class 属性。或者, 在 XAML 页中定义的、您希望作为键控资源访问的任何元素应当对相关元素设置了 x:Key 属性。 映射到自定义类和程序集: clr-namespace: 在包含要作为元素公开的公共类型的程序集中声明的公共语言运行库 (CLR) 命名空间。 assembly= 是指包含部分或全部引用的 CLR 命名空间的程序集。该值通常只是程序集的名称,而不是路径。该程序集的路径必须 在生成编译的 XAML 的项目文件中以项目引用的形式建立。另外,为了合并版本管理和强名称签名,该值也可以是 AssemblyName 定义的字符串。 请注意,分隔 clr-namespace 标记和其值的字符是冒号 (:),而分隔 assembly 标记和其值的字符是等号 (=)。这两个标记之间使 用的字符是分号。例如: xmlns:custom="clr-namespace:SDKSample;assembly=SDKSampleLibrary" 唯一标识对象元素,以便于从代码隐藏或通用代码中访问实例化的元素。x:Name 一旦应用于支持编程模型,便可被视为与由构造函 数返回的用于保存对象引用的变量等效。 x:Name 无法应用于某些范围。例如,ResourceDictionary 中的项不能有名称,因为它们已有作为唯一标识符的 x:Key 属性。 因为在 WPF 命名空间为几个重要基类(如 FrameworkElement/FrameworkContentElement)指定的 Name 依赖项属性也具 有此用途。仍然有一些常见的 XAML 以及框架方案需要在不使用 Name 属性的情况下通过代
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服