WPF: Получить следующий / предыдущий визуальный объект

#c# #wpf

#c# #wpf

Вопрос:

У меня есть, StackPanel содержащий ряд TextBox . Есть ли способ получить следующие / предыдущие визуальные элементы?

Функциональность, которую я хочу, довольно аналогична .next() функции jQuery, которая получает следующий объект.

Ответ №1:

Вы можете попробовать следующий метод для перечисления визуального дерева.

 public static IEnumerable<T> FindVisualChildren<T>
(DependencyObject depObj, string childName) where T : DependencyObject
{

    if (depObj != null)
    {
        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i  )
        {

            DependencyObject child = VisualTreeHelper.GetChild(depObj, i);
            var frameworkElement = child as FrameworkElement;
            if (child != null amp;amp; frameworkElement.Name == childName)
            {
                yield return (T)child;
            }

            foreach (T childOfChild in FindVisualChildren<T>(child, childName))
            {
                yield return childOfChild;
            }
        }
     }
}
  

Предполагая, что вы назвали свои текстовые поля "tbInsideStackPanel" , используйте его как:

 foreach (var textBox in FindVisualChildren<TextBox>(this.stackPanel1, 
              "tbInsideStackPanel").ToList())
{
   textBox.Background = Brushes.Blue;
}