Frage

Ich schuf eine ListBox , dass hat eine DataTemplate als Itemtemplate.Allerdings gibt es eine einfache Möglichkeit, die generierten UIElement anstelle der SelectedItem in der codebehind?

Wenn ich auf SelectedItem, Ich bekomme nur das ausgewählte Objekt aus meinem ItemsSource collection.Gibt es eine Möglichkeit, den Zugriff auf die UIElement (dh.die element erstellt von der DataTemplate zusammen mit den gebundenen Objekt)?

War es hilfreich?

Lösung

Sie suchen den ItemContainerGenerator Eigenschaft. Jeder ItemsSource hat eine ItemContainerGenerator Instanz. Diese Klasse hat die folgende Methode, die Sie interessieren könnten: ContainerFromItem (Objektinstanz) .

Wenn Sie einen Griff in die ListBoxItem haben, können Sie voran gehen und die logische und visuelle Struktur sehen. Schauen Sie sich Logischen Baum Helper und Baumstruktur Helper .

Wie Andy sagte in den Kommentaren, nur weil das Element in Ihrer Sammlung vorhanden ist, bedeutet nicht, ein Container für sie erzeugt wurde. Jede Art von Panel Szenario virtualisieren wird diese Frage aufwerfen; UIElements wird über die verschiedenen Elemente wiederverwendet werden. Seien Sie vorsichtig mit dem auch.

Andere Tipps

siz, Andy und Bodeaker absolut Recht.

Hier ist, wie ich in der Lage war, die zum abrufen der textbox listbox ausgewählte Element mithilfe seiner Griff.

var container = listboxSaveList.ItemContainerGenerator.ContainerFromItem(listboxSaveList.SelectedItem) as FrameworkElement;
if (container != null)
{
    ContentPresenter queueListBoxItemCP = VisualTreeWalker.FindVisualChild<ContentPresenter>(container);
    if (queueListBoxItemCP == null)
        return;

    DataTemplate dataTemplate = queueListBoxItemCP.ContentTemplate;

    TextBox tbxTitle = (TextBox)dataTemplate.FindName("tbxTitle", queueListBoxItemCP);
    tbxTitle.Focus();
}

(Hinweis:Hier VisualTreeWalker ist meine eigene wrapper über VisualTreeHelper mit verschiedenen nützlichen Funktionen zur Verfügung gestellt)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top