Пользовательская проверка текстового поля в WPF - PullRequest
0 голосов
/ 20 мая 2011

Итак, я пытаюсь сделать что-то в этом примере: 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 ]

2 голосов
/ 20 мая 2011

Вы установили шаблон 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>

EDIT

Ваше значение по умолчанию не запускает процедуру проверкиЧтобы заставить его проверить значение по умолчанию, вы должны установить

<validators:TextRangeValidator ValidatesOnTargetUpdated="True"
                        MinimumLength="10"
                        MaximumLength="10"
                        ErrorMessage="ID has to be 10 letters" />
1 голос
/ 20 мая 2011

Я думаю, вам нужно установить ValidatesOnDataErrors=True в привязке для текста, чтобы он работал

0 голосов
/ 19 марта 2013

Проверка текстового поля WPF

<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...