0
在Silverlight页面上有一些自定义控件的实例。我可以很容易地通过其名称获得自定义控件的一个实例:如何获取页面上对象的所有实例的列表
MyCustomControl mcc = (MyCustomControl)this.FindName(namestring);
但我怎么能得到这个页面上这个自定义控件的所有实例的列表?
在Silverlight页面上有一些自定义控件的实例。我可以很容易地通过其名称获得自定义控件的一个实例:如何获取页面上对象的所有实例的列表
MyCustomControl mcc = (MyCustomControl)this.FindName(namestring);
但我怎么能得到这个页面上这个自定义控件的所有实例的列表?
添加这个类到您的项目: -
public static class VisualTreeEnumeration
{
public static IEnumerable<DependencyObject> Descendents(this DependencyObject root)
{
int count = VisualTreeHelper.GetChildrenCount(root);
for (int i = 0; i < count; i++)
{
var child = VisualTreeHelper.GetChild(root, i);
yield return child;
foreach (var descendent in Descendents(child))
yield return descendent;
}
}
}
现在你可以使用这个代码: -
List<MyCustomControl> = this.Descendents().OfType<MyCustomControl>().ToList();
尝试是这样的
Enumerable.Range(0, VisualTreeHelper.GetChildrenCount(this))
.Select(i => VisualTreeHelper.GetChild(this, i))
.Where(c => c is MyUserControl);
谢谢! +1你可以给我一个关于如何获得结果到List的提示吗?我已经尝试了“var ret = Enumerable.Range(..”然后是“foreach(MyCustomControl sci in ret){...}”,但列表为空 –
rem
2010-11-23 11:32:53
在代码行末尾添加.ToList()我之前发布了 – 2010-11-23 11:55:39