2009-06-30 79 views

回答

5

http://www.codeproject.com/KB/WPF/wpfvalidation.aspx

和一個函數。這只是檢查字符串是否有內容。根據您要執行的確切格式,您的情況會更復雜:

public string Name 
{ 
    get { return _name; } 
    set 
    { 
     _name = value; 
     if (String.IsNullOrEmpty(value)) 
     { 
      throw new ApplicationException("Customer name is mandatory."); 
     } 
    } 
} 
0

嘗試使用MaskedTextBox。

它有像DateTime定義的格式等等。

+0

我在說WPF文本框 – Agzam 2009-06-30 22:15:48

0

您也可以覆蓋文本框上的輸入方法並評估該點處的輸入。這完全取決於你的架構。

一些我已經爲這樣的任務之前覆蓋:

  • OnPreviewTextInput
  • OnTextInput
  • OnPreviewKeyDown
6

有關使用綁定驗證附帶的WPF框架如何。

像這樣

public class DateFormatValidationRule : ValidationRule 
{ 
    public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo) 
    { 
    var s = value as string; 
    if (string.IsNullOrEmpty(s)) 
     return new ValidationResult(false, "Field cannot be blank"); 
    var match = Regex.Match(s, @"^\d{2}/\d{2}/\d{4}$"); 
    if (!match.Success) 
     return new ValidationResult(false, "Field must be in MM/DD/YYYY format"); 
    DateTime date; 
    var canParse = DateTime.TryParse(s, out date); 
    if (!canParse) 
     return new ValidationResult(false, "Field must be a valid datetime value"); 
    return new ValidationResult(true, null); 
    } 
} 

創建有效性規則然後將其添加到您的XAML綁定以及風格來處理時,該字段爲無效。 (如果您傾向於完全更改控件,也可以使用Validation.ErrorTemplate。)這一個將ValidationResult文本作爲工具提示並將該框設置爲紅色。

<TextBox x:Name="tb"> 
     <TextBox.Text> 
      <Binding Path="PropertyThatIsBoundTo" UpdateSourceTrigger="PropertyChanged"> 
       <Binding.ValidationRules> 
        <val:DateFormatValidationRule/> 
       </Binding.ValidationRules> 
      </Binding> 
     </TextBox.Text> 
     <TextBox.Style> 
      <Style TargetType="{x:Type TextBox}"> 
       <Style.Triggers> 
        <Trigger Property="Validation.HasError" Value="true"> 
         <Setter Property="ToolTip" 
           Value="{Binding RelativeSource={RelativeSource Self}, 
          Path=(Validation.Errors)[0].ErrorContent}"/> 
         <Setter Property="Background" Value="Red"/> 
        </Trigger> 
       </Style.Triggers> 
      </Style> 
     </TextBox.Style> 
    </TextBox> 

一個建議是走的風格,並把它變成一個資源字典,所以你想擁有同樣的外觀,當其自身的驗證失敗的任何文本框。使XAML更加清潔。