2017-02-22 1 views
0

유효성 검사 규칙에 바인딩되는 텍스트 상자가 있습니다. 내가 Validation.HasError 그러나wpf- Validation.HasError 또는 다른 방법을 사용하여 올바른 텍스트 상자의 틱 아이콘이있는 녹색 테두리

True 인 경우 빨간색 테두리를 표시 할 수 있어요, 나는 사용자 입력이 올 때 녹색 테두리를 표시 할 수 없습니다 그리고 난 발견 때문에 Validation.HasError 및 내 트리거 속성 replys Validation.HasError 유효성 검사 오류가 없으면 False가 아닙니다.

이것을 달성하기위한 적절한 방법이나 해결 방법이 있는지 궁금합니다.

답변

1

Validation.HasError이 참일 때 기본 테두리를 녹색으로 설정하고 트리거에서 변경할 수 있습니다. msdn exapmle를 사용

, 당신은 스타일에 BorderBrushBorderThickness을 설정할 수 있습니다 : 코드의

<Style x:Key="textBoxInError" TargetType="{x:Type TextBox}"> 
     <Setter Property="BorderBrush" Value="Green"/> 
     <Setter Property="BorderThickness" Value="2"/> 
     <Style.Triggers> 
      <Trigger Property="Validation.HasError" Value="true"> 
       <Setter Property="ToolTip" 
      Value="{Binding RelativeSource={x:Static RelativeSource.Self}, 
          Path=(Validation.Errors)[0].ErrorContent}"/> 
       <Setter Property="BorderBrush" Value="Red"/> 
      </Trigger> 
      <Trigger Property="TextBox.Text" Value=""> 
       <Setter Property="BorderBrush" Value="Yellow"/> 
      </Trigger> 
     </Style.Triggers> 
    </Style> 

다른 부분이

<TextBox Name="textBox1" Width="50" Height="30" FontSize="15" DataContext="{Binding}" 
     Validation.ErrorTemplate="{StaticResource validationTemplate}" 
     Style="{StaticResource textBoxInError}" 
     Grid.Row="1" Grid.Column="1" Margin="2"> 
     <TextBox.Text> 
      <Binding Path="Age" 
      UpdateSourceTrigger="PropertyChanged" > 
       <Binding.ValidationRules> 
        <local:AgeRangeRule Min="21" Max="130"/> 
       </Binding.ValidationRules> 
      </Binding> 
     </TextBox.Text> 
    </TextBox> 

public class AgeRangeRule : ValidationRule 
{ 
    private int _min; 
    private int _max; 

    public AgeRangeRule() 
    { 
    } 

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

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


    public override ValidationResult Validate(object value, CultureInfo cultureInfo) 
    { 
     int age = 0; 

     try 
     { 
      if (((string)value).Length > 0) 
       age = Int32.Parse((String)value); 
     } 
     catch (Exception e) 
     { 
      return new ValidationResult(false, "Illegal characters or " + e.Message); 
     } 

     if ((age < Min) || (age > Max)) 
     { 
      return new ValidationResult(false, 
       "Please enter an age in the range: " + Min + " - " + Max + "."); 
     } 
     else 
     { 
      return new ValidationResult(true, null); 
     } 
    } 
} 
+0

있습니다 내가 할 수있는 방법이있다 녹색을 기본값으로 사용하지 않습니까? 빈 텍스트 일 ​​때 일반 텍스트 상자가 필요합니다. – mark

+0

스타일에 다른 트리거를 추가하여 더 많은 경우를 고려하십시오. 내 편집을 참조하십시오. – Ron

+0

이 예제에서는 Age 속성에 Nullable int (int?)를 사용해야합니다. – Ron

관련 문제