1
282
我结合了上面John Myczek和Tri Q算法使用的模板格式,创建了一个可用于任何父级的findchild算法。记住,递归地向下搜索树可能是一个漫长的过程。我只是在一个WPF应用程序上对它进行了抽查,请对您可能发现的任何错误进行评论,我将更正我的代码。 WPF Snoop 是查看可视树的一个有用工具-我强烈建议在测试时使用它,或者使用此算法检查您的工作。
Tri-Q算法存在一个小误差。
找到子级后,如果childrencount为>1并且我们再次迭代,则可以覆盖正确找到的子级。因此我增加了一个
这样称呼它:
注释
|
2
113
还可以使用 FrameworkElement.FindName(string) . 鉴于:
在代码隐藏文件中,您可以编写:
当然,因为它是用x:name定义的,所以您可以只引用生成的字段,但也许您希望动态而不是静态地查找它。 这种方法也适用于模板,其中命名项多次出现(每次使用模板一次)。 |
3
62
你可以使用 VisualTreeHelper 查找控件。下面是一个使用VisualTreeHelper查找指定类型的父控件的方法。您也可以使用VisualTreeHelper以其他方式查找控件。
这样称呼它:
|
4
19
我可能只是重复其他人,但我确实有一段很好的代码,用findchild()方法扩展DependencyObject类,该方法将按类型和名称为您获取子类。只是包含和使用。
希望你觉得它有用。 |
5
17
我对代码的扩展。
来源: https://code.google.com/p/gishu-util/source/browse/#git%2FWPF%2FUtilities 解释性博客帖子: http://madcoderspeak.blogspot.com/2010/04/wpf-find-child-control-of-specific-type.html |
6
16
如果要查找特定类型的所有控件,您可能也对该代码段感兴趣。
|
7
15
我编辑了Crimsonx的代码,因为它不适用于超类类型:
|
8
14
这将忽略一些元素-您应该像这样扩展它,以便支持更广泛的控件数组。为了简短的讨论,请看一下 here
|
9
11
虽然我喜欢递归,但在C语言编程时,它不如迭代有效,所以下面的解决方案可能比约翰·麦茨克建议的解决方案更简洁?这将从给定控件向上搜索层次结构,以查找特定类型的祖先控件。
像这样称呼它
|
10
8
下面是我的代码,用于按类型查找控件,同时控制我们进入层次结构的深度 (maxdepth==0表示无限深)。
|
11
8
激子80…你的代码没有通过用户控件递归,我遇到了一个问题。它击中了网格根并抛出了一个错误。我相信这能帮我解决问题:
|
12
7
我有一个这样的序列函数(它是完全通用的):
获得直系子女:
发现所有的孩子都在不规则的树下:
您可以在窗口上调用此函数以获取所有控件。 拥有集合之后,可以使用LINQ(即,OFTYPE,where)。 |
13
5
由于这个问题非常普遍,可能会吸引人们去寻找一些非常小的问题的答案:如果你只想要一个孩子而不是后代,你可以使用linq:
当然,也有明显的for循环迭代子代。 |
14
2
下面是一个使用灵活谓词的解决方案:
例如,您可以这样称呼它:
|
15
2
这些选项已经讨论了如何在C中遍历可视化树。 它可以在XAML中遍历可视化树,也可以使用RelativeSource标记扩展。 msdn 按类型查找
|
16
1
此代码只修复了@crimsonx answer的错误:
如果类型匹配但名称不匹配,则只需继续递归调用方法(当传递
|
17
0
要从代码中查找给定类型的祖先,可以使用:
这个实现使用迭代而不是递归,这可以稍微快一点。 如果您使用的是C 7,可以稍微短一点:
|
18
-4
试试这个
代码落后
|
Kryptonit364 · 在DataGrid中隐藏调整大小和选择列 2 年前 |
hassan Ma · 从顶部将文本插入WPF文本块 2 年前 |
Arijit · 移动画布内绘制的矩形 2 年前 |
juraj14466 · C#WPF实时图表将点渲染为图像 2 年前 |