从数据模板中按名称获取对象引用 [英] Getting an object reference by name from a DataTemplate
本文介绍了从数据模板中按名称获取对象引用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如果我有以下XAML:
<;工具包:DataForm Height="100"x:name="Form">; <;工具包:DataForm.EditTemplate>; <;数据模板>; <;StackPanel name="Stack">;<;/StackPanel>; <;/数据模板>; <;/TOOLKIT:DataForm.EditTemplate>; <;/TOOLKIT:DataForm>;我可以通过this.FindName("Form")从视图中获得对"Form"的引用。
如何才能获得对"Stack"的引用?FindName返回NULL。
Xaml
这里的问题是DataTemplate
的推荐答案内容与外部Xaml属于不同的NameScope。对元素调用FindName
仅搜索最初生成该元素的NameScope。因此,在UserControl
上调用FindName
将不会找到由DataTemplate
生成的元素。原因是DataTemplate
(和其他模板)旨在多次重复使用,NameScope的使用消除了名称的歧义。
解决方案是调用VisualTreeHelper
的帮助,看看blog中的代码,以了解我对VisualTreeHelper
的理解。将该博客中的VisualTreeEnumeration
类添加到您的项目中后,您可以执行以下操作:-
var element = this.Descendents().OfType<FrameworkElement>().FirstOrDefault(fe => fe.Name == "stack");
当然,如果您知道"Stack"是StackPanel
,那么您可以使用.OfType<T>
更具体。
这篇关于从数据模板中按名称获取对象引用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文