标题说明了一切。 有时似乎Name
和x:Name
属性是可互换的。
那么,它们之间的明确区别是什么?何时使用一种优于另一种呢?
以错误的方式使用它们是否会对性能或内存产生影响?
#1楼
它们不是同一件事。
x:Name
是一个xaml概念,主要用于引用元素。 当给元素提供x:Name xaml属性时,“指定的x:Name
成为在处理xaml时在基础代码中创建的字段的名称,并且该字段包含对该对象的引用。” ( MSDN )因此,这是一个设计师生成的字段,默认情况下具有内部访问权限。
Name
是FrameworkElement
的现有字符串属性,以xaml属性的形式与任何其他wpf元素属性一起列出。
结果,这也意味着x:Name
可以在更大范围的对象上使用。 这是一种使xaml中的任何内容都能被给定名称引用的技术。
#2楼
唯一的区别是,如果将用户控件用于Same Assembly中的控件,则Name将无法标识您的控件,并且会出现错误“在同一Assembly中为控件使用x:Name”。 因此x:Name是WPF中命名控件的WPF版本。 名称仅用作Winform Legacy。 他们希望区分WPF和Winforms中控件的命名,因为他们使用Xaml中的属性来从其他使用x:表示控件名称的程序集中识别控件。
请记住,不要仅仅为了保留控件的名称而将其命名,因为它作为空白驻留在内存中,它会警告您名称已用于控件,但从未使用过。
#3楼
名称 :
- 只能用于FrameworkElement和FrameworkContentElement的后代;
- 可以通过SetValue()和类似属性的代码在后台进行设置。
x:名称 :
- 几乎可以用于所有XAML元素;
- 不能通过SetValue()从后台代码设置; 因为它是指令,所以只能在对象上使用属性语法进行设置。
在XAML中为一个FrameworkElement或FrameworkContentElement使用两个指令将导致异常:如果XAML是标记编译的,则该异常将在标记编译时发生,否则将在加载时发生。
#4楼
答案之一是x:name将在不同的程序语言(例如c#)中使用,而name将用于框架。 老实说,这就是我的感觉。
#5楼
x:Name
意思是:在后面的代码中创建一个