x:Name 属性

更新:2007 年 11 月

唯一标识对象元素,以便于从代码隐藏或通用代码中访问实例化的元素。x:Name 一旦应用于支持编程模型,便可被视为与由构造函数返回的用于保存对象引用的变量等效。

XAML 属性用法

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

XAML 值

XAMLNameValue

遵守 XamlName 语法限制的字符串。

备注

在使用 XAML、分部类和代码隐藏的 WPF 应用程序项目的标准生成配置下,指定的 x:Name 成为处理 XAML 时在基础代码中创建的字段的名称,并且该字段保留对对象的引用。

默认情况下,创建的字段是内部的。您可以通过指定 x:FieldModifier 属性来更改字段访问。

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

x:Name 在名称范围中必须是唯一的。在大多数常见的 XAML 情况下,主要名称范围由包含在单个 XAML 页中的那些元素定义。其他离散的名称范围由同样在该页上定义的任意模板定义。有关名称范围注意事项的更多信息,请参见 WPF 名称范围

x:Name 供 XAML 处理器用来向名称范围中注册名称,甚至在未编译页(例如,松散 XAML)的情况下进行注册。这是因为 ElementName 绑定可能需要 x:Name。有关详细信息,请参见数据绑定概述

x:Name 不能应用于 WPF 编程中的某些范围。例如,ResourceDictionary 中的项不能有名称,因为 ResourceDictionary 具有一种特殊的行为,该行为将其本身定义为 XAML 名称范围,但却为关键的 INameScope API 返回“未实现”。

x:Name 的允许规则以及唯一性范围由基础 Windows Presentation Foundation (WPF) 框架实现定义,该实现将各个标记元素分成多个不同的 NameScope 范围,例如,资源字典、由页级别 XAML 创建的逻辑树、模板等等。

有些 WPF 框架级别的应用程序可能能够完全避免使用 x:Name 属性,因为在 WPF 命名空间内为几个重要基类(如 FrameworkElement/FrameworkContentElement)指定的 Name 依赖项属性也具有此用途。仍然有一些常见的 XAML 以及框架方案需要在不使用 Name 属性的情况下通过代码访问元素,这种情况在某些动画和演示图板支持类中最为突出。例如,您应当在时间线以及在 XAML 中创建的转换上指定 x:Name,前提是您计划在代码中引用它们。

如果 Name 可用作类的一个属性,则 Name 和 x:Name 可作为属性互换使用,但如果在同一元素上同时指定了这两者,则将产生错误。

对于自定义元素,可以建立或更改映射到任意给定对象上的 x:Name 的属性(可以是 CLR 属性,也可以是依赖项属性),方法是在属性声明代码中为该属性指定 RuntimeNamePropertyAttribute

Name 可以使用 XAML 属性 (Attribute) 语法以及在代码中使用 SetValue 来设置;但请注意,在某些情况下,在代码中设置 Name 属性 (Property) 不会在名称范围内创建有代表性的字段引用。不要尝试在代码中设置 Name,而应从代码中根据相应的名称范围来使用 NameScope 方法。

Name 还可以使用带有内部文本的 XAML 属性元素语法来设置,但这种做法并不常见。x:Name 不能在 XAML 属性 (Property) 元素语法中设置,也不能在代码中使用 SetValue 来设置;它只能使用属性 (Attribute) 语法在元素上设置。

请参见

概念

WPF 中的树

参考

Name

Name