更好的解决方案可能是允许用户离开空/空文本框,但要么将文本恢复为初始值(如果有的话),要么提供验证错误。使用 IDataErrorInfo 提供验证错误相对容易。
作为一名软件用户,当应用程序阻止我离开某个领域时,我会感到恼火。
重设值法
有关如何维护和获取先前值的信息,请参阅此 stackoverflow 方法。在 LostFocus 事件中,如果当前值无效,您可以将成员变量设置回 _oldValue。
确定文本框在失去焦点事件中的先前值?WPF
验证方法
这两个日期存储在模型或视图模型类中。在该类中实现 IDataErrorInfo ( http://msdn.microsoft.com/en-us/library/system.componentmodel.idataerrorinfo(v=vs.95).aspx )。然后在您的 xaml 中,您可以显示验证错误。
//This is your model/viewmodel validation logic
public string this[string columnName]
{
get
{
string result = null;
if (columnName == "FirstName")
{
if (string.IsNullOrEmpty(FirstName))
result = "Please enter a First Name";
}
if (columnName == "LastName")
{
if (string.IsNullOrEmpty(LastName))
result = "Please enter a Last Name";
}
if (columnName == "Age")
{
if (Age < = 0 || Age >= 99)
result = "Please enter a valid age";
}
return result;
}
}
//Here is a sample of a xaml text block
<textbox x:Name="tbFirstName" Grid.Row="0" Grid.Column="1" Validation.Error="Validation_Error" Text="{Binding UpdateSourceTrigger=LostFocus, Path=FirstName, ValidatesOnDataErrors=true, NotifyOnValidationError=true}" />
您还可以查看这些其他 StackOverflow 帖子 -
什么是 IDataErrorInfo 以及它如何与 WPF 一起使用?
IDataErrorInfo 通知