特定の XAML テンプレートを適用することで WPF アプリケーションをスキン可能にし、動的コントロールやビジュアル/論理ツリーにさえないコントロールに対しても変更をアプリケーション全体に適用したいと考えています。
このタイプの機能を実現するには、何を使用できますか? この特定のタスクを実行する方法を示す優れたリソースやチュートリアルはありますか?
基本的なアプローチは、アプリケーション全体でリソースを使用し、実行時にリソースを動的に置き換えることです。
基本的なアプローチについては、http://www.nablasoft.com/alkampfer/index.php/2008/05/22/simple-skinnable-and-theme-management-in-wpf-user-interface/を参照してください。
リソースの置き換えは機能しますが、「構造スキニング」の方が強力であることがわかりました。詳細については、CodeProject を参照してください...
テンプレート キーを使用せずに、汎用テンプレートをすべてのコントロールに適用する方法を見つけました。解決策は、コントロールのタイプを Style キーとして使用することです。
例:
<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>
ここで Style キーは x:Key="{x:Type Button}" であるため、コントロールが Style プロパティを静的リソースまたは動的リソースであると宣言しなくても、ボタン タイプのすべてのコントロールにスタイルが適用されます。