Question

Je travaille sur un style XAML pour mes contrôles. Le code ci-dessous sert à définir la couleur d'un stackpanel. Cela fonctionne bien, mais je veux faire autre chose. Si le déclencheur est activé, je souhaite définir la couleur de la police pour tous les éléments enfants du stackpanel.

Pour le moment, je n'ai que des blocs de texte à l'intérieur du stackpanel et je sais que je pourrais facilement créer un style distinct pour un bloc de texte. Mais si ce style est déclenché, cela n'affectera que UN et pas tous les blocs de texte. Mais je veux changer tous les éléments du stackpanel dès que j’ai reçu un déclencheur mouseover pour le panneau.

Est-ce même possible en XAML ou dois-je coder un événement régulier?

<Style x:Key="XStack" TargetType="StackPanel">
    <Setter Property="Background">
        <Setter.Value>
            <LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
                <GradientStop Color="White" Offset="0"/>
                <GradientStop Color="SkyBlue" Offset="6"/>                    
            </LinearGradientBrush>
        </Setter.Value>
    </Setter>
    <!-- Trigger-->
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True" >
            <Setter Property="Background" Value="SkyBlue"/>
        </Trigger>
    </Style.Triggers>
</Style>    
Était-ce utile?

La solution

Ajoutez ceci à votre déclencheur:

<Setter Property="TextElement.Foreground" Value="Blue"></Setter>

Autres conseils

Comme Olle l’a dit, vous pouvez définir la propriété attachée TextElement.Foreground sur une valeur personnalisée. Pour un nœud de contrôle / d'interface utilisateur enfant dans l'arborescence visuelle, si la propriété n'est pas définie, WPF remontera la hiérarchie de l'interface utilisateur jusqu'à ce qu'il trouve une valeur et l'utilise. Cela signifie que tous les contrôles enfants peuvent partager une valeur de propriété définie au niveau du parent.

Cela devrait fonctionner pour tous les TextBlocks ... Cependant, si votre StackPanel contenait un TextBox, sa couleur de texte ne serait pas affectée. Il utilise la propriété Foreground de la classe de base Control ... Assurez-vous donc de la tester avec tous les types d'éléments enfants possibles.

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