可视化树-查找内容相等的标签(窗口上的任何位置)
本文关键字:标签 窗口 任何 位置 查找 可视化 | 更新日期: 2023-09-27 18:19:46
我有许多标签作为许多不同堆栈面板的子级,这些面板都是列表框的子级。我需要引用其中一个标签Content.toString()=="criteria"。换句话说,在WPF中遍历可视化树将是一个巨大的痛苦,因为有许多父/子方法要运行。有没有一种方法可以在我的窗户上找到一个没有名字的标签,并假设我不知道它在树上有多远?也许有一个窗口中所有东西的项目集合(没有继承权),我可以对其运行LINQ??
如果你想知道为什么我没有标签的名称,那是因为它们是由数据模板生成的。
非常感谢
Dan
看起来就像您正在寻找的:查找数据模板生成的元素
我对@anatoliiG链接的代码进行了轻微更改,以便返回指定类型的所有子控件(而不是第一个):
private IEnumerable<childItem> FindVisualChildren<childItem>(DependencyObject obj)
where childItem : DependencyObject
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
{
DependencyObject child = VisualTreeHelper.GetChild(obj, i);
if (child != null && child is childItem)
yield return (childItem)child;
foreach (var childOfChild in FindVisualChildren<childItem>(child))
yield return childOfChild;
}
}
有了这个功能,你可以做这样的事情:
var criteriaLabels =
from cl in FindVisualChildren<Label>(myListBox)
where cl.Content.ToString() == "criteria"
select cl;
foreach (var criteriaLabel in criteriaLabels)
{
// do stuff...
}
我认为这段代码可能对您有用:
foreach (Control control in this.Controls)
{
if (control.GetType() == typeof(Label))
if (control.Text == "yourText")
{
// do your stuff
}
}
我用这个问题作为我的基础
我不知道这是否有帮助:
如果您正在listBox中的每个堆栈面板中查找特定标签,那么您可以只查找具有特定名称的特定标签并比较内容。