Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 迭代wpf控件_C#_Wpf_Controls_Loops_Visualtreehelper - Fatal编程技术网

C# 迭代wpf控件

C# 迭代wpf控件,c#,wpf,controls,loops,visualtreehelper,C#,Wpf,Controls,Loops,Visualtreehelper,我对C#很陌生,我又迷路了。我不想问这个问题,但我无法理解这是怎么回事。我试图在WPF表单上遍历我的文本框以清除数据 我所有的文本框都有前缀“TextBox”,它位于一个6个字符长的字符串之前,即(TextBox3N1W09,TextBox3N1W10…)。我想我想使用VisualTreeHelper,但我不够聪明: #1) 传入一个变量。我想我了解家长 XAML 在我的例子中,我将网格命名为:“ThisGrid”,但我不知道如何传入文本框,我不知道是否需要对文本框的名称进行迭代并将其作为字符串

我对C#很陌生,我又迷路了。我不想问这个问题,但我无法理解这是怎么回事。我试图在WPF表单上遍历我的文本框以清除数据
我所有的文本框都有前缀“TextBox”,它位于一个6个字符长的字符串之前,即(TextBox3N1W09,TextBox3N1W10…)。我想我想使用VisualTreeHelper,但我不够聪明:
#1) 传入一个变量。我想我了解家长

XAML

在我的例子中,我将网格命名为:“ThisGrid”,但我不知道如何传入文本框,我不知道是否需要对文本框的名称进行迭代并将其作为字符串传递,或者是否可以让VisualTreeHelper查看网格中的所有文本框。
#2) 传入这些textbox名称或textbox对象后,我不确定如何处理结果:

{
将子项返回为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;
}
public static T FindVisualChildByName(DependencyObject父对象,字符串名称),其中T:DependencyObject
{
for(int i=0;i
我试图在WPF表单上遍历我的文本框以清除 资料

这是一个错误的开始。在WPF中,可视化树是一件复杂的事情,在其中导航也可能很复杂。相反,你应该改变你的心态:

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

  • 您必须学会将UI视为显示数据的方式,而不是存储数据的地方。因此,实际上要清除的字符串不是任何UI元素的属性,而是模型视图模型的一部分。我建议您阅读有关MVVM和WPF中的数据绑定的内容

  • 此外,您将文本框命名为TextBox3N1W09、TextBox3N1W10等,这让我觉得您必须显示数据项的集合(这是MVVM的思维方式),因此您最好使用
    项控件或其派生工具来实现这一点,以及适当的
    数据模板
    。我建议你也仔细阅读一下这个概念

归根结底,WPF很快就阻止了对UI元素的操作,因为可视化树和其他事物(如Dispatcher thread affinity等)的复杂性。乍一看,它可能看起来很复杂,但您很快就会意识到,应用正确的模式将大大简化您的生活

以下是一些你可以开始阅读的文章:

我试图在WPF表单上遍历我的文本框以清除 资料

这是一个错误的开始。在WPF中,可视化树是一件复杂的事情,在其中导航也可能很复杂。相反,你应该改变你的心态:

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

  • 您必须学会将UI视为显示数据的方式,而不是存储数据的地方。因此,实际上要清除的字符串不是任何UI元素的属性,而是模型视图模型的一部分。我建议您阅读有关MVVM和WPF中的数据绑定的内容

  • 此外,您将文本框命名为TextBox3N1W09、TextBox3N1W10等,这让我觉得您必须显示数据项的集合(这是MVVM的思维方式),因此您最好使用
    项控件或其派生工具来实现这一点,以及适当的
    数据模板
    。我建议你也仔细阅读一下这个概念

归根结底,WPF很快就阻止了对UI元素的操作,因为可视化树和其他事物(如Dispatcher thread affinity等)的复杂性。乍一看,它可能看起来很复杂,但您很快就会意识到,应用正确的模式将大大简化您的生活

以下是一些你可以开始阅读的文章:


这可能会有帮助
T
是一种通用类型,允许您执行
List
List
等操作<代码>列表
能够处理您发送的任何有效类型。C.Lang-感谢您提供有关“T”类型的信息,这确实有意义,而且肯定会有帮助。这可能会有帮助
T
是一种通用类型,允许您执行
List
List
等操作<代码>列表
能够处理您选择的任何有效类型