¿Cuál es la forma recomendada de aplicar piel a una aplicación completa en WPF?
Pregunta
Quiero que se pueda personalizar mi aplicación WPF, aplicando una determinada plantilla XAML, y que los cambios sean para toda la aplicación, incluso para controles dinámicos o controles que ni siquiera están en el árbol visual/lógico.
¿Qué puedo usar para lograr este tipo de funcionalidad?¿Existen buenos recursos o tutoriales que muestren cómo se puede realizar esta tarea específica?
Solución
El enfoque básico a seguir es utilizar recursos en toda la aplicación y reemplazarlos dinámicamente en tiempo de ejecución.
Ver http://www.nablasoft.com/alkampfer/index.php/2008/05/22/simple-skinnable-and-theme-management-in-wpf-user-interface/ para el enfoque básico
Otros consejos
La sustitución del recurso funcionará, pero descubrí que el "desollado estructural" es más potente.Lea más sobre esto en CodeProject...
Encontré la manera de aplicar plantillas genéricas a todos los controles sin usar claves de plantilla.La solución es utilizar el tipo de control como tecla de estilo.
Ejemplo:
<Application.Resources>
<Style x:Key="{x:Type Button}" TargetType="{x:Type Button}">
<Setter Property="Button.Background" Value="CornflowerBlue"/>
<Setter Property="Button.Template">
<Setter.Value>
<ControlTemplate x:Name="MyTemplate">
...
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</Application.Resources>
aquí la clave de estilo es x:Key="{x:Type Button}", por lo que el estilo se aplicará a todos los controles de tipo botón sin que el control declare que la propiedad Style es un recurso estático o dinámico.