0

このようなポップアップを作成しようとしています

// Create a Popup
var Pop = new Popup() { IsOpen = true };

// Create a StackPanel for the Buttons
var SPanel = new StackPanel() { Background = MainGrid.Background };

// Set the comment
var TxtBlockComment = new TextBlock { Margin = new Thickness(20, 5, 20, 5), Text = Obj.Comment };

// Set the value
var TxtBoxValue = new TextBox { Name = "MeasureValue" };
TxtBoxValue.KeyUp += (sender, e) => { VerifyKeyUp(sender, Measure); };

// Create the button
var ButtonFill = new Button { Content = Loader.GetString("ButtonAccept"), Margin = new Thickness(20, 5, 20, 5), Style = (Style)App.Current.Resources["TextButtonStyle"] };
ButtonFill.Click += (sender, e) => { Obj.Value = TxtBoxValue.Text; };

// Add the items to the StackPanel
SPanel.Children.Add(TxtBlockComment);
SPanel.Children.Add(TxtBoxValue);
SPanel.Children.Add(ButtonFill);

// Set the child on the popup
Pop.Child = SPanel;

ButtonFill.Clickイベントが実行されたときにメインスレッドに通知したいので、そのスレッドを続行できます

しかし、どうすればそれを行うことができますか?

4

2 に答える 2

2

に似たダイアログのような動作を実現する方法を尋ねていると仮定しますFileOpenPicker.PickSingleFileAsyncTaskCompletionSource待機可能なタスクを作成するために使用できます。

private Task<string> OpenPopupAsync()
{
    var taskSource = new TaskCompletionSource<string>();

    // Create a Popup
    var Pop = new Popup() { IsOpen = true };

    // Create a StackPanel for the Buttons
    var SPanel = new StackPanel() { Background = MainGrid.Background };

    // Set the comment
    var TxtBlockComment = new TextBlock { Margin = new Thickness(20, 5, 20, 5), Text = Obj.Comment };

    // Set the value
    var TxtBoxValue = new TextBox { Name = "MeasureValue" };
    TxtBoxValue.KeyUp += (sender, e) => { VerifyKeyUp(sender, Measure); };

    // Create the button
    var ButtonFill = new Button { Content = Loader.GetString("ButtonAccept"), Margin = new Thickness(20, 5, 20, 5), Style = (Style)App.Current.Resources["TextButtonStyle"] };
    ButtonFill.Click += (sender, e) => { Pop.IsOpen = false; taskSource.SetResult(TxtBoxValue.Text); };

    // Add the items to the StackPanel
    SPanel.Children.Add(TxtBlockComment);
    SPanel.Children.Add(TxtBoxValue);
    SPanel.Children.Add(ButtonFill);

    // Set the child on the popup
    Pop.Child = SPanel;

    return taskSource.Task;
}

要するに:

  • のインスタンスを作成しますTaskCompletionSource
  • そのTaskプロパティを待機可能なタスクとして返します
  • 呼び出しメソッドを続行したい場合は、呼び出しますSetResult

呼び出し元のメソッドawaitでは、実行を続行する前にメソッドが戻るだけです。

string result = await OpenPopupAsync();
// continue execution after the method returns

また、ポップアップを実装する簡単な方法については、 Callisto の Flyoutコントロールを参照することをお勧めします。

于 2013-01-10T06:00:29.540 に答える
0

クラスにブールプロパティを配置し、最初のイベント内で、そのブールをtrueに設定します。

ButtonFill.Click += (sender, e) => { ButtonClicked = true; Obj.Value = TxtBoxValue.Text; };
于 2013-01-09T11:09:32.533 に答える