【问题标题】:How to successfully implement WPF textbox validation?如何成功实现 WPF 文本框验证?
【发布时间】: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,但都没有给我任何结果。 &lt;Binding Path="Name" UpdateSourceTrigger="PropertyChanged"&gt;。这应该在绑定标签中的 Textbox.Text 中,对吗?
  • 您确定在文本框中键入文本时会触发“PropertyChanged”吗?您链接的示例教程正在使用 lostfocus。如果您改为尝试该事件,它会起作用吗?

标签: c# wpf validation xaml visual-studio-2012


【解决方案1】:

使用您发布的内容,对我来说效果很好,它会产生红色的“!”文本框上方。但是,我确实记得设置我的 DataContext,即。

public MainWindow()
    {
        InitializeComponent();
        this.DataContext = this;
    }

没有这个就不行了。

【讨论】:

  • 哇。谢谢。做到了,我只是一个n00b。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-21
  • 2014-06-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多