2013-05-18 5 views
0

Визуальный код дереваВизуальное дерево Helper делает ListBox SelectionChanged огонь дважды

public static IEnumerable<T> FindVisualChildren<T>(DependencyObject depObj) where T : DependencyObject 
    { 
     if (depObj != null) 
     { 
      for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++) 
      { 
       DependencyObject child = VisualTreeHelper.GetChild(depObj, i); 
       if (child != null && child is T) 
       { 
        yield return (T)child; 
       } 

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

SelectionChanged код

private void mylistBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
    { 

     if (mylistBox.SelectedItem == null) 
      return; 
      foreach (Button tb in FindVisualChildren<Button>(mainListBox)) 
     { 

      Debug.WriteLine(tb.Name); 
     } 

     } 

выход Примечание записывает имя двух кнопку дважды, так это петли 4 раза, и он имеет только 2 кнопки. optionBtn optionBtn2 optionBtn optionBtn2

ответ

1

Сколько элементов есть в mainListBox во время выполнения? Это должно быть 2, и поэтому он дважды печатает имена кнопок (по 2 раза для каждого элемента в списке). Нет ничего плохого в SelectionChanged или VisualTreeHelper

+0

Но я указываю selectIndex. Кажется, вы правы, но почему я не могу сосредоточиться на selectedIndex? – jamdownian

+0

Обратите внимание, что xaml во время выполнения будет отличаться от того, что вы видите, особенно в случае элемента управления List, где для каждого элемента списка отображаются определенные элементы. Что вы пытаетесь сделать точно? –

+0

У меня есть список задач, и все, что я хочу сделать, это удалить этот индекс и отобразить сообщение, но сообщение перестает появляться. Так что если есть 5 предметов, они появляются 5 раз. – jamdownian

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