wpf generare manualmente contenitore TreeViewItem
-
30-09-2019 - |
Domanda
Io sono la creazione di un controllo TreeView in fase di esecuzione. Ha diversi nodi (TreeViewItem), ognuno con un nome. Inizialmente è compressa. Un separato casella combinata visualizza i nomi di tutti i TreeViewItem. Devo evidenziare un TreeViewItem in base al nome scelto. Sto usando una funzione ricorsiva e ottiene il contenitore TreeViewItem in questo modo:
if (parent.ItemContainerGenerator.Status != GeneratorStatus.ContainersGenerated)
continue;
TreeViewItem container = parent.ItemContainerGenerator.ContainerFromItem(child).As<TreeViewItem>();
ma è
parent.ItemContainerGenerator.Status = GeneratorStatus.NotStarted
per tutte le voci crollate. Come faccio a generare contenitori per manualmente (Senza di loro espansione)?
Soluzione
Ogni volta che ci si trova a camminare albero visuale si dovrebbe pensare seriamente a costruire un modello di vista.
il modello di visualizzazione in grado di aumentare la funzionalità treeviews senza preoccuparsi delle tipi di problemi che si trovano ad affrontare.
Il modello di visualizzazione per l'applicazione avrebbe un paio di ulteriori proprietà
IsSelected
IsExpanded
IsHighlighted
così come il vostro
Data
allora si dovrebbe associare (utilizzando un ItemContainerStyle) l'IsSelected, IsHighlighted e IsExpanded al TreeViewItem, poi come si aveva una collezione di questi modelli vista si potrebbe fare la ricerca sul modello di vista e solo impostare la proprietà IsHighlighted. Il modello di vista sarebbe quindi rispondere ed a causa del legame con lo stile che avrebbe evidenziare il TreeViewItem se si voleva. Si potrebbe anche fare cose funky come espandere tutti i nodi di cui sopra. La visualizzazione ad albero dovrebbe rispondere a questo.
Il modello di vista quando combinato con una vista ad albero dà molta più flessibilità e si ferma quei albero strisciando esercizi visivi (che sono un hack, e la sensazione sporca)