0
votes

ControlTemplate / Les déclencheurs de style ne fonctionnent pas, lors de la définition des propriétés du contrôle (déclenchement) localement / directement

Je veux changer Borderbrush code> lorsque je me concentre ou survolez le contrôle.
Cela fonctionne bien, sauf lorsque dans la fenêtre, je définis la valeur par défaut Borderbrush code>.
Dans ce cas, le Borderbrush code> n'est plus modifié, même si je me concentre ou survolez le contrôle.

J'ai déjà une solution: Créez une autre propriété pour éviter de modifier directement la propriété principale par défaut et de lier le principal propriété à cela, pour la valeur par défaut.
Mais je veux savoir s'il existe une autre solution sans ajouter de propriété inutile et sans presque copier et collez tout le modèle sur chaque déclencheur. P>

<Window
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp"
        x:Class="WpfApp.Home"
        mc:Ignorable="d"
        Title="Home" Height="450" Width="800">
    <Grid Background="#FF272727">

        <!-- this one, with first style, not works -->
        <local:IconTextBox HorizontalAlignment="Left" VerticalAlignment="Top"
                           Width="200" Height="25" Margin="80,80,0,0"
                           BorderBrush="#FF1E1E1E"/>

    </Grid>
</Window>


0 commentaires

3 Réponses :


0
votes

Peut-être que je suis mal compris le problème, mais vous devriez pouvoir simplement définir une clé sur le style. Si c'est défini avec une clé, il ne remplacera pas la valeur par défaut, vous devez appliquer spécifiquement le style sur le contrôle.

Définissez la clé de votre style P>

<local:IconTextBox Style="{StaticResource myStyle}"...


0 commentaires

1
votes

Définition d'une propriété localement I.e. directement remplacera toujours le paramètre code> style code> de cette propriété. Étant donné que les déclencheurs sont liés à des propriétés, ils sont remplacés également. Voir Microsoft Docs: Cadre de la propriété de dépendance Précédence Liste Pour plus d'informations.

Ce n'est généralement pas un problème que vous définissez un style implicite code> avec l'intention de créer un thème par défaut . Et une règle générale de la conception de l'interface utilisateur est de garder le look cohérent. P>

Solution 1: Trigger (et Datatriggigriggy) - Non recommandé H2>

Comme mentionné précédemment, déclencheur code > Un DataTrigger code> est relié de la propriété ou basé sur l'état de la propriété. La gâchette est résolue lorsque l'analyseur tente de résoudre la valeur de la propriété (qui sera dans ce cas une action de déclenchement). P>

en raison de la valeur de la dépendance code> de la valeur de la valeur code> Spécialisé style code> pour remplacer la valeur par défaut. Les valeurs locales arrêteront l'analyseur XAML pour rechercher n'importe quel paramètre code> style code> de la propriété et non à ignorer tous les déclencheurs spécifiques de la propriété. P>

Le style spécialisé code> devrait être Basé sur la valeur par défaut pour autoriser les substitutions sélectives: P>

<ResourceDictionary>

  <!-- Override the original resource -->
  <Color x:Key="{x:Static IconTextBox.BorderBrushOnMouseOverKey}" >Blue</Color>
</ResourceDictionary>


0 commentaires

0
votes

une troisième solution que j'ai trouvée autre que le Solutions de @BionicCode , après un peu plus de compréhension des déclencheurs, et Compte tenu de mon contexte, ne change pas les propriétés locales du style et modifie plutôt les propriétés des éléments du modèle de contrôle, les ciblant avec cibleName.

C'est donc ma troisième solution: P>

<local:IconTextBox HorizontalAlignment="Left" VerticalAlignment="Top"
                   Width="200" Height="25" Margin="80,80,0,0"
                   BorderBrush="#FF1E1E1E"/>


0 commentaires