Non sono stato in grado di trovare una soluzione pulita al seguente problema, anche se ci sono già alcune domande correlate su SO.Elemento di accesso in Silverlight DataTemplate
Se si dispone di un modello di dati che viene utilizzato più volte, ad esempio, un TreeViewItem.HeaderTemplate, come posso modificare qualcosa il modello solo per alcuni dei TreeViewItems.
Ad esempio, supponiamo che il mio TVI HeaderTemplate abbia un blocco di testo e, a seconda della stringa, desidero rendere grassetto il fontweight.
voglio fare qualcosa di simile:
((TextBlock)myTreeView.Items.ElementAt(0).FindName("myTextBlock")).FontWeight = FontWeights.Bold;
Qualcuno ha una soluzione per questo? -> Grazie Evan
Modifica: C'è un modo per scrivere una funzione generica per ottenere un controllo basato sul suo nome anche se si trova in un modello di dati?
LayoutRoot.FindName("myTextBlock");
funzionerebbe se myTextBlock non fosse in un datatemplate. Come posso scrivere una funzione findElementInDataTemplate(string elementName, string parentName)
?
La ragione per cui la risposta di Evan non è quella che sto cercando è perché sto sviluppando un controllo. Voglio che lo sviluppatore dell'applicazione che utilizza il mio controllo sia in grado di modificare qualsiasi elemento nel controllo. Se utilizzo la soluzione di Evan, ciò richiederebbe allo sviluppatore dell'applicazione di avere accesso a tutti i modelli nel controllo. Possibile, ma non ideale. Grazie!
Se avete usato un DataTemplate che contiene un controllo denominato "myTextBlock" più volte e poi hanno una sorta di 'LayoutRoot.FindName (operazione "myTextBlock"), quale dei molti controlli chiamati "myTextBlock" vorresti che quell'operazione fosse restituita? – AnthonyWJones
@AnthonyWJones Buon punto, modificato per includere un parametro parentName. – NickHalden
@AnthonyWJones: normalmente non sono possibili due controlli con nome. se si mantiene il controllo di due lo stesso nome nel modello, il modello è considerato sbagliato. – Mahantesh