Je crée un contrôle de zone de texte personnalisé pour disposer de fonctionnalités de mise en forme et de validation par défaut, y compris une propriété de validation personnalisée qui accepte une action ou une fonction personnalisée.Le style de validation de TextBox WPF disparaît lorsque la souris est terminée
Dans ma situation actuelle, je ne peux pas utiliser le cadre de validation d'attribut que certaines personnes ont posté, car je n'ai pas tout à fait accès pour modifier les objets du modèle de données. Je ne peux pas non plus utiliser ValidationRules car toutes les zones de texte nécessitant ces validations ne seront pas forcément liées. J'ai utilisé le style de zone de texte générique dans le constructeur statique plutôt que de définir le mien, mais j'ai ajouté quelques déclencheurs de données pour définir la bordure et l'info-bulle en fonction de ma propriété de dépendance IsValid personnalisée.
Tout semble fonctionner correctement, mais le problème est que lorsque je souris ou cliquez sur une zone de texte qui a échoué à la validation, le style "invalide" disparaît et il va au style de zone de texte par défaut.
J'ai essayé de créer des déclencheurs de données supplémentaires pour l'événement IsMouseOver, IsFocused et IsMouseCaptured (illustré ci-dessous) en vain.
Ai-je raté quelque chose?
Le constructeur statique (montrant que je suis en utilisant le style TextBox:
static ValidatorTextBox()
{
//Commenting this line out to use the default textbox style
DefaultStyleKeyProperty.OverrideMetadata(typeof(ValidatorTextBox), new FrameworkPropertyMetadata(typeof(TextBox)));
}
Et voici mon style:
<Style TargetType="{x:Type local:ValidatorTextBox}">
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsValid}" Value="False">
<Setter Property="BorderBrush" Value="Red" />
<Setter Property="BorderThickness" Value="1" />
</DataTrigger>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsRequired}" Value="True">
<Setter Property="Background" Value="AliceBlue" />
</DataTrigger>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsFocused}" Value="True">
<Setter Property="BorderBrush" Value="{Binding RelativeSource={RelativeSource Self}, Path=BorderBrush}" />
</DataTrigger>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsMouseOver}" Value="True">
<Setter Property="BorderBrush" Value="{Binding RelativeSource={RelativeSource Self}, Path=BorderBrush}" />
</DataTrigger>
<DataTrigger Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsMouseCaptured}" Value="True">
<Setter Property="BorderBrush" Value="{Binding RelativeSource={RelativeSource Self}, Path=BorderBrush}" />
</DataTrigger>
</Style.Triggers>
</Style>
Super, c'était exactement ce dont j'avais besoin, merci beaucoup. – Travis