2013-10-22 16 views
1

我有以下代碼:如何訪問一個文本框在網格中的一個StackPanel

<StackPanel x:Name="ContentStackPanel"> 
      <Grid> 
       <TextBlock Text="Min Value" /> 
       <TextBox Text="{Binding MinValue}" /> 
      </Grid> 
      <Grid> 
       <TextBlock Text="Max Value" /> 
       <TextBox Text="{Binding MinValue}" /> 
      </Grid> 
</StackPanel> 

我想添加一個按鈕,這樣我可以清除這兩個文本框的文本。此代碼不起作用

 private void ClearAllClick(object sender, RoutedEventArgs e) 
     { 
      foreach (TextBox tb in ContentStack.Children) 
      { 
       tb.Text = String.Empty; 
      } 
     } 

如何訪問ContentStackPanel網格內的文本框?

回答

0

Children財產只給你直接的孩子,不是所有的後代。你可以寫一個輔助方法來遍歷樹:

private void ClearAllClick(object sender, RoutedEventArgs e) 
{ 
    ClearTextChildren(ContentStackPanel); 
} 

private void ClearTextChildren((Panel container) 
{ 
    foreach (var element in container.Children) 
    { 
     if (element is TextBox) 
      ((TextBox)element).Text = String.Empty; 
     else if (element is Panel) 
      ClearChildren((Panel)element); 
    } 
} 

另一種方法(可能會更好,因爲它是脆弱的遍歷代碼UI樹)是使用上的按鈕Command實現,而不是的點擊處理程序。這將允許您清除視圖模型屬性而不是文本框本身。

<Button x:Name="ClearAll" Command="{Binding ClearAllCommand}" /> 

「ClearAllCommand」 應該是在同一個地方的 「MINVALUE」 和 「MaxValue的」:

public ICommand ClearAllCommand { get; private set; } 

使用standard DelegateCommand implementation

ClearAllCommand = new DelegateCommand(arg => { 
    MinValue = null; 
    MaxValue = null; 
}); 
相關問題