Запрос на ввод пароля coding4fun - отображается, если введен неверный пароль

Я занимаюсь разработкой приложения для Windows Phone 7.1 и использую PasswordInputPrompt управление в библиотеке Coding4fun. Я инициализирую элемент управления и добавляю EventHandler для Completed событие, а затем отобразить элемент управления.

PasswordInputPrompt passwordInput = new PasswordInputPrompt
    {
        Title = "Application Password",
        Message = "Please Enter App Password",
    };
passwordInput.Completed += Pwd_Entered;
passwordInput.Show();

в Completed Обработчик событий. Я проверяю, пустой ли пароль, и если да, то я бы хотел, чтобы отображался запрос.

    void Pwd_Entered(object sender, PopUpEventArgs<string, PopUpResult> e)
    {
        if (!string.IsNullOrWhiteSpace(passwordInput.Value))
        {
            //Do something
        }
        else
        {
            passwordInput.Show();  //This is not working. Is this the correct way???
        }
    }

else часть не работает. Приглашение закрывается, даже если введенный пароль пуст. Может кто-нибудь показать мне правильный путь достижения этого?

1 ответ

Решение

Я сделал несколько быстрых испытаний с этим, и это похоже на работу. Исходный код для элемента управления имеет

 public virtual void OnCompleted(PopUpEventArgs<T, TPopUpResult> result)
{
  this._alreadyFired = true;
  if (this.Completed != null)
    this.Completed((object) this, result);
  if (this.PopUpService != null)
    this.PopUpService.Hide();
  if (this.PopUpService == null || !this.PopUpService.BackButtonPressed)
    return;
  this.ResetWorldAndDestroyPopUp();
}

Подразумевается, что вы можете перезаписать метод.

Итак, создайте класс, который наследуется от элемента управления

public class PasswordInputPromptOveride : PasswordInputPrompt
{
    public override void OnCompleted(PopUpEventArgs<string, PopUpResult> result)
    {
        //Validate for empty string, when it fails, bail out.
        if (string.IsNullOrWhiteSpace(result.Result)) return;


        //continue if we do not have an empty response
        base.OnCompleted(result);
    }
}

В вашем коде позади:

 PasswordInputPrompt passwordInput;

    private void PasswordPrompt(object sender, System.Windows.Input.GestureEventArgs e)
    {
        InitializePopup();
    }

    private void InitializePopup()
    {
        passwordInput = new PasswordInputPromptOveride
        {
            Title = "Application Password",
            Message = "Please Enter App Password",
        };

        passwordInput.Completed += Pwd_Entered;
        passwordInput.Show();
    }

    void Pwd_Entered(object sender, PopUpEventArgs<string, PopUpResult> e)
    {
        //You should ony get here when the input is not null.
        MessageBox.Show(e.Result);
    }

Xaml для запуска запроса пароля

 <Grid VerticalAlignment="Top" x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
  <Button Content="ShowPasswordPrompt" Tap="PasswordPrompt"></Button>
</Grid>
Другие вопросы по тегам