如何在Code Behind中访问在XAML中“创建”的控件?

26

我在XAML中'创建'了一个控件,现在想通过代码后台访问它。

<wincontrols:LiveTileFrameElement Name="PendingAuthsFrame1" Text="Pending" />

this.PendingAuthsFrame1.Text = "334";

但是,我在上述第二条语句中遇到了构建错误,显示MyApp.MainWindow不包含“PendingAuthsFrame1”的定义,也没有扩展方法...,等等。

我错过了什么或做错了什么?


你的项目引用中有Telerik.WinControls.UI吗?LiveTileFrameElement是Telerik WinForms控件,我说得对吗? - Frank59
是的,谢谢。你刚刚让我想起来我应该在XAML中明确指出这个控件是托管在WinFormsControlHost中的。不确定这是否有所区别,但我可以在我的代码后台获取“正常”的WPF控件,所以我猜是的。 - Refracted Paladin
1个回答

37

使用x:Name代替Name。那应该就可以了。


2
成功了!你能简洁地说明一下为什么吗?我应该总是使用x:Name而不是Name吗? - Refracted Paladin
1
请提供原文,以便我能够准确翻译。 - Antonio Bakula
5
简单来说,x:Name 是 XAML 语言的一种功能,在代码生成期间映射到后台代码中的字段。在构建过程中,这些内容会被生成到 *.cs.g 文件中。另一方面,Name 是 FrameworkElement 上定义的属性,可以根据控件作者的需要进行处理,它并不总是映射到 XAML 的 x:Name。有些元素没有 Name 属性。因此,您应该始终使用 x:Name 来为 XAML 和后台代码中的元素命名以便引用 :) - Paweł Motyl

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