2011-01-12 20 views
15

この質問は恐らく重複していますが、私はそれを見つけることができませんでした。複数のコントロールにWPFスタイルを適用する

私はなどの容器WindowStackPanelGridを、持っている場合、私はその中に含まれている特定のタイプのすべてのコントロールにStyleを適用することができますどのような方法がありますか?

私はContainer.Resourcesを使用してTargetTypeに個々の変更を設定することにより、プロパティの変更を適用することができますが、私は、ターゲットのStyleを設定しようとしたとき、私はStyleを設定することはできません私に言って、エラーが発生します。

XAMLでこれを行う方法はありますか?

答えて

28

設定する内容に応じて並べ替えます。プロパティが共通基本クラスのプロパティであれば、可能です。スタイルを継承できるので、Silverlightよりも多くのオプションがWPFにあります。たとえば...

<Window.Resources> 
    <Style x:Key="CommonStyle" TargetType="FrameworkElement"> 
     <Setter Property="Margin" Value="2" /> 
    </Style> 
    <Style TargetType="StackPanel" BasedOn="{StaticResource CommonStyle}"> 
    </Style> 
    <Style TargetType="Grid" BasedOn="{StaticResource CommonStyle}"> 
    </Style> 
    <Style TargetType="Button" BasedOn="{StaticResource CommonStyle}"> 
     <Setter Property="Background" Value="LimeGreen" /> 
    </Style> 
</Window.Resources> 

一般的なスタイルは、CommonStyleは3つの暗黙のスタイルによって継承されます。ただし、すべてのFrameworkElementクラスに共通のプロパティのみを指定できます。 FrameworkElementはBackgroundプロパティを提供しないため、CommonStyleにBackgroundを設定できませんでした。したがって、GridとStackPanelにはBackground(Panelから継承)がありますが、Buttonと同じBackgroundプロパティではありません(Controlから継承されます)。

これはあなたのために役立ちます。

+0

偉大な、それは私が必要なものです、ありがとう。 – ocodo

+8

スタイルにx:Keyフィールドがない場合、そのタイプの* all *オブジェクトに適用されます。だから*すべて* StackPanels、グリッド&ボタンはそのマージンを持っています。 – DefenestrationDay

+0

@DefenestrationDayありがとうございました! –

関連する問題