Silverlight验证未按预期工作

时间:2013-02-28 11:38:34

标签: c# wpf silverlight

问题是如果我直接点击按钮,Silverlight没有通知我有关异常的信息。如果我在文本框中写了一些内容并将其删除,一切都还可以。

我有一个名为UserLogin的课程。

  public class UserLogin
    {
        //---------------------------------------------------
        // Fields

        private string _userName;
        private string _password;

        //----------------------------------------------------
        // Properties

        public string Username
        {
            get
            {
                return _userName;
            }
            set
            {
                if (value.Length==0)
                {
                    throw new Exception("You must enter Username");
                }
                _userName = value;
            }
        }

        public string Password
        {
            get
            {
                return _password;
            }
            set
            {
                if (value.Length==0)
                {
                    throw new Exception("You must enter password");
                }
                _password = value;
            }
        }
    }

在xaml:

    <StackPanel BindingValidationError="LoginStackPanel_BindingValidationError">
             <TextBox x:Name="UsernameTextBox" Text="{Binding Username, Mode=TwoWay, ValidatesOnExceptions=True, NotifyOnValidationError=True}"/>
             <PasswordBox x:Name="PasswordBox" Password="{Binding Password, Mode=TwoWay,ValidatesOnExceptions=True, NotifyOnValidationError=True}"/>
<Button x:Name="LoginButton" Content="Sign In" />
    </StackPanel>

这是BindingValidationError事件。我只是改变对象的背景并为它们设置工具提示。

   private void LoginStackPanel_BindingValidationError(object sender, ValidationErrorEventArgs e)
        {
            if (e.Action == ValidationErrorEventAction.Added)
            {
                if (e.OriginalSource is TextBox)
                {
                    (e.OriginalSource as TextBox).Background = new SolidColorBrush(Colors.Yellow);

                    ToolTipService.SetToolTip((e.OriginalSource as TextBox), e.Error.Exception.Message);
                }
                else if (e.OriginalSource is PasswordBox)
                {
                    (e.OriginalSource as PasswordBox).Background = new SolidColorBrush(Colors.Yellow);

                    ToolTipService.SetToolTip((e.OriginalSource as PasswordBox), e.Error.Exception.Message);
                }
            }
            else if (e.Action == ValidationErrorEventAction.Removed)
            {
                if (e.OriginalSource is TextBox)
                {
                    (e.OriginalSource as TextBox).Background = new SolidColorBrush(Colors.White);

                    ToolTipService.SetToolTip((e.OriginalSource as TextBox), null);
                }
                else if (e.OriginalSource is PasswordBox)
                 {
                     (e.OriginalSource as PasswordBox).Background = new SolidColorBrush(Colors.White);

                     ToolTipService.SetToolTip((e.OriginalSource as PasswordBox), null);
                 }
            }
        }

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。这就是我强制textBox检查异常的方法。

UsernameTextBox.GetBindingExpression(TextBox.TextProperty).UpdateSource();