x:Name 指令

在 XAML 名称范围中唯一标识 XAML 定义的元素。 当框架提供 Api 或实现在运行时访问 XAML 创建的对象图的行为时,可以将 XAML 名称范围及其唯一性模型应用于实例化的对象。

XAML 属性用法

<object x:Name="XAMLNameValue".../>

XAML 值

XAMLNameValue 符合 XamlName 语法限制的字符串。

备注

x:Name将应用于框架的后备编程模型后,该名称等效于保存构造函数返回的对象引用或实例的变量。

指令用法的值在 x:Name XAML 名称范围内必须是唯一的。 默认情况下,当由 .NET XAML 服务 API 使用时,主 XAML 名称范围将在单个 XAML 生产的 XAML 根元素上定义,并且包含该 XAML 生产中包含的元素。 可能出现在单个 XAML 生产内的其他离散 XAML 名称范围可以由框架定义,以解决特定方案。 例如,在 WPF 中,新的 XAML 名称范围由也在该 XAML 生产环境中定义的任何模板来定义和创建。 有关 XAML 名称范围 (为 WPF 编写但) 许多 XAML 名称范围概念相关的详细信息,请参阅 WPF Xaml 名称范围

通常, x:Name 不应在也使用的情况下应用 x:Key 。 由特定现有框架实现的 XAML 实现在和之间引入了替代概念 x:Key x:Name ,但这不是建议的做法。 在处理名称/键信息(如或)时,.NET XAML 服务不支持这种替换概念 INameScope DictionaryKeyPropertyAttribute

Permittance 的规则 x:Name 和名称唯一性强制可能由特定的实现框架定义。 但是,若要与 .NET XAML 服务一起使用,XAML 名称范围唯一性的框架定义应该与 INameScope 本文档中的信息定义一致,并且应使用与信息应用位置相同的规则。 例如,实现将 Windows Presentation Foundation (WPF) 各种标记元素分成不同的 NameScope 范围,如资源字典、页面级别 XAML 创建的逻辑树、模板和其他延迟的内容,然后在每个 xaml 名称范围内强制执行 xaml 名称的唯一性。

对于使用 .NET XAML 服务 XAML 对象编写器的自定义类型, x:Name 可以建立或更改映射到类型的的属性。 通过 RuntimeNamePropertyAttribute 在类型定义代码中引用要映射的属性的名称来定义此行为。 RuntimeNamePropertyAttribute 是一个类型级特性。

Using.NET XAML 服务,可通过实现接口以非特定于框架的方式定义 XAML 名称范围支持的支持逻辑 INameScope

WPF 用法说明

在 WPF 使用 XAML、分部类和代码隐藏的应用程序的标准生成配置下,指定的 x:Name 将成为当由标记编译生成任务处理时在基础代码中创建的字段的名称 XAML ,并且该字段包含对该对象的引用。 默认情况下,创建的字段为内部字段。 可以通过指定 x:FieldModifier 属性来更改字段访问权限。 在 WPF 和 Silverlight 中,序列是标记编译定义并命名分部类中的字段,但该值最初为空。 然后, InitializeComponent 从类构造函数中调用一个名为的生成方法。 InitializeComponent 包含 FindName 使用每个 x:Name 值的调用,此分部类的 XAML 定义部分中存在这些值作为输入字符串。 然后,将返回值分配给赞命名字段引用,以用通过 XAML 分析创建的对象填充字段值。 执行 InitializeComponent 时,可以直接使用/字段名称引用运行时对象关系图 x:Name ,而不必 FindName 在每次需要引用 XAML 定义的对象时都显式调用。

对于使用 Microsoft Visual Basic 目标的 WPF 应用程序,并包括包含生成操作的 XAML 文件 Page ,在编译过程中将创建一个单独的引用属性,该属性将 WithEvents 关键字添加到具有的所有元素 x:Name ,以支持 Handles 事件处理程序委托的语法。 此属性始终是公共的。 有关详细信息,请参阅 Visual Basic 和 WPF 事件处理

x:Name 在加载时,WPF XAML 处理器使用将名称注册到 XAML 名称范围,即使该页未通过生成操作进行标记编译 (例如,) 的资源字典的松散 XAML。 此行为的一个原因是, x:Name 绑定可能需要 ElementName 。 有关详细信息,请参阅 数据绑定概述

如前所述, x:Name Name 在也使用的情况下,不应应用 (或) x:Key 。 WPF ResourceDictionary 具有将自身定义为 XAML 名称范围、返回未实现的或 null 值 INameScope 作为执行此行为的方法的特殊行为。 如果 WPF XAML 分析器在 Name xaml 定义中遇到或 x:Name ResourceDictionary ,则不会将该名称添加到任何 xaml 名称范围。 尝试从任何 XAML 名称范围和方法中查找该名称 FindName 将不会返回有效的结果。

X:Name 和名称

很多 WPF 应用程序方案都可以避免使用 x:Name 特性,因为在 Name 默认 XAML 命名空间中为多个重要基类(如)指定的依赖项属性 FrameworkElement FrameworkContentElement 满足此相同目的。 还有一些常见 XAML 和 WPF 方案,在这些方案中,代码访问 Name 框架级别上没有属性的元素是非常重要的。 例如,某些动画和情节提要支持类不支持 Name 属性,但通常需要在代码中引用这些类才能控制动画。 x:Name如果打算稍后从代码中引用它们,则应将指定为在 XAML 中创建的时间线和转换的属性。

如果在 Name 类上作为属性提供, Name 并且 x:Name 可作为属性互换使用,但如果在同一元素上同时指定了这两个异常,则会导致分析异常。 如果 XAML 是标记编译的,则异常将在标记编译中发生,否则会在加载时发生。

Name 可以使用 XAML 特性语法和使用中的代码进行设置 SetValue 。请注意,在代码中设置该 Name 属性不会在已加载 xaml 的大多数情况下在 xaml 名称范围内创建代表字段引用。 不要尝试 Name 在代码中进行设置,而是 NameScope 根据相应的名称范围使用代码中的方法。

Name 还可以通过对内部文本使用属性元素语法来设置,但这种情况并不常见。 相反, x:Name 不能在 XAML 属性元素语法中或使用代码中设置 SetValue ; 它只能使用对象的属性语法进行设置,因为它是一个指令。

Silverlight 使用说明

x:Name 对于 Silverlight,单独记录。 有关详细信息,请参阅 XAML 命名空间 (x: ) 语言功能 (Silverlight)

请参阅