我对C#很陌生,我再次迷失了。我讨厌提出这个问题,但我理解这是如何工作的。我试图在WPF表单上遍历我的TextBox来清除数据。
我的所有文本框都有前缀“TextBox”,它前面是一个6个字符长的字符串,即(TextBox3N1W09,TextBox3N1W10 ......)。我想我想使用VisualTreeHelper,但我不够聪明:
#1)传入一个变量。我想我理解父母,
XAML<网格名称=“ThisGrid”>
在我的情况下我命名为Grid:“ThisGrid”但我不知道如何传入TextBoxes,我不知道我是否需要做一些像TextBoxes的名称迭代并将它们作为字符串传递或者如果我可以简单地让VisualTreeHelper查看网格中的所有TextBox #2)传入这些文本框名称或文本框对象后,我不确定如何处理结果:
{
将孩子归为T;
}
我完全迷失了“T”,我该怎么办“T”?我是否需要在方法或我调用方法的地方做些什么。就像我在开始时所说的那样,我只想清除文本框,这似乎并不那么困难,但我对它有一段时间了。
public static T FindVisualChildByName<T>(DependencyObject parent, string name) where T : DependencyObject
{
for (int i = 0; i < VisualTreeHelper.GetChildrenCount(parent); i++)
{
var child = VisualTreeHelper.GetChild(parent, i);
string controlName = child.GetValue(Control.NameProperty) as string;
if (controlName == name)
{
return child as T;
}
else
{
T result = FindVisualChildByName<T>(child, name);
if (result != null)
return result;
}
}
return null;
}
答案 0 :(得分:1)
我正在尝试遍历WPF表单上的TextBox,以清除 数据
开始时这是错误的方法。在WPF中,Visual树是一个复杂的东西,通过它进行导航也很复杂。相反,你应该改变你的心态:
WPF最适合使用MVVM模式,它鼓励将应用程序逻辑和数据与表示层分离。我建议你研究一下这个模式,否则你会发现自己一遍又一遍地试图在WPF中做“看似简单”的事情(例如清除TextBoxes)。
您必须学会将UI视为存储数据的位置,而不是显示数据。因此,您实际想要清除的字符串不是任何UI元素的属性,而是它们是模型或 ViewModel 的一部分。我建议你在WPF中阅读MVVM和DataBinding。
此外,您将TextBoxes TextBox3N1W09命名为TextBox3N1W10等,这让我觉得您必须显示数据项的集合(这就是MVVM心态开始发挥作用,因此你最好使用ItemsControl
或其衍生产品之一,以及适当的DataTemplate
。我建议你也阅读这些概念。
最重要的是,由于Visual Tree的复杂性以及Dispatcher线程亲和力等其他因素,WPF很快就不鼓励操纵UI元素。乍一看似乎很复杂,但你会很快意识到应用正确的模式将简化你的生活。
这里有一些你可以开始阅读的文章:
http://en.wikipedia.org/wiki/Model_View_ViewModel