WPF中DataTemplate中x:Key、x:Name和x:UID的区别是什么?

36

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

2个回答

47
'x:'指定命名空间,您的情况下最有可能是“http://schemas.microsoft.com/winfx/2006/xaml”。您将在Window.Xaml文件顶部看到别名声明。x:Key、x:Name等都是该命名空间中的指令。
相反,“Name”属性(没有x:)是FrameworkElement类中声明的依赖属性。 x:Key 唯一标识在XAML定义的字典中创建和引用的元素。将x:Key值添加到XAML对象元素是标识资源的最常见方法,例如在WPF ResourceDictionary中。 x:Name 唯一标识XAML中定义的元素在XAML命名范围中。当框架在运行时提供API或实现访问XAML创建的对象图时,可以将XAML命名范围及其唯一性模型应用于实例化的对象。 x:Uid 为标记元素提供唯一标识符。在许多情况下,此唯一标识符由XAML本地化过程和工具使用。
注意
我只在必须使用资源字典支持不同语言的应用程序中看到了x:Uid。
对于其他两个(x:Key和x:Name),一个基本的经验法则是将x:Name用于Framework元素,将x:Key用于样式、模板等。因此,对于您的问题,如果要命名模板本身,则应使用x:Key指令。在模板中声明的控件将使用x:Name指令。
Xaml指令的完整列表在Xaml Namespace中给出。

7
如果您想将模板应用于页面上的所有选项卡,可以使用x:Type,但如果您只想将其应用于少数选项卡而不是所有选项卡,则可以使用x:Key
通常,当您希望在xaml文件中将其用作StaticResource时,会为控件或模板提供x:Name以便在代码后台中引用。我从未使用过X:Uid,但这是MSDN的说法:

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接