你如何在Windows Phone 8.1通用商店应用中显示加载动画?

25

在执行异步函数以获取本地数据、访问文件或调用API时,如何在这个可能很长的过程中触发加载动画?

以下是一个示例:

<Button onClick="Button_Click" />

public async void Button_Click(object sender, RoutedEventArgs e)
{
    var myData = await MyDataManager.GetMyData();
    await new MessageDiaglog("Data Loaded!").ShowAsync();
}

由于这是一个通用商店应用程序,我认为它在Windows 8.1和Windows Phone 8.1上应该有相同的作用。

解决方案的更新

根据igrali的答案,我更新了我的代码以供参考:

<ProgressBar x:Name="LoadingBar" Visibility="Collapsed" IsEnabled="False" IsIndeterminate="true" Height="4" HorizontalAlignment="Stretch"/>
<Button onClick="Button_Click" />

public async void Button_Click(object sender, RoutedEventArgs e)
{
    LoadingBar.IsEnabled = true;
    LoadingBar.Visibility = Visibility.Visible;
    var myData = await MyDataManager.GetMyData();
    await new MessageDiaglog("Data Loaded!").ShowAsync();
    LoadingBar.IsEnabled = false;
    LoadingBar.Visibility = Visibility.Collapsed;
}

此代码可在手机和平板电脑上运行。

1个回答

26

在Windows Phone上,有一种非常标准的方法来实现这个功能。由于它是一个通用应用程序,最好的选择可能是显示进度环。

您可以在XAML中添加它。

<ProgressRing IsActive="True"/>
你可以在代码后台当按钮被点击时明确地显示它,或者在视图模型中使用一个布尔属性(如果你使用MVVM),并使用ValueConverter通过简单地改变一个属性的值从true到false和反之来显示或隐藏它。
我还建议阅读关于进度控件的官方文档,并以ProgressRing文档中的提示结尾,该提示可在此处找到

将IsActive属性设置为打开或关闭ProgressRing。如果 IsActive为False,则不显示ProgressRing,但在UI布局中为其保留空间。要不保留ProgressRing的空间,请将其Visibility属性设置为Collapsed。

提示:当ProgressRing处于活动状态时,即使其在屏幕上不可见,例如当其Visibility为Collapsed时,进度动画仍然会继续播放。这可能会让UI线程保持清醒,使用资源,并影响应用程序性能。当ProgressRing不可见时,应通过将IsActive设置为False来禁用动画。


好的,所以只是为了明确,我在等待调用之前激活/显示它,然后在等待调用之后停用/隐藏它? - RichC
1
@EdenMachine 没错。 - Igor Ralic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接