O que é a maneira recomendada para esfolar um aplicativo inteiro na WPF?
Pergunta
Eu quero meu aplicativo WPF para ser skinnable, através da aplicação de um determinado modelo de XAML, e as mudanças que ser ampla aplicação, mesmo para controles dinâmicos ou controles que não estão ainda na árvore visual / lógica.
O que eu posso usar para realizar este tipo de funcionalidade? Há algum bons recursos ou tutoriais que mostram como esta tarefa específica pode ser feito?
Solução
A abordagem básica para tomar está usando todos os recursos através de sua aplicação e substituir dinamicamente os recursos em tempo de execução.
Veja http://www.nablasoft.com/alkampfer/index.php/2008/05/22/simple-skinnable-and-theme-management-in-wpf-user-interface/ para a abordagem básica
Outras dicas
A substituição de recurso vai funcionar, mas eu achei "esfola estrutural" para ser mais poderosa! Leia mais sobre ele em CodeProject ...
Eu encontrei a maneira de aplicar modelos genéricos para todos os controles sem o uso de chaves de modelo. A solução é usar o tipo de controle como a chave Style.
Exemplo:
<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>
aqui a chave estilo é x: Key = "{x: tipo botão}", de modo que o estilo será aplicado a todos os controles de botão tipo sem o controle declarando a propriedade Style para ser um estático ou dinâmico de recursos.