0

wp7 でポップアップ ウィンドウを利用する UserControl があります。ユーザー コントロールには、入力用のテキスト ボックスと送信ボタンがあります。私の問題は、ポップアップが表示されるとコードが停止しないことです。コードを続行し、ユーザーが送信を押すのを待ちません。

「OK」ボタンのあるメッセージ ボックスのように、コードを「停止」させるための良い方法は何ですか?

//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
}
4

1 に答える 1

1

これは、イベントまたは非同期メソッドのいずれかで実現できます。イベントの場合、ポップアップの Closed イベントをサブスクライブします。

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

...

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

ユーザーが [OK] ボタンを押したときにイベントを発生させます。

private void OnOkayButtonClick(object sender, RoutedEventArgs routedEventArgs)
{
    Closed(this, EventArgs.Empty);
}

もう 1 つのオプションは、非同期メソッドを使用することです。これには、非同期 Nuget パックが必要です。メソッドを非同期にするには、 TaskTaskCompletionSourceの 2 つのメイン オブジェクトを使用します。

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 ツールキットにもいくつかの優れた入力ボックスがあると思います

于 2013-07-22T18:57:57.020 に答える