如何设置TextBox
以仅获取特定值。例如DateTime
输入框,其中包含已定义的格式设置。
答案 0 :(得分:6)
如何使用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更加清洁。
答案 1 :(得分:5)
http://www.codeproject.com/KB/WPF/wpfvalidation.aspx
<TextBox Text="{Binding Path=Name}" />
一个功能。这只是检查字符串是否有内容。根据您要强制执行的确切格式,您的内容会更复杂:
public string Name
{
get { return _name; }
set
{
_name = value;
if (String.IsNullOrEmpty(value))
{
throw new ApplicationException("Customer name is mandatory.");
}
}
}
答案 2 :(得分:0)
尝试使用MaskedTextBox。
它有类似DateTime定义的格式,还有更多。
答案 3 :(得分:0)
您还可以覆盖文本框上的输入方法,并在该点评估输入。这一切都取决于你的架构。
我之前已经覆盖了一些这样的任务: