2011-02-06 100 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