有时,Namex:Name属性似乎是可以互换的.

那么,它们之间的明确区别是什么,什么时候使用一种比另一种更可取?

错误地使用它们是否会影响性能或记忆?

推荐答案

XAML中只有一个名字,x:Name.WPF之类的框架可以 Select 使用类上的RuntimeNamePropertyAttribute将其一个属性映射到XAML的x:Name,该类将其中一个类属性指定为映射到XAML的x:Name属性.

这样做的原因是为了允许运行时已经有"名称"概念的框架,比如WPF.例如,在WPF中,FrameworkElement引入了Name属性.

通常,类不需要存储x:Name的名称即可使用.对于XAML来说,所有x:Name种方法都是生成一个字段来存储类后面的代码中的值.运行时对该映射执行的操作取决于框架.

那么,为什么有两种方法来做同样的事情呢?答案很简单,因为有两个概念映射到一个属性上.WPF希望在运行时保留元素的名称(可通过绑定等方式使用),而XAML需要知道您希望哪些元素可由类后台代码中的字段访问.WPF通过将name属性标记为x:name的别名将这两者联系在一起.

将来,XAML将更多地使用x:Name,例如允许您通过按名称引用其他对象来设置属性,但在3.5及更早版本中,它仅用于创建字段.

你是否应该使用其中一个其实是一个风格问题,而不是一个技术问题.我将把这个留给其他人来推荐.

另请参见AutomationProperties.Name VS x:Name,AutomationProperties.可访问性工具和一些测试工具使用这个名称.

.net相关问答推荐

在 .NET 7 项目上设置 Sentry 时遇到问题

.NET Core 中的微服务

使用 MassTransit、.NET Core 和 RabbitMQ 的设计挑战

如何将 Javascript 日期时间转换为 C# 日期时间?

如何使用 C# 关键字作为属性名称?

将 DataRowCollection 转换为 IEnumerable

将 int 转换为 .NET 中的位数组

生产代码中的 System.Diagnostics.Debug.WriteLine

SubscribeOn 和 ObserveOn 有什么区别

读取方法的属性值

如何使用 NUnit(或可能使用另一个框架)测试异步方法?

如何使用配置转换删除 ConnectionString

关闭 Visual Studio 中所有选项卡但当前选项卡的键盘快捷键?

在未安装 Visual Studio 的机器上使用 FUSLOGVW.EXE

dotnet 恢复警告 NU1701

Moq - 不可覆盖的成员不能用于设置/验证表达式

如何判断对象是否已在 C# 中释放

找不到 System.Windows.Media 命名空间?

作者主签名的时间戳发现了一个建链问题:UntrustedRoot: self-signed certificate in certificate chain

从 bcp 客户端接收到 colid 6 的无效列长度