从数据模板中按名称获取对象引用 [英] Getting an object reference by name from a DataTemplate

查看:11
本文介绍了从数据模板中按名称获取对象引用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果我有以下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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆