[英]ContentDialog.showAsync on Win 10 Universal window app
我想在啟動應用程序后立即將contentDialog顯示為登錄屏幕。 只有在用戶通過身份驗證后,我才會顯示其余頁面,否則不會出現任何問題。
我不希望用戶點擊任何按鈕來加載這個內容對話框,它應該在應用程序啟動后立即出現。
在MainPage構造函數中,我調用方法來顯示對話框。
但我得到了這個例外“價值不在預期的范圍內。” (System.ArgumentException),然后應用程序沒有加載。
這是來自我的MainPage.xaml
<ContentDialog x:Name="loginDialog"
VerticalAlignment="Stretch"
Title="Login"
PrimaryButtonText="Login"
SecondaryButtonText="Cancel">
<StackPanel>
<StackPanel>
<TextBlock Text="Username" />
<TextBox x:Name="Username" ></TextBox>
</StackPanel>
<StackPanel>
<TextBlock Text="Password" />
<TextBox x:Name="Password" ></TextBox>
</StackPanel>
</StackPanel>
</ContentDialog>
首先,您只想在用戶在該頁面上時顯示彈出窗口,因此將代碼從構造函數移動到OnNavigatedTo
方法。 當UI沒有准備好時,確實會拋出一個錯誤,所以很容易就是await Task.Delay(1);
優先,然后調用您的ShowPopup方法。
protected override async void OnNavigatedTo(NavigationEventArgs e)
{
await Task.Delay(1);
var result = await loginDialog.ShowAsync();
}
編輯:正如@sibbl所提到的,如果你使用代碼隱藏,那么使用頁面Loaded事件會更明智。 我去OnNavigatedTo,因為我總是使用Prism for MVVM,而在ViewModel中,它是你需要實現的OnNavigatedTo方法。
private async void MainPage_OnLoaded(object sender, RoutedEventArgs e)
{
var result = await ShowPopup();
}
額外注意:您不應該為ShowPopup方法使用async void ,因為這只應該用於事件處理程序。 我真的鼓勵你去async / await上閱讀,以防止'怪異'的錯誤。 所以你的代碼歸結為:
protected override async void OnNavigatedTo(NavigationEventArgs e)
{
await Task.Delay(1);
var result = await ShowPopup();
}
private Task<ContentDialogResult> ShowPopup()
{
return loginDialog.ShowAsync().AsTask();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.