如何成功实现 WPF 文本框验证
本文关键字:WPF 文本 验证 实现 何成功 成功 | 更新日期: 2023-09-27 17:55:25
我正在尝试为 WPF 应用程序实现应该是简单的文本框验证,但我遇到了一些问题。
我使用了本指南:http://www.codeproject.com/Tips/690130/Simple-Validation-in-WPF
我在 MainWindow.xaml 中的文本框:
<TextBox x:Name="textbox1" HorizontalAlignment="Left" Height="23"
Margin="93,111,0,0" TextWrapping="Wrap" VerticalAlignment="Top"
Width="120" Style="{StaticResource textBoxInError}"
Validation.ErrorTemplate="{StaticResource validationErrorTemplate}">
<TextBox.Text>
<Binding Path="Name" UpdateSourceTrigger="PropertyChanged">
<Binding.ValidationRules>
<local:NameValidator/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
My NameValidator class in MainWindow.xaml.cs:
public class NameValidator : ValidationRule
{
public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo)
{
if (value == null)
return new ValidationResult(false, "value cannot be empty.");
else
{
if (value.ToString().Length > 3)
return new ValidationResult(false, "Name cannot be more than 3 characters long.");
}
return ValidationResult.ValidResult;
}
}
我在 App.xaml 中的静态资源:
<ControlTemplate x:Key="validationErrorTemplate">
<DockPanel>
<TextBlock Foreground="Red" DockPanel.Dock="Top">!</TextBlock>
<AdornedElementPlaceholder x:Name="ErrorAdorner"></AdornedElementPlaceholder>
</DockPanel>
</ControlTemplate>
<Style x:Key="textBoxInError" TargetType="{x:Type TextBox}">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip"
Value="{Binding RelativeSource={x:Static RelativeSource.Self},
Path=(Validation.Errors)[0].ErrorContent}"/>
</Trigger>
</Style.Triggers>
</Style>
我可以运行应用程序而不会出现任何错误,但永远不会触发验证。
使用您发布的内容,它对我来说效果很好,它会在文本框上方生成红色的"! 但是,我确实记得设置我的数据上下文,即。
public MainWindow()
{
InitializeComponent();
this.DataContext = this;
}
没有这个,它将无法工作。