ListBox-Elemente geben eine Zeichenfolge zurück, wenn DataTemplate Button ist

Ich erstelle eine WP 8.1 Silverlight App.

Ich habe eine ObservableCollection von String-Namen, die auf ItemsSource einer ListBox . Welche Namen haben Schaltflächen in der ListBox Ich möchte dann die Schaltflächen aus der ListBox , aber der Rückgabewert ist vom Typ string .

Der Xaml-Code ist:

        

Ich möchte dann das Button-Element extrahieren:

 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 } 

Aber wie gesagt ist der Rückgabetyp String.

Warum ist es nicht Knopf? Und gibt es eine Möglichkeit, auf die Schaltfläche zuzugreifen?

Sie benötigen dazu die FrameworkTemplate.FindName Method (String, FrameworkElement) :

 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; } 

Dann:

 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 } 

Um fehlende FindName zu lösen, verwenden Sie FindDescendant wie FindDescendant :

 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; }