2011-02-06 61 views
0

晚上好,获取WPF控件的验证状态

我有分开的电话号码(区号,前缀,后缀)的部分一个PhoneNumber类和我验证由长度和无效区号文本框。我想创建一个行为,当当前的行为有效时,它会自动跳转到下一个控件。我可能硬编码在绕过代码隐藏的能力,但我宁愿用户数据验证和行为,以始终如一地执行和重用该能力。

但我遇到了一个问题,试图让TextBox控件验证状态。你在哪里可以找到?如果有办法获得这个价值,那么它是否有一个相关的变化事件?

控件样式其中挂接验证

  <Style x:Key="ToolTipValidation" TargetType="{x:Type Control}"> 
       <Setter Property="Validation.ErrorTemplate" Value="{StaticResource StandardErrorValidationTemplate}"/> 
       <Style.Triggers> 
        <Trigger Property="Validation.HasError" Value="True"> 
         <Setter Property="ToolTip" Value="{Binding (Validation.Errors)[0].ErrorContent, RelativeSource={x:Static RelativeSource.Self}}"/> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 

显然,控制应用了错误模板时,则有错误。无论出于何种原因,行为错误处理程序都没有选择它。

回答

1

调查Validation.HasError附属性。还有你可以处理的事件Validation.Error

更新:

您可以订阅Validation.Error事件代码隐藏这样的:

Validation.AddErrorHandler(myTextBox, OnValidationError); 

在错误处理程序可以是这样的:

private void OnValidationError(object o, ValidationErrorEventArgs e) 
{ 
    if (e.Action == ValidationErrorEventAction.Added) 
    { 
     // on error added logic 
    } 
    else 
    { 
     // on error removed logic 
    }   
} 
+0

我可能错过了一些东西,我找不到Validation.Error。我确实看到了Validation.ErrorEvent,但这是一个路由事件,而我的AddHandler语句告诉我ErrorEvent不是System.Windows.Controls.Validation的事件。 – CodeWarrior 2011-02-06 20:38:36