我正在使用 UWP 框架为 Windows 10 Mobile Enterprise 制作应用程序。我有许多文件要循环保存到磁盘,我想显示一个弹出窗口
ProgressBar
在保存文件时阻止用户。我想在每次循环迭代时更新ProgressBar
,并在最后删除它。
我想我可以制作一个包含
ContentDialog
的自定义ProgressBar
,并在开始时显示ContentDialog
。我很困惑如何做到这一点,因为 ContentDialog
的 ShowAsync()
方法在对话框打开时阻塞。
我的猜测是我必须在新的线程/任务/任何东西中执行
ShowAsync()
或文件循环。是否有最佳实践方法?
注意-进度条不能,按要求进入当前页面即可。它必须是某种阻止用户直到被代码关闭的弹出窗口。
ContentDialog
其实不太适合这种场景。问题是 ContentDialog
代表模态对话框,这意味着应用程序窗口被阻止,直到用户关闭对话框。 Task ShowAsync()
方法的构建方式使您可以等待用户执行内容对话框操作,并且您无法在 UI 以外的任何其他线程上打开对话框。
你有三种可能的解决方案:
Popup
(可以通过单击其他地方将其关闭,但用户可以从“状态栏”再次显示)Dispatcher
)回复晚了,但如果将来有人遇到这个问题,另一种可能的解决方案是用进度条阻止页面的其余部分。如果您的视图内容包含在单个网格中,您可以将进度条作为网格中的最后一个元素放置,从而使其显示在所有其他 UI 元素之上。您可能必须用它自己的 Grid 包裹 ProgressBar,以便您可以将 ProgressBar 放在页面的中心,但在 ProgressBar 运行时使用网格覆盖并有效地禁用页面的其余部分。
我在我的应用程序中对加载环做了类似的事情:
<Grid
Grid.ColumnSpan="3"
Background="Black"
Visibility="{x:Bind ViewModel.IsLoading, Converter={StaticResource VisibleWhenTrueConverter}}"
Opacity="0.6">
<ProgressRing
Width="100"
Height="100"
IsActive="{x:Bind ViewModel.IsLoading}" />
</Grid>