如何在 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代码中的所有内容,这样岂不是不安全?
如何从 DataGridTemplateColumn.CellTemplate 访问按钮