gpt4 book ai didi

c# - Win 10 通用窗口应用程序上的 ContentDialog.showAsync

转载 作者:太空狗 更新时间:2023-10-30 01:17:00 24 4
gpt4 key购买 nike

我想在应用程序启动后立即将 contentDialog 显示为登录屏幕。只有当用户通过身份验证时,我才想显示其余页面,否则什么都不会出现。

我不希望用户点击任何按钮来加载这个内容对话框,它应该在应用启动后立即自动出现。

在 MainPage 构造函数中,我调用了显示对话框的方法。

但我收到此异常“值不在预期范围内。” (System.ArgumentException) 之后应用程序没有加载。

这是来 self 的 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 只能通过单击按钮触发吗? enter image description here enter image description here

最佳答案

首先,您只想在用户访问该页面时显示弹出窗口,因此将代码从构造函数移至 OnNavigatedTo 方法。当 UI 未就绪时确实会抛出错误,所以一个简单的 hack 是 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对于 MVVM 和 ViewModel,它是您需要实现的 OnNavigatedTo 方法。

private async void MainPage_OnLoaded(object sender, RoutedEventArgs e)
{
var result = await ShowPopup();
}

额外注意:你应该NOT use async void对于您的 ShowPopup 方法,因为这应该只用于事件处理程序。我真的鼓励你去阅读 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();
}

关于c# - Win 10 通用窗口应用程序上的 ContentDialog.showAsync,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33229967/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com