我正在开发WPF应用程序。在我的应用程序中,我想按类类型访问对象。
我尝试了以下代码块。
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 (Storyboard sb in FindVisualChildren<Storyboard>(window))
{
// There is no accessable storyboard object
}
我可以访问Control
对象,但不能访问非UIElement
对象。例如:我可以找到RadioButton
,但是找不到Storyboard
个对象。
答案 0 :(得分:2)
如评论中所述,Storyboard
不是添加到视觉树的视觉元素,因此VisualTreeHelper
将无法找到它。
但是您可以将所有Storyboards
添加到窗口的Resources
字典中并遍历资源:
Storyboard sb1 = new Storyboard();
Storyboard sb2 = new Storyboard();
...
Resources.Add("sb1", sb1);
Resources.Add("sb2", sb2);
...
foreach (Storyboard sb in Resources.Values.OfType<Storyboard>())
{
...
}