如何从弹出控件获取用户输入

时间:2013-07-22 18:38:26

标签: windows-phone-7 user-input messagebox

我有一个使用wp7弹出窗口的UserControl。用户控件有一个用于输入的文本框和一个提交按钮。我的问题是,一旦显示弹出窗口,代码就不会停止。它继续通过代码,不等待用户按提交。

使用“Okay”按钮使代码“停止”类似于消息框的好习惯是什么?

//my custom popup control
InputBox.Show("New Highscore!", "Enter your name!", "Submit");
string name = InputBox.GetInput();
//it does not wait for the user to input any data at this point, and continues to the next piece of code

if (name != "")
{
     //some code
}

1 个答案:

答案 0 :(得分:1)

您可以使用事件或异步方法完成此操作。对于该活动,您将订阅弹出窗口的已结束事件。

    InputBox.Closed += OnInputClosed;
    InputBox.Show("New Highscore!", "Enter your name!", "Submit");

...

private void OnInputClosed(object sender, EventArgs e)
{
    string name = InputBox.Name;
}

当用户按下确定按钮

时,您将触发该事件
private void OnOkayButtonClick(object sender, RoutedEventArgs routedEventArgs)
{
    Closed(this, EventArgs.Empty);
}

另一种选择是使用异步方法。为此,您需要async Nuget包。要使方法异步,您可以使用两个主要对象:TaskTaskCompletionSource

private Task<string> Show(string one, string two, string three)
{
    var completion = new TaskCompletionSource<string>();

    OkButton.Click += (s, e) =>
        {
            completion.SetResult(NameTextBox.Text);
        };


    return completion.Task;
}

然后等待调用show方法。

string user = await InputBox.Show("New Highscore!", "Enter your name!", "Submit");

我相信Coding4Fun toolkit也有一些不错的input boxes