2011-03-16 6 views
0

У меня есть приложение с элементом управления вкладкой и несколькими текстовыми полями на каждой вкладке, и когда пользователь говорит об этом, я хотел бы, чтобы каждое текстовое поле в окне (называемое MainWindow) очищалось. Я использовал метод, описанный here, но кажется, что он работает только для текстовых полей на вкладке, в которых он находится в фокусе.WPF - очистить все текстовые поля в tabcontrol не работает

+0

пожалуйста, проверьте, если мое решение работает для вас. –

ответ

4

Попробуйте это:

void ClearTextBoxes(DependencyObject obj) 
{ 
    TextBox tb = obj as TextBox; 
    if (tb != null) 
     tb.Text = ""; 

    for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj as DependencyObject); i++) 
     ClearTextBoxes(VisualTreeHelper.GetChild(obj, i)); 
} 

private void Button_Click(object sender, RoutedEventArgs e) 
{ 
    ClearTextBoxes(this); 
} 
+0

Это, похоже, не влияет на мой текущий метод. – user646265

+0

Может ли вы разработать? –

+0

Когда я очищаю текстовые поля, очищаются только текстовые поля, содержащиеся на вкладке в фокусе. – user646265

1

Попробуйте заменить вызовы VisualTreeHelper.GetChildren с LogicalTreeHelper.GetChildren

LogicalTreeHelper получает фактическое визуальное дерево. обычно это больше, чем логическое дерево, но в этом случае, поскольку другие вкладки не видны - визуальное поддерево в этих вкладках не создается. LogicalTree все равно должен быть там, так что это должно сработать.

Смежные вопросы