Recherche…
Remarques
Remarques introductives
Dans WPF, un style définit les valeurs d'une ou plusieurs propriétés de dépendance pour un élément visuel donné. Les styles sont utilisés tout au long de l'application pour rendre l'interface utilisateur plus cohérente (par exemple, donner à tous les boutons de dialogue une taille cohérente) et pour faciliter les modifications en bloc (par exemple, modifier la largeur de tous les boutons).
Les styles sont généralement définis dans un ResourceDictionary
à un niveau élevé dans l'application (par exemple, dans App.xaml ou dans un thème). Ils sont donc disponibles dans toute l'application, mais ils peuvent également être définis pour un seul élément et ses enfants. style à tous les éléments TextBlock
intérieur d'un 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>
Notes IMPORTANTES
- L'emplacement où le style est défini affecte l'endroit où il est disponible.
- Les références en
StaticResource
ne peuvent pas être résolues parStaticResource
. En d'autres termes, si vous définissez un style qui dépend d'un autre style ou d'une autre ressource dans un dictionnaire de ressources, il doit être défini après / sous la ressource dont il dépend. -
StaticResource
est la méthode recommandée pour référencer les styles et autres ressources (pour des raisons de performances et de comportement), sauf si vous avez spécifiquement besoin deDynamicResource
, par exemple pour des thèmes pouvant être modifiés à l'exécution.
Ressources
MSDN propose des articles détaillés sur les styles et les ressources qui ont plus de profondeur que ce qu’il est possible de fournir ici.
Définir un style nommé
Un style nommé requiert que la propriété x:Key
soit définie et s'applique uniquement aux éléments qui le référencent explicitement par nom:
<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>
Définir un style implicite
Un style implicite s'applique à tous les éléments d'un type donné dans la portée. Un style implicite peut omettre x:Key
car il est implicitement identique à la propriété TargetType
du style.
<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>
Hériter d'un style
Il est courant d'avoir besoin d'un style de base qui définisse des propriétés / valeurs partagées entre plusieurs styles appartenant au même contrôle, en particulier pour quelque chose comme TextBlock
. Ceci est accompli en utilisant la propriété BasedOn
. Les valeurs sont héritées et peuvent ensuite être remplacées.
<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>
Dans l'exemple ci-dessus, tout TextBlock
utilisant le style WarningTextBlockStyle
serait présenté sous la forme de 12px Arial en rouge et en gras.
Comme les styles implicites ont un x:Key
implicite qui correspond à leur TargetType
, vous pouvez également en hériter:
<!-- 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>