2010-01-19 6 views
0

J'essaie d'utiliser dans WPF une entrée de validation de contrôles de bases de données avec des règles de validation. J'ai une posintValidationRule classe:Comment afficher WPF ValidationResult dans un bloc de texte séparé?

 public class posintValidationRule : ValidationRule 
{ 
    public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo) 
    { 
     string _strInt = value.ToString(); 
     int _int = -1; 
     if (!Int32.TryParse(_strInt, out _int)) 
      return new ValidationResult(false, "Value must be an integer"); 
     if (_int < 0) 
      return new ValidationResult(false, "Value must be positive"); 
     return new ValidationResult(true, null); 
    } 
} 

En XAML il y a aussi un modèle d'erreur de style:

<Setter Property="Validation.ErrorTemplate"> 
    <Setter.Value> 
     <ControlTemplate> 
      <StackPanel> 
      <Border BorderBrush="Red" BorderThickness="1" > 
       <AdornedElementPlaceholder></AdornedElementPlaceholder> 
      </Border> 
      <TextBlock Text="there is an error"></TextBlock> 
      </StackPanel> 
     </ControlTemplate> 
    </Setter.Value> 
    </Setter> 
    <Style.Triggers> 
    <Trigger Property="Validation.HasError" Value="true"> 
     <Setter 
      Property="ToolTip" 
      Value="{Binding RelativeSource={RelativeSource Self}, 
      Path=(Validation.Errors)[0].ErrorContent}"/> 
     </Trigger> 
    </Style.Triggers> 

en cas d'erreur de validation se produit, le texte de ValidationResult de posintValidationRule classe apparaît dans une info-bulle ("La valeur doit être un nombre entier "et similaire).

Comment je pourrais avoir ce même texte affiché dans un TextBlock d'un Validation.ErrorTemplate qui maintenant, en cas d'erreur, dit juste: "il y a une erreur"?

Répondre

4

J'ai trouvé la solution:

<Style TargetType="{x:Type TextBox}"> 
     <Setter Property="Validation.ErrorTemplate"> 
     <Setter.Value> 
      <ControlTemplate> 
       <StackPanel> 
       <Border BorderBrush="Red" BorderThickness="1" Margin="5,0,5,0" > 
        <AdornedElementPlaceholder Name="MyAdorner" ></AdornedElementPlaceholder> 
       </Border> 
       <TextBlock 
         Margin="5,0,0,0" 
         Foreground="Red" 
         Text="{Binding ElementName=MyAdorner, Path=AdornedElement.(Validation.Errors)[0].ErrorContent}"> 
       </TextBlock> 
      </StackPanel> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

Il fonctionne bien

0

Le DataContext est (Validation.Errors), vous pouvez donc faire:

<Style TargetType="{x:Type TextBox}"> 
    <Setter Property="Validation.ErrorTemplate"> 
    <Setter.Value> 
     <ControlTemplate> 
      <StackPanel> 
      <Border BorderBrush="Red" BorderThickness="1" Margin="5,0,5,0" > 
       <AdornedElementPlaceholder Name="MyAdorner" ></AdornedElementPlaceholder> 
      </Border> 
      <TextBlock 
        Margin="5,0,0,0" 
        Foreground="Red" 
        Text="{Binding [0].ErrorContent}"> 
      </TextBlock> 
     </StackPanel> 
     </ControlTemplate> 
    </Setter.Value> 
</Setter> 

Questions connexes