Frage

Ich möchte in der Lage, die visuelle ui Baum für ein Element mit einer ID an das visuelle Element der Tag-Eigenschaft gebunden suchen zu durchqueren.

Ich frage mich, wie ich dies tun. Kontrollen haben keine Kinder zu durchqueren.

ich mit LogicalTreeHelper.GetChildren gestartet, die wie beabsichtigt zu funktionieren scheint, bis ich ein TreeView-Steuerelement treffen ... dann LogicalTreeHelper.GetChildren Kinder zurückkehren tut.

Hinweis: der Zweck ist es, das visuelle UI-Element zu finden, die zu dem Datenelement entspricht. Das heißt, eine ID des Elements gegeben, Sehen Sie sich das UI-Element es Anzeigen finden.

Edit: Ich bin anscheinend nicht bin Erklärung dieses gut genug. Ich Bindung einige Datenobjekte zu einem TreeView-Steuerelement und dann ein bestimmtes Element zu wollen programaticly dass die ID-Geschäftsobjekt gegeben auszuwählen. Ich sehe nicht, warum es so schwer ist, die visuelle Struktur travers und das Element finde ich möchte, wie die ID des Datenobjekts in der Tag-Eigenschaft des entsprechenden visuellen Element ist. Ich bin mit Mole und ich bin in der Lage das UI-Element mit der entsprechenden ID zu finden in seinem Tag. Ich kann einfach nicht das visuelle Element in Code. LogicalTreeHelper keine Elemente in der Struktur durchqueren. Weder hat ItemContainerGenerator.ContainerFromItem etwas für Elemente in der Baumansicht abgerufen werden.

Keine korrekte Lösung

Andere Tipps

Schauen Sie eine dieser Probe . Ich fand diese Probe sehr gut geschrieben und ich glaube, dass View-Modell mit Ihrem Problem lösen wird.

Edit: Und in Bezug auf die Suche nach der visuellen Struktur. Sowohl TreeView und TreeViewItem haben Items-Eigenschaft, die Sie für Ihre Id durchqueren und suchen können. Können Sie es nicht benutzen?

Das Problem ist, dass nur die TreeViewItems die sichtbar sind, erstellt wurden - WPF erstellt nicht alle Elemente vorne (aufgrund der Länge der Zeit, die für große Bäume nehmen könnte, könnte ich mir vorstellen)

.

Ein besserer Ansatz wäre es, eine Datenstruktur zu schaffen, die die Struktur der Baumdaten nachahmt, und verwenden Sie die Datenbindung des TreeView zu sagen, wie diese Daten angezeigt werden soll. Ich kann ein einfaches Beispiel aufschreiben, wenn Sie möchten.

EDIT: Basierend auf Ihrem bearbeiten, das wird nur funktionieren, wenn das UI Element hat für das Objekt erstellt wurde, die nicht garantiert ist. Werfen Sie einen Blick auf die IItemContainerGenerator Schnittstelle ( abgerufen durch den Aufruf ItemsControl.ItemContainerGenerator . ich glaube, dass eine Methode, die den UI-Container (dh TreeViewItem) für eine gegebene Datenobjekt zurückkehren wird. das nur, wenn der UI-Container zuvor erstellt worden funktioniert hat.

LogicalTreeHelper.GetChildren schaut auf dem Logicalchildren-Eigenschaft des Steuerelements, die standardmäßig für eine TreeView (abgeleitet von Itemscontrol-Klasse) null ist. Sie könnten den Typ der Objekte, die von GetChildren zurück prüfen haben, und wenn Sie zu einem TreeView-Objekt kommen, dann einige spezielle Verarbeitungslogik tun.

Die spezielle Logik wahrscheinlich sein wird, über den Baum Items Iterieren und versuchte, sie zu einem Framework (die Basisklasse, die Tag-Eigenschaft definiert) zu werfen.

Ich habe von Rekursion durch die visuelle Struktur mit VisualTreeHelper ähnliche Dinge getan. Schauen Sie sich dieser Blog-Eintrag geschrieben von Jim Baltzell-Gauthier - es einige Hilfsmethoden bietet die visuelle Struktur und das Rück ein Elements mit Namen und Typ zu gehen, ist dies ähnlich den Code, den ich auf meinem aktuellen Projekt verwenden. Sie könnten diese Funktionen ändern, um es Variablenwerte überprüfen anstelle oder zusätzlich zu nennen.

Eine Sache, von der Baumstruktur bewusst zu sein, dass sie nicht da sind, es sei denn die Visuals geladen wurden - Sie können einen Delegaten auf das „Loaded“ Ereignis des visuellen Elements anbringen müssen, wenn die visuellen nicht gewesen noch an dem Punkt gemacht, dass Sie den Code aufrufen.

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