No he podido encontrar una solución limpia al siguiente problema aunque ya hay algunas preguntas relacionadas en SO.Elemento de acceso dentro de Silverlight DataTemplate
Si tengo una plantilla de datos que se usa varias veces, por ejemplo, TreeViewItem.HeaderTemplate, ¿cómo puedo cambiar algo la plantilla solo para algunos TreeViewItems?
Por ejemplo, digamos que mi TVI HeaderTemplate tiene un bloque de texto y, dependiendo de la cadena, quiero que el fontweight sea negrita.
quiero hacer algo como esto:
((TextBlock)myTreeView.Items.ElementAt(0).FindName("myTextBlock")).FontWeight = FontWeights.Bold;
¿Alguien tiene una solución para esto? -> Gracias Evan
Edit: ¿Hay alguna manera de escribir una función genérica para obtener un control basado en su nombre incluso si está en una plantilla de datos?
LayoutRoot.FindName("myTextBlock");
funcionaría si myTextBlock no estuviera en una plantilla de datos. ¿Cómo puedo escribir una función findElementInDataTemplate(string elementName, string parentName)
?
La razón por la que la respuesta de Evan no es lo que estoy buscando es porque estoy desarrollando un control. Quiero que el desarrollador de la aplicación que usa mi control pueda cambiar cualquier elemento en el control. Si uso la solución de Evan, eso requeriría que el desarrollador de la aplicación tenga acceso a todas las plantillas en el control. Posible, pero no ideal. ¡Gracias!
Si ha utilizado un DataTemplate que contiene un control llamado "myTextBlock" varias veces y luego tienen algún tipo de 'LayoutRoot.FindName ("myTextBlock") 'operación, ¿cuál de los muchos controles llamados" myTextBlock "le gustaría que la operación vuelva? – AnthonyWJones
@AnthonyWJones Buen punto, editado para incluir un parámetro parentName. – NickHalden
@AnthonyWJones: Normalmente, dos controles con nombre no son posibles. si mantiene dos controles de mismo nombre en la plantilla, entonces la plantilla se considera incorrecta. – Mahantesh