2017-11-22 18 views
0

何か問題がある場合、テキストボックスを検証したいと考えています。次のテキストボックスが何か間違っていて、警告イメージがあるはずのアイデアです。検証時にテキストボックスに警告アイコンを追加します。

<TextBox Text="{Binding Age, UpdateSourceTrigger=PropertyChanged}"> 
    <Validation.ErrorTemplate> 
     <ControlTemplate> 
      <StackPanel> 
       <!-- Placeholder for the TextBox itself --> 
       <AdornedElementPlaceholder x:Name="textBox"/> 
       <image source="some-Image.png" width="20" Height="20" /> 
      </StackPanel> 
     </ControlTemplate> 
    </Validation.ErrorTemplate> 
</TextBox> 

しかし、画像が表示されていないのは、アイコンの境界線のみです。 AdornedElementPlaceholderを正しく使用していますか?

+0

なぜコードを細かくしていないのですか?コードでは非常に簡単です – tpbafk

答えて

0

エラーが発生したときに画像が動作し、表示するソリューションをテスト済み:ちょうどからの例を変更した

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); 
    } 
} 

<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> 

そして、ここでは、私がこの例で使用している検証ルールがあります
いくつかの注意:
あなたは検証ルールを提供していないので、私は仮定しています期待どおりに動作し、有効な検証結果を生成します。
TextBox.Textプロパティのバインドには、検証規則は含まれていません。

関連する問題