Los elementos ListBox devuelven cadena, cuando DataTemplate es Button

Estoy creando una aplicación WP 8.1 Silverlight.

Tengo una ObservableCollection de nombres de cadena, que se establece en ItemsSource de un ListBox . ¿Cuáles son los nombres de los botones en el ListBox ? Luego quiero extraer los botones de ListBox , pero el valor de retorno es de tipo string .

El código xaml es:

        

Entonces quiero extraer el elemento del botón:

 for (int i = 0; i < Game_ScrollViewer_online.Items.Count; i++) { var tempType = Game_ScrollViewer_online.Items[i].GetType(); Button tempBut = (Game_ScrollViewer_online.Items[i] as Button); //Do stuff with button } 

Pero como dijo el tipo de devolución es cadena.

¿Por qué no es un botón? ¿Y hay una forma de acceder al botón?

Necesita FrameworkTemplate.FindName Method (String, FrameworkElement) para este propósito:

 private childItem FindVisualChild(DependencyObject obj) where childItem : DependencyObject { for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++) { DependencyObject child = VisualTreeHelper.GetChild(obj, i); if (child != null && child is childItem) return (childItem)child; else { childItem childOfChild = FindVisualChild(child); if (childOfChild != null) return childOfChild; } } return null; } 

Entonces:

 for (int i = 0; i < Game_ScrollViewer_online.Items.Count; i++) { ListBoxItem GameListBoxItem = (ListBoxItem)(Game_ScrollViewer_online.ItemContainerGenerator.ContainerFromIndex(i)); ContentPresenter contentPresenter = FindVisualChild(GameListBoxItem); DataTemplate myDataTemplate = contentPresenter.ContentTemplate; Button tempBut = (Button) myDataTemplate.FindName("Current_game_button", contentPresenter); //Do stuff with button } 

Para resolver FindName falta use FindDescendant esta manera:

 public T FindDescendant(DependencyObject obj) where T : DependencyObject { if (obj is T) return obj as T; int childrenCount = VisualTreeHelper.GetChildrenCount(obj); if (childrenCount < 1) return null; for (int i = 0; i < childrenCount; i++) { DependencyObject child = VisualTreeHelper.GetChild(obj, i); if (child is T) return child as T; } for (int i = 0; i < childrenCount; i++) { DependencyObject child = FindDescendant(VisualTreeHelper.GetChild(obj, i)); if (child != null && child is T) return child as T; } return null; }