web-dev-qa-db-ja.com

Windows Phone 8.1ユニバーサルストアアプリの読み込みアニメーションをどのように表示しますか?

ローカルデータを取得する、ファイルにアクセスする、または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;
}

このコードは、電話とタブレットの両方で機能します。

25
RichC

Windows Phoneでこれを行うにはかなり標準化された方法があります。ユニバーサルアプリであるため、おそらく進行状況を示すリングを表示することをお勧めします。

XAMLで追加します

<ProgressRing IsActive="True"/>

ボタンがクリックされたときにコードビハインドで明示的に表示するか、またはビューモデル(MVVMを使用する場合)でboolプロパティを使用し、 ValueConverter を使用して、1つのプロパティを変更するだけで表示または非表示にできます。真から偽、またはその逆。

また、公式ドキュメントを読むことをお勧めします プログレスコントロールについて このプログレッシブドキュメントからのヒントでこの回答を終了します ここで見つけることができます

IsActiveプロパティを設定して、ProgressRingをオンまたはオフにします。 IsActiveがfalseの場合、ProgressRingは表示されませんが、UIレイアウトでそのためにスペースが予約されます。 ProgressRingのスペースを予約しないようにするには、VisibilityプロパティをCollapsedに設定します。

ヒントProgressRingがアクティブな場合、VisibilityがCollapsedの場合など、画面に表示されていなくても進行状況アニメーションは継続します。これにより、UIスレッドを起動したままにし、リソースを使用し、アプリのパフォーマンスを低下させる可能性があります。 ProgressRingが表示されていない場合は、IsActiveをfalseに設定してアニメーションを無効にする必要があります。

26
Igor Ralic