【发布时间】:2015-08-26 01:51:42
【问题描述】:
我正在尝试为 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>
我在 MainWindow.xaml.cs 中的 NameValidator 类:
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>
我可以运行应用程序而不会出现任何错误,但永远不会触发验证。
【问题讨论】:
-
哪个部分不起作用?触发?验证方法?等
-
对不起,我的问题措辞不当。我用截屏视频更新了这个问题。根本没有触发验证,启动应用程序时也没有错误。
-
我正在查看您提供的代码,也许我是盲人,但我没有看到任何订阅任何文本框控件事件(lostfocus、textchanged 等)的代码你在输入文本框时触发验证?
-
嘿,比尔,我试过 PropertyChanged 和 LostFocus,但都没有给我任何结果。
<Binding Path="Name" UpdateSourceTrigger="PropertyChanged">。这应该在绑定标签中的 Textbox.Text 中,对吗? -
您确定在文本框中键入文本时会触发“PropertyChanged”吗?您链接的示例教程正在使用 lostfocus。如果您改为尝试该事件,它会起作用吗?
标签: c# wpf validation xaml visual-studio-2012