WPF 中 DataTemplate 中的 x:Key、x:Name 和 x:UID 有啥区别?

Posted

技术标签:

【中文标题】WPF 中 DataTemplate 中的 x:Key、x:Name 和 x:UID 有啥区别?【英文标题】:What is the Difference Between x:Key, x:Name, and x:UID in a DataTemplate in WPF?WPF 中 DataTemplate 中的 x:Key、x:Name 和 x:UID 有什么区别? 【发布时间】:2014-07-19 02:20:17 【问题描述】:

我正在尝试在 WPF 中创建动态选项卡,并且正在尝试编写一个仅适用于某些选项卡项的内容模板。我希望能够为内容模板创建一个标识符,以便我可以在后面的代码中引用它,这样我就可以有选择地将它应用于单个 TabControl 中的某些选项卡。但是,我对这三个不同的 xaml 标识符感到困惑。有什么区别,哪一个最适合我的目的?

【问题讨论】:

【参考方案1】:

“x:”指定命名空间,在您的情况下很可能是“http://schemas.microsoft.com/winfx/2006/xaml”您将看到在 Window.Xaml 文件顶部声明的别名。 x:Key、x:Name 等都是该命名空间中的指令。

相比之下,'Name' 属性(没有 x:)是在 FrameworkElement 类中声明的依赖属性。

x:Key

唯一标识在 XAML 定义的字典中创建和引用的元素。向 XAML 对象元素添加 x:Key 值是标识资源字典(例如 WPF ResourceDictionary)中资源的最常用方法。

x:姓名

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

x:Uid

为标记元素提供唯一标识符。在许多情况下,XAML 本地化流程和工具都会使用此唯一标识符。

备注

我只看到 x:Uid 应用必须通过资源字典支持不同的语言。

对于其他两个(x:Key 和 x:Name),基本的经验法则是使用 x:Name 表示框架元素,使用 x:Key 表示样式、模板等。因此,对于您的问题,如果您要命名模板本身,您将使用 x:Key 指令。在模板中声明的控件将使用 x:Name 指令。

Xaml Namespace 提供了所有 Xaml 指令的完整列表

【讨论】:

【参考方案2】:

如果要将模板应用于页面中的所有选项卡,可以使用 x:Type,但如果要将其应用于少数选项卡而不是所有选项卡,则可以使用 x:Key

通常,当您想在 xaml 文件中将其用作 StaticResource 时,您将使用 x:Key。当您想在代码隐藏中引用它时,您将向控件或模板提供 x:Name。我从来没有用过 X:Uid,但这是 MSDN 所说的,

使用 x:Uid 来标识 XAML 中的对象元素。通常这 对象元素是控件类或其他元素的实例 显示在 UI 中。你的字符串之间的关系 在 x:Uid 中使用,您在资源文件中使用的字符串是 资源文件字符串是 x:Uid 后跟一个点 (.),然后是 元素的特定属性的名称 本地化。

【讨论】:

以上是关于WPF 中 DataTemplate 中的 x:Key、x:Name 和 x:UID 有啥区别?的主要内容,如果未能解决你的问题,请参考以下文章

DataTemplate WPF 中样式设置器中的绑定

ItemsControl 中 DataTemplate 中的 WPF UserControl - 如何绑定到 ItemsSource 的父级

WPF中Control Template和DataTemplate的区别

将 WPF 按钮 CommandParameter 绑定到 DataTemplate 中的按钮本身

将情节提要的目标设置为 DataTemplate WPF 中的按钮

WPF -- DataTemplate与ControlTemplate结合使用