我想知道的是我如何在运行时 *** 作Silverlight可视化树.做一些简单的事情,比如添加和删除控件都很容易,但是当你开始以任何合理的复杂度遍历树时,我发现自己渴望使用JQuery样式语法(我认为liNQ也很酷)来处理DOM节点替换,动作等.
所以我想问题是,是否有任何图书馆可以使这项工作变得更容易,或者是否有一些我错过的东西?
解决方法 是的linq扩展方法是您所追求的,但您需要首先放置一个小型基础设施: – @H_502_21@public static class VisualTreeEnumeration{ public static IEnumerable<DependencyObject> Descendents(this DependencyObject root,int depth) { int count = VisualTreeHelper.GetChildrenCount(root); for (int i = 0; i < count; i++) { var child = VisualTreeHelper.GetChild(root,i); yIEld return child; if (depth > 0) { foreach (var descendent in Descendents(child,--depth)) yIEld return descendent; } } } public static IEnumerable<DependencyObject> Descendents(this DependencyObject root) { return Descendents(root,Int32.MaxValue); } public static IEnumerable<DependencyObject> Ancestors(this DependencyObject root) { DependencyObject current = VisualTreeHelper.GetParent(root); while (current != null) { yIEld return current; current = VisualTreeHelper.GetParent(current); } } }现在,您可以使用linq使用linq查询可视化树.一些例子:-
@H_502_21@// Get all text Boxes in usercontrol:- this.Descendents().OfType<TextBox>(); // All UIElement direct children of the layout root grID:- LayoutRoot.Descendents(0).OfType<UIElement>(); // Find the containing `ListBoxItem` for an element:- elem.Ancestors().OfType<ListBoxItem>.FirstOrDefault(); // Seek button with name "PinkElephants" even if outsIDe of the current namescope:- this.Descendents() .OfType<button>() .FirstOrDefault(b => b.name == "PinkElephants"); 总结以上是内存溢出为你收集整理的Silverlight和Visual Tree Manipulation全部内容,希望文章能够帮你解决Silverlight和Visual Tree Manipulation所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)