【问题标题】:Validate WPF: PasswordBox IsNullOrEmpty验证 WPF:PasswordBox IsNullOrEmpty
【发布时间】:2018-10-25 04:15:27
【问题描述】:

我需要检查是否在字段中输入了数据。对于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>

做不到。我尝试使用来自herehere 的提示,但没有任何反应。

那么,如何检查用户是否在PasswordBox字段中输入了数据?

【问题讨论】:

    标签: c# wpf validation passwords


    【解决方案1】:

    你可以使用this PasswordBoxAssistant class:

    <PasswordBox local:PasswordBoxAssistant.BindPassword="True">
        <local:PasswordBoxAssistant.BoundPassword>
            <Binding Path="Password" Mode="TwoWay">
                <Binding.ValidationRules>
                    <local:ValidationRuleModel />
                </Binding.ValidationRules>
            </Binding>
        </local:PasswordBoxAssistant.BoundPassword>
    </PasswordBox>
    

    【讨论】:

    • 感谢您的回答。它有帮助。而且,也许,您可以告诉我在这种情况下我必须为字段 PasswordBox 设置什么样的属性:passwordBox.GetBindingExpression(PasswordBox. **Property** ).UpdateSource(); 例如,对于TexBox,我使用TextBoxProperty loginTextBox.GetBindingExpression(TextBox.TextProperty).UpdateSource();
    • 如果您还有其他问题,请提出新问题。请不要在 cmets 字段中提出其他问题。
    猜你喜欢
    • 2011-10-18
    • 2012-03-31
    • 2015-04-01
    • 2016-10-30
    • 1970-01-01
    • 2011-01-17
    • 2020-01-18
    • 2012-01-24
    • 1970-01-01
    相关资源
    最近更新 更多