猿问
回到首页
个人中心
反馈问题
注册登录
下载APP
首页
课程
实战
体系课
手记
专栏
慕课教程
按类型查找wpf窗口中的所有控件
按类型查找wpf窗口中的所有控件
我在找一种方法来找到窗口上的所有控件,
例如:
找到所有
TextBoxes
,查找实现特定接口等的所有控件。
郎朗坤
浏览 1669
回答 3
3回答
万千封印
这应该能起作用public static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) where T : DependencyObject{ if (depObj != null) { for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++) { DependencyObject child = VisualTreeHelper.GetChild(depObj, i); if (child != null && child is T) { yield return (T)child; } foreach (T childOfChild in FindVisualChildren<T>(child)) { yield return childOfChild; } } }}然后对控件进行如下枚举foreach (TextBlock tb in FindVisualChildren<TextBlock>(window)){ // do something with tb here}
0
0
0
胡子哥哥
这是最简单的方法:IEnumerable<myType> collection = control.Children.OfType<myType>();控件是窗口的根元素。
0
0
0
jeck猫
我修改了@Bryce Kahle的答案,以遵循Mathias Lykkegaard Lorenzen的建议,并使用LogicalTreeHelper。好像没问题。;) public static IEnumerable<T> FindLogicalChildren<T> ( DependencyObject depObj ) where T : DependencyObject { if( depObj != null ) { foreach( object rawChild in LogicalTreeHelper.GetChildren( depObj ) ){ if( rawChild is DependencyObject ) { DependencyObject child = (DependencyObject)rawChild; if( child is T ) { yield return (T)child; } foreach( T childOfChild in FindLogicalChildren<T>( child ) ) { yield return childOfChild; } } } } }(它仍然不会检查GroupBox中的选项卡控件或网格,正如@Benjamin Berry和@David R分别提到的那样。)(还遵循@noonand的建议&删除多余的子!=NULL)
0
0
0
打开App,查看更多内容
随时随地看视频
慕课网APP
相关分类
C#
typedef入门问题
1 回答
.NET
.net 中 字符串含有超链接,如何给超链接自动加上a标签?
1 回答
请问.net 中用jquery传值安全吗?
2 回答
继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续