サーチ…


備考

入門備考

WPFでは、 スタイルは、特定のビジュアル要素の1つ以上の依存関係プロパティの値を定義します。スタイルは、アプリケーション全体で使用され、ユーザーインターフェイスの一貫性を高め(たとえば、すべてのダイアログボタンに一貫したサイズを与えるなど)、一括変更を簡単にする(すべてのボタンの幅を変更するなど)。

スタイルは通常、アプリケーション内の上位レベル(例えばApp.xamlやテーマ内)のResourceDictionaryで定義されているため、アプリケーション全体で使用できますが、単一の要素とその子要素に対しても定義できます。スタイルをStackPanel内のすべてのTextBlock要素に適用しStackPanel

<StackPanel>
    <StackPanel.Resources>
        <Style TargetType="TextBlock">
            <Setter Property="Margin" Value="5,5,5,0"/>
            <Setter Property="Background" Value="#FFF0F0F0"/>
            <Setter Property="Padding" Value="5"/>
        </Style>
    </StackPanel.Resources>
        
    <TextBlock Text="First Child"/>
    <TextBlock Text="Second Child"/>
    <TextBlock Text="Third Child"/>      
</StackPanel>

重要なメモ

  • スタイルが定義されている場所は、そのスタイルが使用可能な場所に影響します。
  • 前方参照はStaticResourceで解決できません。言い換えれば、リソース辞書の別のスタイルやリソースに依存するスタイルを定義する場合は、それが依存するリソースの後ろ/下に定義する必要があります。
  • 実行時に変更できるテーマなど、 DynamicResource使用する必要がない場合は、 StaticResourceを使用して、スタイルやその他のリソースを参照することをお勧めします(パフォーマンスや動作上の理由から)。

リソース

MSDNには、ここで提供できるよりも深いスタイルとリソースに関する徹底的な記事があります。

名前付きスタイルを定義する

名前付きスタイルでは、 x:Keyプロパティを設定する必要があり、名前で明示的に参照する要素にのみ適用されます。

<StackPanel>
    <StackPanel.Resources>
        <Style x:Key="MyTextBlockStyle" TargetType="TextBlock">
            <Setter Property="Background" Value="Yellow"/>
            <Setter Property="FontWeight" Value="Bold"/>
        </Style>
    </StackPanel.Resources>
        
    <TextBlock Text="Yellow and bold!" Style="{StaticResource MyTextBlockStyle}" />
    <TextBlock Text="Also yellow and bold!" Style="{DynamicResource MyTextBlockStyle}" />
    <TextBlock Text="Plain text." />      
</StackPanel>

暗黙のスタイルを定義する

暗黙のスタイルは、スコープ内の特定の型のすべての要素に適用されます。暗黙のスタイルは、スタイルのTargetTypeプロパティと暗黙的に同じであるため、 x:Keyを省略することができます。

<StackPanel>
    <StackPanel.Resources>
        <Style TargetType="TextBlock">
            <Setter Property="Background" Value="Yellow"/>
            <Setter Property="FontWeight" Value="Bold"/>
        </Style>
    </StackPanel.Resources>

    <TextBlock Text="Yellow and bold!"  />
    <TextBlock Text="Also yellow and bold!" />
    <TextBlock Style="{x:Null}" Text="I'm not yellow or bold; I'm the control's default style!" />
</StackPanel>

スタイルから継承する

特にTextBlockようなもので、同じコントロールに属する複数のスタイル間で共有されるプロパティ/値を定義する基本スタイルが必要です。これは、 BasedOnプロパティを使用してBasedOnます。値は継承され、オーバーライドできます。

<Style x:Key="BaseTextBlockStyle" TargetType="TextBlock">
    <Setter Property="FontSize" Value="12"/>
    <Setter Property="Foreground" Value="#FFBBBBBB" />
    <Setter Property="FontFamily" Value="Arial" />
</Style>

<Style x:Key="WarningTextBlockStyle"
       TargetType="TextBlock"
       BasedOn="{StaticResource BaseTextBlockStyle">
    <Setter Property="Foreground" Value="Red"/>
    <Setter Property="FontWeight" Value="Bold" />
</Style>

上記の例では、スタイルWarningTextBlockStyleを使用するTextBlockは、赤と太字の12ピクセルのArialとして表示されます。

暗黙的なスタイルには、 TargetTypeと一致する暗黙のx:KeyあるTargetType 、それらも継承できます。

<!-- Implicit -->
<Style TargetType="TextBlock">
    <Setter Property="FontSize" Value="12"/>
    <Setter Property="Foreground" Value="#FFBBBBBB" />
    <Setter Property="FontFamily" Value="Arial" />
</Style>

<Style x:Key="WarningTextBlockStyle"
       TargetType="TextBlock"
       BasedOn="{StaticResource {x:Type TextBlock}}">
    <Setter Property="Foreground" Value="Red"/>
    <Setter Property="FontWeight" Value="Bold" />
</Style>


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow