WPF - 按下按钮

时间:2015-05-12 12:28:40

标签: wpf xaml

我有一些texBox用户必须输入一些数据。

textBox1
textBox2
textBox3
textBox4

填写textBox后,用户按下按钮,其他内容完成。

我想在用户点击按钮后立即清除所有textBox

我知道我可以使用.clear

一个接一个地做到这一点
textBox1.clear();
textBox2.clear();
textBox3.clear();
textBox4.clear();

但是这对我来说有点像 dirty ,因为我有超过4个textBoxes。

所以我考虑从1循环到number_of_textboxes然后.clean每个循环,但我不知道如何获得number_of_texboxes。有没有办法得到它所以我可以做这个循环,或任何其他简单的方法来实现这一点?

提前致谢。

2 个答案:

答案 0 :(得分:1)

您可以遍历UI中的所有元素并仅提取Textbox es,但与直接代码相比,它几乎没有效率。但是,您可以使用VisualTreeHelper class的递归方法执行此操作,如下所示:

GetChildrenOfType<TextBox>(this).ToList().ForEach(textBox => textBox.Clear());

...

public static IEnumerable<T> GetChildrenOfType<T>(DependencyObject dependencyObject) where T : DependencyObject
{
    if (dependencyObject != null)
    {
        for (int index = 0; index < VisualTreeHelper.GetChildrenCount(dependencyObject); index++)
        {
            DependencyObject child = VisualTreeHelper.GetChild(dependencyObject, index);
            if (child != null && child is T) yield return (T)child;
            foreach (T childOfChild in GetChildrenOfType<T>(child)) yield return childOfChild;
        }
    }
}

这当然假设this是相关TextBox es的父控件......如果没有,你可以这样调用:

GetChildrenOfType<TextBox>(ParentGrid).ToList().ForEach(textBox => textBox.Clear());

答案 1 :(得分:1)

与Sheridan说的有些相似:

 void ClearAllTextBoxes(DependencyObject obj)
    {
        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++)
        {
            if (obj is TextBox)
                ((TextBox)obj).Text = null;
            LoopVisualTree(VisualTreeHelper.GetChild(obj, i));
        }
    }

但是对于WPF,通常最好清除文本框绑定的对象。这可以确保您的逻辑不依赖于UI实现。