我想获得给定页面上给定类型的所有控件的列表,但我遇到了问题。看来,VisualTreeHelper可能只会返回已加载的控件?我试图关闭虚拟化,但这似乎没有帮助。任何人都可以想出另一种方式来获得所有的控制,或者可能强制加载UI,以便下面的方法起作用吗?WPF - 获取页面上给定类型的所有控件的集合?
我借这个从MSDN:
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;
}
}
}
}
是否使用'FlowDocuments ''等'在'页面? –
没有。只是一系列UIElements。我遇到的真正问题是从我的TabControl获取特定的控件。只有第一个TabItem似乎返回任何东西。我假设在页面的Load事件期间调用代码时出现虚拟化问题,并且只有第一个TabItem是“可见的”。 –
我怀疑'TabControl'可能会重复使用'TabItem'模板,只是在切换标签页时更改其内容。如果您更改标签,是否还有另一套控件? –