foreach (UIElement element in LayoutRoot.Children) { if (element is UserControl) { UserControl current = ((UserControl)element); } }
楼上的代码即可。 如果是浏览可视树。可以参考如下代码: using System; using System.Collections.Generic; using System.Text; using System.Windows.Controls; using System.Windows; using System.Windows.Media; using System.Diagnostics; using System.Windows.Input; using System.Collections.ObjectModel;namespace Microsoft.Samples.KMoore.WPFSamples.VisualTreeViewer { public class VisualTreeItem { public VisualTreeItem(DependencyObject element) { _element = element; } public IEnumerable<VisualTreeItem> Children { get { if (_children == null) { _children = new List<VisualTreeItem>(VisualTreeHelper.GetChildrenCount(_element)); for (int i = 0; i < VisualTreeHelper.GetChildrenCount(_element); i++) { _children.Add(new VisualTreeItem(VisualTreeHelper.GetChild(_element, i))); } } return _children; } } public string Name { get { FrameworkElement fe = _element as FrameworkElement; if (fe != null && !String.IsNullOrEmpty(fe.Name)) { return Type + ":" + fe.Name; } else { return Type; } } } public string Type { get { return _element.GetType().Name; } } private DependencyObject _element; private List<VisualTreeItem> _children; }} 调用 _vti = new VisualTreeItem(listBox); treeView.ItemsSource = _vti.Children;
不好意思看错了!~ sorry!~
把这个layoutRoot改成this.
你的控件应该都放在一个Grid里面吧?把layoutRoot改为你的Grid的name试试
看看你Window最外层的是哪个容器就用哪个。
我要用递归方法来实现,,因为Grid下面还有好多控件
如果是遍历所有子代的话,需要用到VisualTreeHelper,代码如下:static public List<Visual> EnumVisual(Visual myVisual) { List<Visual> list = new List<Visual>(); for (int i = 0; i < VisualTreeHelper.GetChildrenCount(myVisual); i++) { Visual childVisual = (Visual)VisualTreeHelper.GetChild(myVisual, i); if (childVisual != null) { list.Add(childVisual); EnumVisual(childVisual); } } return list; }
{
if (element is UserControl)
{
UserControl current = ((UserControl)element);
}
}
如果是浏览可视树。可以参考如下代码:
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows.Controls;
using System.Windows;
using System.Windows.Media;
using System.Diagnostics;
using System.Windows.Input;
using System.Collections.ObjectModel;namespace Microsoft.Samples.KMoore.WPFSamples.VisualTreeViewer
{
public class VisualTreeItem
{
public VisualTreeItem(DependencyObject element)
{
_element = element;
} public IEnumerable<VisualTreeItem> Children
{
get
{
if (_children == null)
{
_children = new List<VisualTreeItem>(VisualTreeHelper.GetChildrenCount(_element));
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(_element); i++)
{
_children.Add(new VisualTreeItem(VisualTreeHelper.GetChild(_element, i)));
}
}
return _children;
}
} public string Name
{
get
{
FrameworkElement fe = _element as FrameworkElement;
if (fe != null && !String.IsNullOrEmpty(fe.Name))
{
return Type + ":" + fe.Name;
}
else
{
return Type;
}
}
} public string Type
{
get
{
return _element.GetType().Name;
}
} private DependencyObject _element; private List<VisualTreeItem> _children;
}}
调用
_vti = new VisualTreeItem(listBox); treeView.ItemsSource = _vti.Children;
sorry!~
把这个layoutRoot改成this.
{
List<Visual> list = new List<Visual>();
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(myVisual); i++)
{
Visual childVisual = (Visual)VisualTreeHelper.GetChild(myVisual, i);
if (childVisual != null)
{
list.Add(childVisual);
EnumVisual(childVisual);
}
}
return list;
}
谢谢了