暗黙的なスタイルと明示的なスタイル |
WPF では、スタイルを暗黙的に設定できます。スタイルを暗黙的に設定すると、特定のタイプのすべてのインスタンスにスタイルを同時に設定できます。たとえば、C1DropDown コントロールには、次のマークアップでスタイルを設定できます。
<Grid> <Grid.Resources> <Style TargetType="{x:Type c1:C1DropDown}"> <Setter Property="Background" Value="Red" /> </Style> </Grid.Resources> <StackPanel Width="100" VerticalAlignment="Center"> <c1:C1DropDown Content="C1DropDown"/> <c1:C1DropDown Content="C1DropDown"/> <c1:C1DropDown Content="C1DropDown"/> </StackPanel> </Grid>
このように指定すると、次の図のように、コントロールの背景色が赤に設定されます。
グリッド内のすべての C1DropDown コントロールも赤で表示されます。グリッド外部の C1DropDown コントロールは赤で表示されません。これが暗黙のスタイルです。スタイルは、特定のタイプのすべてのコントロールに割り当てられます。継承されたコントロールはスタイルも継承します。
また、暗黙的なスタイルを適用しつつ、特定のコントロールだけ異なるスタイルを設定したい場合があります。そのような場合は、明示的なスタイルを定義して、それを特定のコントロールに対して設定するようにします。
たとえば、次のマークアップは、コントロールの背景色を緑色に設定する明示的なスタイルを定義し、それを2番目のC1DropDown コントロールに設定します。
<Grid> <Grid.Resources> <Style x:Key="Green" TargetType="{x:Type c1:C1DropDown}"> <Setter Property="Background" Value="Green" /> </Style> <Style TargetType="{x:Type c1:C1DropDown}"> <Setter Property="Background" Value="Red" /> </Style> </Grid.Resources> <StackPanel Width="100" VerticalAlignment="Center"> <c1:C1DropDown Content="C1DropDown"/> <c1:C1DropDown Content="C1DropDown" Style="{StaticResource Green}"/> <c1:C1DropDown Content="C1DropDown"/> </StackPanel> </Grid>
このように指定すると、次の図のように、2番目のコントロールの背景色だけが緑に設定されます。
明示的なスタイルは、一意に識別できるように x:Key 属性でキー名を定義し、静的リソースとしてコントロールの Style プロパティに設定します。