我有一个Grid
的WPF应用程序,其中有多个TextBox
。如何通过点击按钮来制作每个TextBox.Text = null;
?
答案 0 :(得分:4)
尝试一下:
private void button1_Click(object sender, RoutedEventArgs e)
{
foreach (UIElement control in myGrid.Children)
{
if (control.GetType() == typeof(TextBox))
{
TextBox txtBox = (TextBox)control;
txtBox.Text = null;
}
}
}
答案 1 :(得分:3)
这样的事情会起作用:
private void Button_Click(object sender, RoutedEventArgs e) {
foreach (UIElement element in this.grid.Children) {
TextBox textBox = element as TextBox;
if (textBox == null)
continue;
textBox.Text = null;
}
}
答案 2 :(得分:1)
Tom和CodeNaked提供的代码将按照您的意愿执行,但我通常建议不要使用此逻辑。
网格可以帮助您组织控件直观,它是布局容器。绝不应该用它来在幕后组织你的控件逻辑。
正如我所说,这是非常普遍的建议。您的计划可能会从另一种方法中受益。
答案 3 :(得分:1)
这个问题有多种方法。
第一种是混合方法,您可以通过绑定将数据流向文本框,然后单击按钮删除数据。
首先,您需要确保您的数据类实现INotifyPropertyChanged
:
public class Foo : INotifyPropertyChanged
{
private string bar;
private string baz;
public string Bar
{
get { return this.bar; }
set
{
this.bar = value;
// this is where the magic of bindings happens
this.OnPropertyChanged("Bar");
}
}
// rest of the class here...
}
通过绑定在您的XAML中引用:
<Grid>
<Grid.RowDefinitions>
<!-- ... -->
</Grid.RowDefinitions>
<TextBox Grid.Row="0"
Text="{Binding Bar}" />
<TextBox Grid.Row="1"
Text="{Binding Baz}" />
<!-- A more complete example would use Button.Command -->
<Button Grid.Row="2"
Content="CLEAR"
Click="ClearButton_Click" />
最后,使用DataContext
和Window
代码隐藏中的路由事件处理程序连接这些绑定:
public Window1()
{
this.InitializeComponent();
// sets up the DataContext used by the bindings
this.Clear();
}
private void ClearButton_Click(object sender, RoutedEventArgs e)
{
this.Clear();
}
private void Clear()
{
this.DataContext = new Foo();
}
这种方法可以帮助您更好地处理更复杂的UI。
最后的努力将是:
/// <summary>This is a bad choice.</summary>
private void ClearButton_Click(object sender, RoutedEventArgs e)
{
// assumes the Grid is named MyGrid
foreach (var textBox in this.MyGrid.Children.OfType<TextBox>())
{
textBox.Text = null;
}
}