2009-09-16 12 views
2

J'ai un style pour un TextBox afficher un message d'erreur de validation comme suit:WPF Expander affiche toujours l'erreur de validation Adorner quand diminué

<Style TargetType="{x:Type TextBox}"> 
     <Style.Triggers> 
      <Trigger Property="Validation.HasError" Value="true"> 
       <Setter Property="ToolTip" 
         Value="{Binding RelativeSource={x:Static RelativeSource.Self}, 
         Path=(Validation.Errors)[0].ErrorContent}"/> 
      </Trigger> 
     </Style.Triggers> 
     <Setter Property="Validation.ErrorTemplate"> 
      <Setter.Value> 
       <ControlTemplate> 
        <StackPanel Orientation="Horizontal"> 
         <Border BorderBrush="{Binding Path=ErrorContent, 
           Converter={StaticResource ValidationErrorToBrushConverter}}" BorderThickness="2"> 
          <AdornedElementPlaceholder /> 
         </Border> 
         <Image Name="image1" Height="14" Width="14" Stretch="Fill" Margin="1,1,1,1" 
           Source="{Binding Path=ErrorContent, 
           Converter={StaticResource ValidationErrorToImageSourceConverter}}" 
           ToolTip="{Binding Path=ErrorContent}"/> 
        </StackPanel> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

Les TextBox vie dans un Expander. Quand j'ouvre l'Expander, le TextBox permet la saisie, mais échouera la validation si l'entrée est NullorEmpty, ou contient des caractères spéciaux.

Mon problème est que lorsque je déclenche une erreur de validation, le TextBox s'allume en rouge et affiche une icône avec le message sous forme d'info-bulle. Tout va bien jusqu'ici. MAIS quand je ferme le Expander sans passer la validation, le contour rouge et l'icône avec info-bulle sont toujours là! Même avec le Expander rétréci! Juste flottant là ... Ce n'est pas un bon comportement.

Des idées sur la façon d'obtenir la substance de validation à cacher avec tous les autres contrôles dans le Expander? En outre, le style pour la validation est déclaré dans les ressources de UserControl, pas dans le Expander lui-même.

+0

Vérifiez [cette réponse] (http://stackoverflow.com/questions/1471451/wpf-error -template-red-box-encore-visible-sur-effondrement-d'un expander/1471733 # 1471733) ou [cette réponse] (http://stackoverflow.com/questions/321327/how-do-i-get -rid-du-red-rectangle-quand-ma-wpf-binding-validation-has-failed-a/321987 # 321987) pour des solutions potentielles. Chacune de ces deux travaillera pour vous. –

Répondre

0

J'ai fini par effacer simplement le TextBox à la fermeture de l'Expander. De cette façon, l'erreur de validation disparaît et la boîte est claire et prête pour une autre entrée lorsque l'Expander est ouvert en secours.

0

J'ai eu le même problème. Je l'ai corrigé en plaçant un AdornerDecorator comme premier objet enfant de l'expandeur. L'AdornerDecorator est réduit lorsque l'Expander est réduit, de sorte que les Adorners doivent tous disparaître aussi.

0

J'ai résolu ce même problème en définissant la propriété Validation.ErrorTemplate null lorsque la zone de texte est caché

<Style TargetType="TextBox"> 
    <Style.Triggers> 
     <Trigger Property="IsHitTestVisible" Value="False"> 
      <Setter Property="Validation.ErrorTemplate" Value="{x:Null}"/> 
     </Trigger> 
    </Style.Triggers> 
</Style>