Проверьте WPF: PasswordBox IsNullOrEmpty - PullRequest
0 голосов
/ 15 мая 2018

Мне нужно проверить, введены ли данные в поле.Для TextBox это просто:

XML-код

<Window.Resources>
        <ControlTemplate x:Key="validationTemplate">
            <DockPanel>
                <TextBlock Foreground="Red" FontSize="20">!</TextBlock>
                <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>
    </Window.Resources>

<TextBox x:Name="loginTextBox" Validation.ErrorTemplate="{StaticResource validationTemplate}" Style="{StaticResource textBoxInError}" 
                    HorizontalAlignment="Left" Height="23" Margin="135,0,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="250">
                <TextBox.Text>
                    <Binding Path="Login" >
                        <Binding.ValidationRules>
                            <local:ValidationRuleModel />
                        </Binding.ValidationRules>
                    </Binding>
                </TextBox.Text>
            </TextBox>

Код класса ValidationRuleModel

public class ValidationRuleModel : ValidationRule
    {
        public ValidationRuleModel()
        {
        }

        public override ValidationResult Validate(object value, CultureInfo cultureInfo)
        {
            try
            {
                if (string.IsNullOrEmpty((string)value))
                {
                    return new ValidationResult(false, "Enter the data in the field");
                }
                else
                {
                    return ValidationResult.ValidResult;
                }
            }
            catch (Exception e)
            {
                return new ValidationResult(false, "Illegal characters or " + e.Message);
            }
        }
    }

Но как это сделать для PasswordBoxes.Поскольку Password не может быть привязан из-за соображений безопасности,

<PasswordBox.Password>
                    <Binding Path="Password" >
                        <Binding.ValidationRules>
                            <local:ValidationRuleModel />
                        </Binding.ValidationRules>
                    </Binding>
                </PasswordBox.Password>

не может быть выполнено.Я попытался использовать подсказки из здесь и здесь , но ничего не произошло.

Итак, как проверить, вводил ли пользователь данные в поле PasswordBox?

1 Ответ

0 голосов
/ 15 мая 2018

Вы можете использовать этот класс PasswordBoxAssistant :

<PasswordBox local:PasswordBoxAssistant.BindPassword="True">
    <local:PasswordBoxAssistant.BoundPassword>
        <Binding Path="Password" Mode="TwoWay">
            <Binding.ValidationRules>
                <local:ValidationRuleModel />
            </Binding.ValidationRules>
        </Binding>
    </local:PasswordBoxAssistant.BoundPassword>
</PasswordBox>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...