2009-06-30 6 views
4

Как настроить TextBox, чтобы получить только определенные значения. например DateTime поле ввода с установленными настройками формата.Как ограничить TextBox

ответ

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 TextBox – Agzam

0

Вы также можете переопределить методы ввода в текстовом поле и оценить ввод в этой точке. Все зависит от вашей архитектуры.

Некоторые я переопределен раньше для такого рода задач:

  • OnPreviewTextInput
  • OnTextInput
  • OnPreviewKeyDown
6

Как об использовании привязок Validation, который поставляется с WPF Framework.

Создать ValidationRule как так

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 намного более чистым.

 Смежные вопросы

  • Нет связанных вопросов^_^