【问题标题】:iterate wpf controls迭代 wpf 控件
【发布时间】:2013-01-18 23:58:08
【问题描述】:

我对 C# 很陌生,我又迷路了。我不想问这个问题,但我完全不了解它是如何工作的。我正在尝试遍历 WPF 表单上的 TextBoxes 以清除数据。
我所有的文本框都有前缀“TextBox”,它在一串6个字符之前,即(TextBox3N1W09,TextBox3N1W10 ...)。我想我想使用 VisualTreeHelper,但我不够聪明:
#1) 传入一个变量。我想我理解父母,

XAML

在我的例子中,我将网格命名为:“ThisGrid”,但我不明白如何传入文本框,我不知道是否需要对文本框的名称进行迭代并将它们作为字符串传递或者,如果我可以简单地让 VisualTreeHelper 查看网格中的所有文本框。
#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;
}

【问题讨论】:

  • 这可能会有所帮助stackoverflow.com/questions/2337421/…
  • T 是一种泛型类型,使您能够执行List&lt;Double&gt;List&lt;String&gt; 之类的操作。 List&lt;T&gt; 能够处理您发送的任何有效类型。
  • C.Lang- 感谢您提供有关 'T' 类型的信息,这确实很有意义并且绝对有帮助。

标签: c# wpf controls loops visualtreehelper


【解决方案1】:

我正在尝试遍历 WPF 表单上的文本框以清除 数据

这是错误的方法开始。在 WPF 中,Visual 树是一个复杂的东西,通过它进行导航也可能很复杂。相反,你应该改变你的心态:

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

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

  • 此外,您将 TextBoxes 命名为 TextBox3N1W09、TextBox3N1W10 等的事实让我认为您必须显示 Data ItemsCollection(这就是MVVM 心态开始发挥作用),因此您最好使用ItemsControl 或其派生词之一,以及适当的DataTemplate。我建议您也阅读这些概念。

最重要的是,由于 Visual Tree 的复杂性以及诸如 Dispatcher 线程关联等其他因素,WPF 很快不鼓励对 UI 元素的操作。乍一看可能看起来很复杂,但您很快就会意识到应用正确的模式会简化你的生活。

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

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

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

http://www.wpftutorial.net/

【讨论】:

  • 这绝对是一些有用的信息,我还没有深入研究,但我确实看到了更好地理解这些信息的必要性。如果不是因为需要在工作中学习,我愿意在这件事上花费相当多的时间。感谢您的洞察力,毫无疑问,这将有助于我未来的发展。
猜你喜欢
  • 1970-01-01
  • 2011-08-28
  • 1970-01-01
  • 1970-01-01
  • 2017-12-07
  • 1970-01-01
  • 1970-01-01
  • 2013-01-06
  • 1970-01-01
相关资源
最近更新 更多