迭代WPF控件

本文关键字:控件 WPF 迭代 | 更新日期: 2023-09-27 17:54:50

我是c#的新手,我又迷路了。我讨厌问这个问题,但我完全搞不懂这是怎么回事。我试图在WPF表单上迭代我的文本框以清除数据。
我所有的文本框都有前缀"TextBox",前面是一串字符6个字符长,即(TextBox3N1W09, TextBox3N1W10…)。我想我想使用VisualTreeHelper,但我不够聪明:
#1)传入一个变量。我想我理解家长,

XAML & lt;Grid Name="ThisGrid">

在我的情况下,我命名的网格:"ThisGrid",但我不明白如何在文本框传递,我不知道我是否需要做一些像迭代的东西通过文本框的名称和传递它们作为字符串,或者如果我可以简单地让VisualTreeHelper看看我所有的网格内的文本框。
#2)一旦这些文本框名称或文本框对象传入,我不确定如何处理结果:

{


}

我完全忘了"T"是什么,我该怎么处理"T"?我是否需要在方法中做些什么或者在调用方法的地方做些什么。就像我一开始说的,我只是想清除文本框,这似乎并不困难,但我有一个heck时间与它。

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;
}

迭代WPF控件

我正试图在WPF表单上迭代我的文本框以清除文本框数据

那一开始就是错误的方法。在WPF中,可视化树是一个复杂的东西,通过它导航也可能很复杂。相反,你应该改变你的思维方式:

  • WPF最适合使用MVVM模式,它鼓励从表示层分离应用程序逻辑和数据。我建议你研究一下这个模式,否则你会发现自己一次又一次地试图在WPF中做"看似简单"的事情(比如清除文本框)。

  • 你必须学会把UI看作是存储数据的地方,而是显示数据的一种方式。因此,您实际想要清除的字符串不是任何UI元素的属性,而是ModelViewModel的一部分。我建议你阅读一下WPF中的MVVM和数据绑定。

  • 另外,您将文本框命名为TextBox3N1W09, TextBox3N1W10等。让我认为你必须显示数据项集合(这是MVVM心态开始发挥作用),因此你最好使用ItemsControl或其衍生物之一和适当的DataTemplate来做这件事。我建议你也好好读读这些概念

底线是,WPF很快就会阻止对UI元素的操作,因为Visual Tree和其他事情(如Dispatcher线程关联等)的复杂性。乍一看,这似乎很复杂,但你很快就会意识到,应用正确的模式将大大简化你的生活。

这里有一些你可以开始阅读的文章:

http://en.wikipedia.org/wiki/Model_View_ViewModel

http://msdn.microsoft.com/en-us/library/ms750612.aspx

http://www.wpftutorial.net/