コントロールの外観を変更するいくつかの異なる方法...
コントロール テンプレートのコピー、編集、およびスタイルでの使用
コントロールのテンプレートをコピーして変更する場合、1 つのことに注意する必要があります...テーマ。
コントロールは、テーマ (つまり、異なるクロム) に応じて完全に異なるテンプレート デザインを持つ可能性があります...したがって、問題は...どのテンプレートをコピーして変更し、コントロールで使用するかです。
どちらを選択しても...問題があります...テンプレートをコピーしたテーマとは異なるテーマで誰かがWindowsを実行している場合...まあ、そのコントロールは間違っている/外に見えます場所。
さまざまなテンプレートがさまざまなテーマでどのように見えるかを確認するには... ShowMeTheTemplate を使用します。
したがって、適切に行うには、各テーマ (Classic、Luna、Aero、Royale など) のテンプレートをコピーして変更し、必要な手順を実行して、テーマが変更されたときに別のテーマのテンプレートが読み込まれるようにする必要があります...コントロールが「テーマに対応」するようにします。
実行時にテンプレートが適用された後のビジュアル ツリーの変更
コントロールの作成者である場合、またはコントロールの派生バージョンを作成する場合は、テンプレートが適用されるまで待ってからOnApplyTemplate
、ビジュアル ツリーで「パーツ」を探すことができます。次に、実行時にビジュアル ツリー/変更属性を変更します (つまり、PART_EditableTextBox の背景を変更できます)。
ただし、暗黙的なスタイルに依存している場合 (そのまま)、またはすべてのコントロールを XAML の派生バージョンに置き換えたくない、または置き換えることができない場合、これは機能しません。
実行時に ControlTemplate のコピーを取得し、「パーツ」を変更する
別の可能性があります....実行時にコントロールの ControlTemplate を取得する...(これは、その時点で設定されている現在のテーマ用です)....それを変更してから、コントロールに設定します。
これの利点は、システムに新しいテーマがあり、それらの名前を事前に知らなかった場合 (したがって、テンプレートを設計しなかった場合)、コントロール テンプレートがジェネリック テーマから選択されるのではなく、 (したがって、場違いです)...新しいテーマにより適した外観になる可能性が高くなります. しかし、それはちょっとしたハックです。