2017-11-22 8 views
0

Ich möchte eine Textbox validieren, wenn etwas nicht stimmt. Die Idee ist, wenn etwas falsch ist, sollte die nächste TextBox ein Warnbild haben.Fügen Sie der TextBox bei der Überprüfung ein Warnsymbol hinzu.

Aber die Sache ist das Bild zeigt nicht, es zeigt nur die Grenze des Symbols. Benutzt ich AdornedElementPlaceholder korrekt?

+0

Warum Sie nicht dünn in Code tun, ist es sehr einfach mit Code – tpbafk

Antwort

0

Getestete Lösung, die funktioniert und zeigt das Bild, wenn ein Fehler auftritt:

<TextBox BorderThickness="0.8"> 
    <Validation.ErrorTemplate> 
     <ControlTemplate> 
      <StackPanel> 
       <AdornedElementPlaceholder/> 
       <Image Source="Image.jpg" Width="20" Height="20"/> 
      </StackPanel> 
     </ControlTemplate> 
    </Validation.ErrorTemplate> 
    <TextBox.Text> 
     <Binding Path="ValidationTest" UpdateSourceTrigger="PropertyChanged" Mode="TwoWay" ValidatesOnDataErrors="True"> 
      <Binding.ValidationRules> 
       <validation:IntegerValidationRule ValidationStep="CommittedValue" Min="1" Max="99999999"/> 
      </Binding.ValidationRules> 
     </Binding> 
    </TextBox.Text> 
</TextBox> 

Und hier ist die Gültigkeitsregel, die ich für dieses Beispiel verwendet habe:

public class IntegerValidationRule : ValidationRule 
{ 
    private int _min = int.MinValue; 
    private int _max = int.MaxValue; 
    private string _fieldName = "Field"; 
    private string _customMessage = String.Empty; 

    public int Min 
    { 
     get { return _min; } 
     set { _min = value; } 
    } 

    public int Max 
    { 
     get { return _max; } 
     set { _max = value; } 
    } 

    public string FieldName 
    { 
     get { return _fieldName; } 
     set { _fieldName = value; } 
    } 

    public string CustomMessage 
    { 
     get { return _customMessage; } 
     set { _customMessage = value; } 
    } 


    public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo) 
    { 
     int num = 0; 

     var val = (value as BindingExpression).DataItem; 

     if (!int.TryParse(value.ToString(), out num)) 
      return new ValidationResult(false, $"{FieldName} must contain an integer value."); 

     if (num < Min || num > Max) 
     { 
      if (!String.IsNullOrEmpty(CustomMessage)) 
       return new ValidationResult(false, CustomMessage); 


      return new ValidationResult(false, $"{FieldName} must be between {Min} and {Max}."); 
     } 

     return new ValidationResult(true, null); 
    } 
} 

die gerade Beispiel modifiziert wird von MSDN Docs
Einige Anmerkungen:
Sie haben die Validierungsregel nicht angegeben, also nehme ich an Es funktioniert wie erwartet und erzeugt ein gültiges Validierungsergebnis.
Die Bindung Ihrer TextBox.Text-Eigenschaft enthält die Validierungsregel nicht.

Verwandte Themen