2017-06-15 68 views
4

在我的UWP應用程序中,我展示了一個ContentDialog和幾個TextBox,並基於用戶輸入執行某些操作。我想要做的是這樣的:UWP正在等待用戶與ContentDialog的交互

ContentDialogResult result = await LoginDialog.ShowAsync(); 
//Nothing else should be executed before the below method finishes executing 
//other code 
//.... 
//.... 
private void DialogPrimaryButton_ClickAsync(object sender, RoutedEventArgs e) 
{ 
    SomethingSynchronous(); 
} 

我無法理解異步等待正確和發生的事情是一個新手,那後面的線

ContentDialogResult result = await LoginDialog.ShowAsync(); 

繼續執行代碼在用戶點擊對話框的主要或次要按鈕之前。我只想在用戶與對話框交互之後繼續前進。從Asynchronous programmingCall asynchronous APIs in C#文件

回答

2

方法1

private async void DialogPrimaryButton_ClickAsync(object sender, RoutedEventArgs e) 
{ 
    await DisplayContentDialog(); 
} 

private async Task DisplayContentDialog() 
{ 
    ContentDialogResult result = await LoginDialog.ShowAsync(); 

    //For Primary, Secondary and Cancel Buttons inside the ContentDialog 
    if (result == ContentDialogResult.Primary) 
    { 
     OutputText.Text = "Primary"; 
     // User Pressed Primary key 
    } 
    else if (result == ContentDialogResult.Secondary) 
    { 
     OutputText.Text = "Secondary"; 
     // User Pressed Secondary key 
    } 
    else 
    { 
     OutputText.Text = "Cancel"; 
     // User pressed Cancel, ESC, or the back arrow. 
    } 
} 

//For custom Buttons inside the ContentDialog 
//Use Button Click event for the custom Buttons inside the ContentDialog 
private void XAMLButton_Click(object sender, RoutedEventArgs e) 
{ 
    OutputText.Text = "XAML Button"; 
    LoginDialog.Hide(); 
} 

方法2

private async void DialogPrimaryButton_ClickAsync(object sender, RoutedEventArgs e) 
{ 
    await DisplayContentDialog(); 
} 

private async Task DisplayContentDialog() 
{ 
    XAMLButton.Click += XAMLButton_Click; 
    LoginDialog.PrimaryButtonClick += LoginDialog_PrimaryButtonClick; 
    LoginDialog.SecondaryButtonClick += LoginDialog_SecondaryButtonClick; 
    LoginDialog.CloseButtonClick += LoginDialog_CloseButtonClick; 
    await LoginDialog.ShowAsync(); 
} 

//For Primary Button inside the ContentDialog 
private void LoginDialog_PrimaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args) 
{ 
    OutputText.Text = "Primary"; 
} 

//For Secondary Button inside the ContentDialog 
private void LoginDialog_SecondaryButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args) 
{ 
    OutputText.Text = "Secondary"; 
} 

//For Cancel Buttons inside the ContentDialog 
private void LoginDialog_CloseButtonClick(ContentDialog sender, ContentDialogButtonClickEventArgs args) 
{ 
    OutputText.Text = "Cancel"; 
} 

//For custom Buttons inside the ContentDialog 
private void XAMLButton_Click(object sender, RoutedEventArgs e) 
{ 
    OutputText.Text = "XAML Button"; 
    LoginDialog.Hide(); 
} 

瞭解異步等待

+0

能否請你告訴我如何做同樣的事情如果這些按鈕是ContentDialog中的定製XAML按鈕(而不是主o r次要) –

+0

@ravikumar使用按鈕單擊事件來做到這一點 –

+0

@ravikumar我已經更新了我的答案 –