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 par StaticResource . 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 de DynamicResource , 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>


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow