簡體   English   中英

Win 10 Universal窗口應用程序上的ContentDialog.showAsync

[英]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>

這不可能嗎? 只有點擊按鈕才能觸發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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM