如何在 XAML 中“创建”的代码中访问控制

Posted

技术标签:

【中文标题】如何在 XAML 中“创建”的代码中访问控制【英文标题】:How to access control in Code Behind that was 'created' in XAML 【发布时间】:2012-11-26 17:15:24 【问题描述】:

我有一个我在 XAML 中“创建”的控件,我想通过背后的代码访问它。

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

this.PendingAuthsFrame1.Text = "334";

但是,我在上面的第二条语句中收到了一个构建错误,说明 MyApp.MainWindow does not contain a definition for 'PendingAuthsFrame1' and no extension method.... 它一直在运行,但你明白我猜的意思。

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

【问题讨论】:

项目引用中有 Telerik.WinControls.UI 吗? LiveTileFrameElement 是 winforms 的远程控制,我说得对吗? 是的,我愿意。谢谢。您刚刚让我记得我可能应该说明此控件托管在 XAML 中的 WinFormsControlHost 中。不确定这是否会有所不同,但我可以在我的代码隐藏中获得“正常”的 WPF 控件,所以我猜是的。 【参考方案1】:

使用x:Name 而不是Name。这应该可以解决问题。

【讨论】:

成功了!你有没有机会简洁地说明原因?我应该总是使用 x:Name vs Name 吗? ***.com/a/593151/351383***.com/a/1929978/351383 简而言之:x:Name 是 XAML 语言功能,在代码生成期间映射到代码后面的字段。这就是构建期间在 *.cs.g 文件中生成的内容。另一方面,Name 是在 FrameworkElement 上定义的属性,并且可以由控件按照作者的意愿进行处理——它并不总是映射到 XAML x:Name。有些元素没有Name 属性。因此,您应该始终使用x:Name 来命名您的元素,以便在 XAML 和后面的代码中引用:)

以上是关于如何在 XAML 中“创建”的代码中访问控制的主要内容,如果未能解决你的问题,请参考以下文章

WPF应用程序中,调用用户控件时,可以访问到在这个用户控件Xaml代码中的所有内容,这样岂不是不安全?

访问F#中的XAML(WPF)元素

在 xaml 中访问 DisplayName

如何从 DataGridTemplateColumn.CellTemplate 访问按钮

Xamarin形式;如何从rg.plugins弹出页面的xaml.cs类访问标签?

ACL访问控列表之标准版