WPF中文本框的自定义验证

时间:2011-05-20 11:51:27

标签: wpf validation textbox

所以我试图在这个例子中做点什么:http://www.codeproject.com/KB/WPF/wpfvalidation.aspx

我的文本框目前看起来像这样:

<TextBox Height="23" HorizontalAlignment="Left" Margin="118,60,0,0" Name="CreateUserCPRTextbox" VerticalAlignment="Top" Width="120"  >
                <TextBox.Text>

                    <Binding Path="Name" UpdateSourceTrigger="LostFocus">
                        <Binding.ValidationRules>
                            <validators:TextRangeValidator
                        MinimumLength="10"
                        MaximumLength="10"
                        ErrorMessage="ID has to be 10 letters" />
                        </Binding.ValidationRules>
                    </Binding>
                </TextBox.Text>

            </TextBox>

我直接从该网站上的示例中复制了我的TextRangeValidator。当我失去对文本框的关注时,没有任何事情发生。无论我输入什么。有任何想法吗? :)

3 个答案:

答案 0 :(得分:2)

您是否设置了Validation.ErrorTemplate?它在下面的示例中的Application.Resources中定义。您可能错过了

<Application.Resources>

        <Style TargetType="{x:Type TextBox}">
            <Setter Property="Validation.ErrorTemplate">
                <Setter.Value>
                    <ControlTemplate>
                        <DockPanel LastChildFill="True">

                            <TextBlock DockPanel.Dock="Right"
                                Foreground="Orange"
                                Margin="5" 
                                FontSize="12pt"
                                Text="{Binding ElementName=MyAdorner, 
                           Path=AdornedElement.(Validation.Errors)[0].ErrorContent}">
                            </TextBlock>

                            <Border BorderBrush="Green" BorderThickness="3">
                                <AdornedElementPlaceholder Name="MyAdorner" />
                            </Border>

                        </DockPanel>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            <Style.Triggers>
                <Trigger Property="Validation.HasError" Value="true">
                    <Setter Property="ToolTip"
                        Value="{Binding RelativeSource={RelativeSource Self}, 
                   Path=(Validation.Errors)[0].ErrorContent}"/>
                </Trigger>
            </Style.Triggers>
        </Style>

    </Application.Resources>

修改

您的默认值未触发验证例程。要强制它验证默认值,您必须设置

<validators:TextRangeValidator ValidatesOnTargetUpdated="True"
                        MinimumLength="10"
                        MaximumLength="10"
                        ErrorMessage="ID has to be 10 letters" />

答案 1 :(得分:1)

我认为您需要在Text的绑定中设置ValidatesOnDataErrors=True才能使其正常工作

答案 2 :(得分:0)

WPF TextBox验证

<Style x:Key="TextBoxInError" TargetType="TextBox">
        <Setter Property="Validation.ErrorTemplate">
            <Setter.Value>
                <ControlTemplate>
                    <DockPanel>                        

                        <Grid>
                            <Polygon Points="20,10,20,0 0,0"
                            Stroke="Black"
                            StrokeThickness="1"
                            Fill="Red"
                            HorizontalAlignment="Right"
                            VerticalAlignment="Top"
                            ToolTip="{Binding ElementName=adorner, 
                               Path=AdornedElement.(Validation.Errors)[0].ErrorContent}"/>
                            <AdornedElementPlaceholder x:Name="adorner"/>


                        <AdornedElementPlaceholder Name="customAdorner"  VerticalAlignment="Center" >
                            <Border BorderBrush="red" BorderThickness="1" />
                        </AdornedElementPlaceholder>


                        </Grid>

                        <Border Background="Red" DockPanel.Dock="right" Margin="5,0,0,0" 
                            Width="150" Height="20" CornerRadius="5"
                            ToolTip="{Binding ElementName=customAdorner, 
                                      Path=AdornedElement.(Validation.Errors)[0].ErrorContent}">
                            <TextBlock Text= "{Binding ElementName=customAdorner, 
                                      Path=AdornedElement.(Validation.Errors)[0].ErrorContent}" VerticalAlignment="center" HorizontalAlignment="Left" 
                               FontWeight="Bold" Foreground="white" Width="250" />                               


                        </Border>


                    </DockPanel>



                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <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>