ValidationRule Red Border Issue
В своем приложении WPF я создал ValidationRules для моих текстовых полей, чтобы он не позволял пустой строке работать нормально и отображать красную рамку с текстом, сообщающим пользователю, что он не может быть пустым. Когда приложение запускается, все поля пустые, ожидая ввода, но я все еще вижу красную рамку вокруг них. Это нормальное поведение? Примечание. Я бы предпочел, чтобы оно срабатывало после запуска события changechange или lostfocus, когда пользователь использует форму, а не при первоначальной загрузке формы.
Пример проверки, которую я делаю:
<TextBox x:Name="itemNum" HorizontalAlignment="Left" Height="23" Margin="82,58,0,0" VerticalAlignment="Top" Width="90"
HorizontalContentAlignment="Left" VerticalContentAlignment="Center" PreviewKeyDown="ItemNum_PreviewKeyDown"
PreviewTextInput="ItemNum_PreviewTextInput" TabIndex="0" Validation.ErrorTemplate="{StaticResource validationErrorTemplate}">
<TextBox.Text>
<Binding Path="rxID" Mode="TwoWay" StringFormat="{}{0:#}" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<MY:TextBoxNotEmptyValidationRule x:Name="rxIDValidation" ValidatesOnTargetUpdated="True" />
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
Мой TextBoxNotEmptyValidationRule Класс:
public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
{
string str = value as string;
if (string.IsNullOrEmpty(str))
{
return new ValidationResult(false, "Value CAN NOT BE empty");
}
return ValidationResult.ValidResult;
}
2 ответа
По твоей логике кажется, что это нормально. Позволяет определить флаг bool и установить его в значение false или true, не имеет значения, чем при запуске приложения и проверке флага, если значение флага является начальным значением, ничего не делать. Кроме того, проверка "если" должна проверять также и выделенный элемент. Если сфокусированный элемент - это наше текстовое поле, а ваш флаг не является начальным значением, вы можете изменить границу текстового блока.
Вы можете посмотреть по следующей ссылке: Проверка при загрузке
В идеале это нормальное поведение в приложениях XAML, если вы используете IDataErorInfo или INotifyDataErrorInfo . Вы можете использовать beginInit и EndInit для достижения желаемого результата.