¿Establecer el estilo de un control mediante programación en Silverlight 4?

Soy nuevo en Silverlight, pero no pude encontrar nada sobre esto cuando lo busqué en Google.

Tengo un botón en el que estoy tratando de establecer el estilo mediante programación. Tengo el estilo definido en un archivo XAML y quiero extraer el estilo en C # para poder crear dinámicamente un botón y asignarle este estilo. Hasta ahora, esto es lo que estoy intentando:

button.Style = (Style)Resources["CloseButtonStyle"];

Sin embargo, solo hace que el botón no tenga estilo. ¿Hay una forma fácil de hacer esto? Siento que esto debería ser obvio, pero no puedo hacer que funcione.

preguntado el 16 de mayo de 11 a las 18:05

2 Respuestas

Está asumiendo que su Resources La propiedad del objeto actual es la que contiene el estilo definido. Sin embargo, supongo, dados los síntomas de su problema, que CloseButtonStyle en realidad se define más arriba en la jerarquía de control.

En cambio, necesitas atraviesa tu jerarquía de control hasta que encuentre el recurso (o si conoce el objeto que lo define, simplemente refiérase directamente a ese objeto). Desafortunadamente, Silverlight no incluye FindResource llamar como WPF, pero no es demasiado difícil implementar el suyo.

contestado el 16 de mayo de 11 a las 22:05

Pensé que sería algo como esto. El estilo en cuestión está definido en mi archivo "generic.xaml" para el control que estoy escribiendo. Supongo que esto significa que tendré que ir a buscarlo manualmente, ya que FindResource no existe. ¿Existe alguna forma sencilla de hacer referencia al archivo "generic.xaml"? - TheEnigmaMachine

No creo que pueda acceder mediante programación a los recursos que están definidos en generic.xaml (consulte respuesta a esta publicación del foro - parece implicar que esto no es posible). ¿Podría definir el estilo en App.xaml en su lugar? - Jeff Yates

En realidad, la implementación de FindResource no es trivial en absoluto, ¿ha visto su código descompilado? - media pensión

Lo solucioné creando un objeto de botón en XAML y luego haciendo referencia a él para quitar la referencia de estilo. Parece un poco ad hoc hacerlo a mi manera, así que voy a ver si puedo encontrar una solución diferente a mi problema aquí sin necesidad de hacer referencia al estilo programáticamente en primer lugar. - TheEnigmaMachine

@HB: Hacer una implementación completa que funcione exactamente como la versión de WPF es bastante difícil, pero una versión simple que busca el recurso en los recursos del elemento actual y luego delega al control principal no es demasiado difícil y se adapta a la mayoría de los propósitos. - Jeff Yates

puedo llamar button1.Style = (Style)Resources["NonExistentKey"]; y hace que mi botón no tenga estilo en absoluto, teniendo en cuenta que probablemente no se encuentre el recurso, no obtendrá una excepción.

Accede directamente al Resources propiedad, pero ¿está el estilo realmente en el diccionario de recursos inmediato de su ventana / UserControl / lo que sea que tenga?

contestado el 16 de mayo de 11 a las 22:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.