C# 如何成功实现WPF文本框验证?

C# 如何成功实现WPF文本框验证?,c#,wpf,validation,xaml,visual-studio-2012,C#,Wpf,Validation,Xaml,Visual Studio 2012,我正在尝试为WPF应用程序实现简单的文本框验证,但我遇到了一些问题 我使用了这个指南: MainWindow.xaml中的我的文本框: <TextBox x:Name="textbox1" HorizontalAlignment="Left" Height="23" Margin="93,111,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120" Styl

我正在尝试为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>
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>

!

我可以运行应用程序而不出现任何错误,但验证从未触发。

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

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

没有这个,它就不能工作。

哪个部分不能工作?扳机?验证方法?对不起,我的问题措词不当。我用一段视频更新了这个问题。根本没有启动任何验证,启动应用程序时也没有错误。我正在查看您提供的代码,也许我是盲人,但我没有看到任何订阅任何文本框控件事件(lostfocus、textchanged等)的代码。当您键入文本框时,您如何触发验证?嘿,比尔,我试过PropertyChanged和LostFocus,但都没有给我任何结果<代码>。这应该在文本框中。绑定标记中的文本,对吗?您确定在文本框中键入文本时触发“PropertyChanged”吗?您链接的示例教程正在使用lostfocus。如果你试着去做那件事,效果如何?哇。谢谢成功了,我只是一个n00b。
public MainWindow()
    {
        InitializeComponent();
        this.DataContext = this;
    }