查找特定名称的控件时需要借助VisualTreeHelper和递归。
下面的代码为一个方法函数,第一个参数表示你当前所在的窗口,第二个参数表示你要查找的控件的名字,方法返回值即为找到的控件本身。
public T FindChild<T>(DependencyObject parent, string childName)
where T : DependencyObject
{
if (parent == null) return null;
T foundChild = null;
int childrenCount = VisualTreeHelper.GetChildrenCount(parent);
for (int i = 0; i < childrenCount; i++)
{
var child = VisualTreeHelper.GetChild(parent, i);
// 如果子控件不是需查找的控件类型
T childType = child as T;
if (childType == null)
{
// 在下一级控件中递归查找
foundChild = FindChild<T>(child, childName);
// 找到控件就可以中断递归操作
if (foundChild != null) break;
}
else if (!string.IsNullOrEmpty(childName))
{
var frameworkElement = child as FrameworkElement;
// 如果控件名称符合参数条件
if (frameworkElement != null && frameworkElement.Name == childName)
{
foundChild = (T)child;
break;
}
}
else
{
// 查找到了控件
foundChild = (T)child;
break;
}
}
return foundChild;
}
这样就可以得到特定的控件。
调用方法代码为:
TextBox foundTextBox =
UIHelper.FindChild<TextBox>(Application.Current.MainWindow, myTextBoxName);
myTextBoxName是一个变量,表示你的控件的名称。也可以直接写名称,用引号引起来。