代码隐藏和 XAML

更新:2007 年 11 月

代码隐藏是一个术语,用于描述与将 XAML 页编译为应用程序时由 XAML 处理器创建的代码联接的代码。本主题描述代码隐藏的要求以及在 XAML 中的代码的可选内联代码机制。

本主题包括下列各节。

  • 先决条件
  • 代码隐藏、事件处理程序和分部类要求
  • x:Code
  • 内联代码限制
  • 相关主题

先决条件

本主题假设您已阅读 XAML 概述并已基本了解 CLR 和面向对象的编程。

代码隐藏、事件处理程序和分部类要求

  • 分部类必须派生自用作根元素的类的类型。您可以在代码隐藏的分部类定义中将派生留空,但编译的结果会假定页根作为分部类的基类,即使在没有指定的情况下也是如此(因为分部类的标记部分确实将页根指定为基)。

  • 编写的事件处理程序必须是 x:Class 标识的 CLR 命名空间中的分部类所定义的实例方法。您不能限定事件处理程序的名称来指示 XAML 处理器在其他类范围中查找该处理程序,也不能将静态方法用作事件处理程序。

  • 事件处理程序必须与相应事件的委托匹配。

  • 专门针对 Microsoft Visual Basic .NET 语言,您可以使用特定于语言的 Handles 关键字将处理程序与处理程序声明中的实例和事件关联,而不是在 XAML 中将处理程序附加到属性。但是,这一技术确实存在一些限制,因为 Handles 不支持 WPF 事件系统的所有特定功能,例如某些路由事件方案或附加事件。有关详细信息,请参见 Visual Basic 和 WPF 事件处理

x:Code

x:Code 是在 XAML 中定义的一种指令元素。x:Code 指令元素可以包含内联编程代码。内联定义的代码可以与同一页中的 XAML 进行交互。下面的示例阐释了内联 C# 代码。请注意,该代码位于 x:Code 元素内,并且必须包围在 <CDATA[...]]> 内,以便针对 XML 对内容进行转义,这样 XAML 处理器(解释 XAML 架构或 WPF 架构时)不会试图按原义将内容解释为 XML。

<Page
  xmlns="https://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="https://schemas.microsoft.com/winfx/2006/xaml"
  x:Class="MyNamespace.MyCanvasCodeInline"
>
  <Button Name="button1" Click="Clicked">Click Me!</Button>
  <x:Code><![CDATA[
    void Clicked(object sender, RoutedEventArgs e)
    {
        button1.Content = "Hello World";
    }
  ]]></x:Code>
</Page>

内联代码限制

应注意对基于 XAML 的应用程序避免或限制使用内联代码。在体系结构和编码原理方面,保留标记和代码隐藏之间的独立性可以更显著地区分设计人员和开发人员这两个角色。从更为技术性的角度看,为内联代码编写的代码更难编写,因为您总是要写入到 XAML 页的生成分部类中,并且只能使用默认的 XML 命名空间映射。因为不能添加 using 语句,因此必须完全限定您所进行的大量 API 调用。默认的 WPF 映射包括在 WPF 程序集中出现的大多数而非全部 CLR 命名空间;您必须完全限定对其他 CLR 命名空间中包含的 API 的调用。此外,您还不能在内联代码中定义多个类,并且所有代码实体必须作为生成的分部类中的一个成员或变量存在。其他特定于语言的编程功能(例如宏或对全局变量或生成变量的 #ifdef)也不可用。有关更多信息,请参见 x:Code XAML 指令元素

请参见

概念

XAML 概述

生成 WPF 应用程序 (WPF)

XAML 语法术语

参考

x:Code XAML 指令元素