WPF图像名称

25 浏览
0 Comments

WPF图像名称

有时候,Namex:Name属性看起来是可以互换的。

那么,它们之间的区别是什么,什么时候更适合使用其中一个而不是另一个?

如果使用不当,是否会有性能或内存方面的影响?

admin 更改状态以发布 2023年5月24日
0
0 Comments

它们不是同一个东西。

x:Name 是一个 XAML 概念,主要用于引用元素。当您给一个元素命名 x:Name XAML 属性时,“指定的 x:Name 成为处理 XAML 时在底层代码中创建的一个字段的名称,该字段保存对对象的引用。”(MSDN)它是一个由设计师生成的字段,具有默认的内部访问权限。

NameFrameworkElement 的现有字符串属性,以 XAML 属性的形式列出,就像任何其他 WPF 元素属性一样。

因此,这也意味着 x:Name 可以用于更广泛的对象。这是一种技术,可以让 XAML 中的任何内容都可以按照给定名称引用。

0
0 Comments

在XAML中,其实只有一个名称,即x:Name。一个框架(如WPF)可以选择将其属性映射到XAML的x:Name,它通过在指定一个类上的RuntimeNamePropertyAttribute来完成,这个类的属性被指定为映射到XAML的x:Name属性。

这样做的原因是为了允许在运行时已经具有“名称”概念的框架(例如WPF)。在WPF中,FrameworkElement引入了一个名称属性。

通常情况下,类不需要存储名称以使用x:Name。对于XAML来说,x:Name只是表示在代码后台类中生成一个用于存储该值的字段而已。运行时对于该映射的处理是取决于框架的。

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

在未来,XAML将会有更多的使用x:Name的方式,例如允许您通过引用其他对象的名称来设置属性,但在3.5及以前版本中,它仅用于创建字段。

使用哪种方法其实取决于您的风格问题,而非技术问题。我将让其他人给出建议。

另请参阅AutomationProperties.Name VS x:Name,AccessibilityProperties.Name由无障碍工具和一些测试工具使用。

0