サーチ…
備考
入門備考
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>