Comment remplacer un style global (qui ne dispose pas d'un x: Key), ou appliquer alternativement un style nommé à tous les contrôles ciblés de type-?

StackOverflow https://stackoverflow.com/questions/1303634

Question

Je déclare un style que je veux appliquer à tous les boutons du projet, le style réside dans le ResourceDictionary:

<Style TargetType="StackPanel">
    <Setter Property="Orientation" Value="Horizontal" />
    <Setter Property="VerticalAlignment" Value="Center"/>
    <Setter Property="HorizontalAlignment" Value="Center"/>
</Style>

Maintenant, dans une fenêtre, je veux hériter de ce style, mais ajouter une valeur:

<Style TargetType="StackPanel"> 
    <Setter Property="Margin" Value="5"/>
</Style>

Le problème est qu'il ne hérite pas du style global, afin d'hériter je dois attribuer une clé du style global:

<Style TargetType="StackPanel" x:Key="StackPanelStyle" />

Et puis en XAML héritent de la fenêtre (et / ou remplacement - en option), il:

<Style TargetType="StackPanel" BasedOn="StackPanelStyle" />

Le problème est que si vous attribuez une clé, ce n'est pas globale et vous devez l'appeler sur chaque fenêtre / portée.

Une solution à ma question devrait être l'un des deux (est autre chose que je suis absent dehors?):

  1. Avoir un style global avec une clé, qui est appliquée automatiquement à tous ses contrôles ciblés dans l'application.
  2. Une façon de se référer au style sans nom niveau ResourceDictionary sans et remplacer.

Je pensais à redéclarant les styles près des styles nommés (dans le ResourceDictionary) qui fonctionne réellement:

<!--In the ResourceDictionary-->
<Style x:Key="StackPanelStyle" TargetType="StackPanel">
    <Setter Property="Orientation" Value="Horizontal" />
    <Setter Property="VerticalAlignment" Value="Center"/>
    <Setter Property="HorizontalAlignment" Value="Center"/>
</Style>
<!--In the app.xaml-->
<Style TargetType="StackPanel" BasedOn="{StaticResource StackPanelStyle}"/>
<!--In the window/page scope-->
<Style TargetType="StackPanel" BasedOn="{StaticResource StackPanelStyle}"/

Mais je suis à la recherche pour une meilleure des choses que redéclarer bêtement tous les styles.

Était-ce utile?

La solution

Essayez ceci:

<Style TargetType="{x:Type StackPanel}" BasedOn="{StaticResource {x:Type StackPanel}}">
  <!-- ... -->
</Style>

J'ai déclaré mes styles de base dans un ResourceDictionary en App.xaml, si je les remplacer dans une fenêtre spécifique comme celui-ci, il travaille habituellement.

Autres conseils

Quelque part dans le dictionnaire global des ressources que vous définissez un style de base avec une clé. Ce style de base est destiné à un type qui est la base pour tous les types pour lesquels vous avez l'intention d'appliquer ce style. Ensuite, vous définissez les styles qui ciblent les types que vous voulez et sont basés sur le style de base mentionné ci-dessus.

<Style
    x:Key="upDownBaseStyle"
    TargetType="{x:Type Control}">
    <Setter
      Property="Margin"
      Value="2" />
    <Setter
      Property="HorizontalAlignment"
      Value="Stretch" />
    <Setter
      Property="VerticalAlignment"
      Value="Center" />
  </Style>

  <Style
    TargetType="{x:Type xceed:IntegerUpDown}"
    BasedOn="{StaticResource upDownBaseStyle}">
  </Style>

  <Style
    TargetType="{x:Type xceed:DoubleUpDown}"
    BasedOn="{StaticResource upDownBaseStyle}">
  </Style>

Maintenant, les deux styles derniers sont appliqués à tous les contrôles et IntegerUpDown DoubleUpDown dans votre application sans aucune mention d'une clé.

La règle de base:. Le style de base doit avoir la clé de s'y référer, et les styles dérivés sans clés ne peuvent donc elles peuvent être appliquées - uniquement par des types cibles

Je dirais que ce que vous cherchez peut-être ici est un style de maître ou d'un scénario de comportement qui est généralement atteint en créant un contrôle utilisateur. Si vous deviez créer un nouveau contrôle de bouton avec votre style « global » appliqué, alors partout où vous utilisez cette commande, vous pouvez simplement ajouter des « Nouveau styles ou remplacer les styles si / quand ils étaient nécessaires .

Si vous ne l'avez pas créé un contrôle utilisateur, ils sont faciles à mettre en œuvre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top