信息
您所需的主题如下所示。但此主题未包含在此库中。

FrameworkElement.Name 属性

2013/12/13

获取或设置对象的标识名称。 当 XAML 处理器从标记创建对象树时,运行时代码可以使用此名称引用标记元素。

Namespace:  System.Windows
程序集:  System.Windows(位于 System.Windows.dll 中)
XMLNS for XAML: 未映射到 xmlns。

public string Name { get; set; }
<frameworkElement Name="xamlNameString"/>

属性值

类型: System.String
对象的名称,该名称必须是 XamlName 语法中的有效字符串。 默认值为空字符串。

依赖项属性标识符字段: NameProperty

此属性的最常见用法是为 Windows Phone 应用程序的最初加载 XAML 标记中的对象指定 Name 特性。

用于 Name 的字符串值具有一些限制,这些限制是由 XAML 规范所定义的基础 x:Name 施加的。 最值得注意的一点是,Name 必须以字母或下划线字符 (_) 开头,并且必须只包含字母、数字或下划线。

此属性提供了一个方便的属性,用于设置和获取 XAML 语言 x:Name 特性的等效的 Windows Phone 特定值。从 XAML 标记构造对象树时,XAML 处理器使用 x:Name。 在 XAML 处理器中,当您在 Windows Phone 项目中对作为 Page 的 XAML 使用默认编译生成操作时,将创建一个对象树,其中的对象可由页特定的代码隐藏中的名称直接引用。 这些字段引用将启用编程模型,在其中对象可由页特定的代码隐藏中的名称直接引用。

说明注意:

在加载之前预处理 XAML 以构造字段引用(和添加事件布线)的生成操作有时将在此文档中被称为标记编译。

多数方法中,x:Name 特性等效于 Name 属性。 您可以在代码中获取 Name 来获取设置为 x:Name 的值。x:NameName 作为 XAML 特性是互斥的;如果试图在标记中对同一对象元素设置 x:NameName 特性,将引发分析器错误。

说明注意:

XAML 将允许 DependencyObject 作为任意 Name 的特性(而不是像任意 FrameworkElement 都可以作为分析行为那样),但是这种行为未延伸到托管代码 API,而且未得到可以使用或生成 XAML 的所有工具的完全支持。

名称在 XAML 名称范围中必须是唯一的。 通常,XAML 名称范围由 XAML 页定义,但是特定功能(如模板)或对 API 的调用(如 Load)可以定义单独的 XAML 名称范围。

重要说明重要说明:

Name 永远不应本地化。Name 用作代码隐藏中的代码变量。 此类代码通常对本地化人员来说不可访问,否则本地化人员可能访问定义该 UI 的 XAML 文件,尽管这取决于您的部署模型和本地化过程。 这就是为何不应显示来自 UI 中的 Name 的任何字符串的一个原因。

名称的方案

在定义 UI 元素的 XAML 中设置 Name 支持几种主要方案:

  • 动画目标: 若要将动画应用于对象属性,您必须将特定实例作为目标。 可以通过在任何 Timeline 上设置 Storyboard.TargetName 附加属性执行此操作。 此处设置的值是您指定为 Name 的字符串。

  • 控件模板的部件: 为了支持可视状态模型和控件初始化,控件作者应为可模板化的控件的关键部件指定 Name 值。

  • 常规运行时交互: 例如,事件处理程序中的代码可能处理一个对象上的事件,该对象提供更改 UI,但对属性的更改在另一个临近的 UI 元素上进行。 为这种情况编写代码的最简单方法是使用从 Name 生成的字段引用。

XAML 中 XamlReader.Load 的名称

可以在作为 Load 输入的一部分的元素上指定 Namex:Name。 但是,创建的任何此类名称将位于离散 XAML 名称范围内,该名称范围只能延伸到所提供 XAML 输入中的根。 如果在调用 Load 后随即将创建的对象添加到主对象树,上述注意事项将影响您如何调用 FindName 以及应该从哪一对象范围调用它。

不能将 Name 用作 CLR 属性绑定源的直接源值。 如果必须在具有绑定的 UI 中将相同的字符串值显示为 Name,则应将相同的值复制到 Tag 属性,该属性可用作属性绑定源。 不应同时将 Name 用作绑定目标。

说明注意:

可以使用 Name 作为 ElementName 绑定的源限定符,但这是与有关使用 Name 的字符串值作为直接源的限制不同的概念。

FindName

实用工具方法 FindName 可从任意 FrameworkElement 中获得;该方法可通过 Name 在对象树中查找对象(只要对象在当前 XAML 名称范围中)。FindName 会搜索 XAML 创建的整个对象树。 从技术上讲,FindName 实际搜索的内容在 XAML 名称范围中,但它不会保留树形式,而是代之以名称的哈希表。FindName 无法找到在应用的模板中定义的名称。

在代码中设置名称。

您可以在运行时设置 Name 的值,但您必须了解一些重要的注意事项和限制。

如果对象拥有一个已在 XAML 中设置的 Name 先前值,通常不建议在运行时更改代码中的 Name 值。 这是因为在加载对象树之后设置名称不会创建或更改等效字段引用的识别名称。 如果由于在初始标记中提供了 Name 而已存在字段引用,且您更改了 Name 的值,则通过 FindName 查找对象所需要使用的字段和名称现在已不同,因为字段仍保留为标记定义的名称。

为在代码中创建的且因此从未具有 XAML 定义的 Name 值的对象设置 Name 值,对于某些方案而言是合适的。 这样的方案之一是,您希望能够通过将 FindName 用作常用实用工具函数,从而在树中查找由 XAML 创建的或由代码创建的对象。 要使这一方案起作用,在运行时将继续使用 Windows Phone 并将其添加到 XAML 命名范围概念。 如果您尝试将新命名的对象添加到现有的大部分由 XAML 创建的对象树,则名称必须是唯一的,否则将发生重复名称异常。 如果您在刚进行实例化的对象上设置了 Name,尝试设置 Name 可能不会发生重复名称异常。 直到您尝试将重复命名的对象添加到主对象树,新对象才具有其独立的 XAML 名称范围。 只有在您将对象连接到更大的对象树时,才可检测到 XAML 命名范围条件中的重复名称。 异常可能会在连接树中对象的操作中发生,例如在调用连接到主对象树的集合的 Add 方法时。 很难知道哪些 Name 值已存在于您稍后要向其中添加新对象的 XAML 命名范围。 没有可用于报告 XAML 命名范围中现有名称的完整哈希的特定 API。 如果在代码中广泛地设置 Name 值,您可能需要一种方法以生成特定于运行时使用的名称字符串,或者您可能需要包装调用,该调用可将新命名的对象添加到 try-catch 块中以捕捉由重复名称引发的异常。

请注意,对于是 FrameworkElementInline 的对象,您仅可在运行时设置 Name。 如果对象没有 Name 属性,在 XAML 中设置名称将需要使用 x:Name 特性而不是 Name,不提供用于设置对象的运行时名称的运行时 API。

ElementName 绑定

Namex:Name 的值是用于标识 ElementName 绑定的源元素的标识符。 有关 ElementName 绑定技术的更多信息,请参见 ElementNameWindows Phone 的数据绑定

Windows Phone OS

受以下版本支持: 8.0, 7.1, 7.0

Windows Phone

显示: