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;
}

此代码适用于手机和平板电脑。

4

1 回答 1

26

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

你在 XAML 中添加它

<ProgressRing IsActive="True"/>

您可以在单击按钮时在后面的代码中显式显示它,或者在视图模型中使用 bool 属性(如果您使用 MVVM)和ValueConverter来显示或隐藏它,只需将一个属性从 true 更改为 false,反之亦然。

我还建议阅读有关进度控制的官方文档,我将用 ProgressRing 文档中的提示来结束这个答案,可以在此处找到

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

提示 当 ProgressRing 处于活动状态时,即使它在屏幕上不可见,进度动画也会继续,例如当它的 Visibility 为 Collapsed 时。这会保持 UI 线程处于唤醒状态、使用资源并损害应用程序性能。当 ProgressRing 不可见时,您应该通过将 IsActive 设置为 false 来禁用动画。

于 2014-05-25T16:03:04.283 回答