Как настроить TextBox
, чтобы получить только определенные значения. например DateTime
поле ввода с установленными настройками формата.Как ограничить TextBox
ответ
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.");
}
}
}
Попробуйте использовать MaskedTextBox.
У него есть такие вещи, как формат DateTime, и еще несколько.
Вы также можете переопределить методы ввода в текстовом поле и оценить ввод в этой точке. Все зависит от вашей архитектуры.
Некоторые я переопределен раньше для такого рода задач:
- OnPreviewTextInput
- OnTextInput
- OnPreviewKeyDown
Как об использовании привязок 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 намного более чистым.
Я говорю о WPF TextBox – Agzam