アドナーと一緒に行かないでください。私がしているのは、画面の同じ領域を占める 2 つの別個のコンテナー コントロール (通常はグリッド) です。1 つは「進行状況」コントロールで、もう 1 つは「コンテンツ」コントロールです。デフォルトで、プログレス コントロールの可視性を Collapsed に設定し、コンテンツ コントロールの可視性を Visible に設定します。
そのように設定した場合、Web サービスへの非同期呼び出しを開始すると、進行状況コントロールが表示され、コンテンツ コントロールが折りたたまれます。Web サービスが終了したら、Dispatcher.BeginInvoke を使用して UI を更新し、その時点でプログレス コントロールを折りたたみ状態に戻し、コンテンツ コントロールを表示状態に戻します。
私は通常、進捗管理を不確定にします。以下に例を示します。これには、進行状況バーを持つ ProgressGrid という別の UserControl があります。
<Grid x:Name="layoutRoot">
<Grid x:Name="contentGrid" HorizontalAlignment="Center" VerticalAlignment="Center" Visibility="Visible">
<!-- snip -->
</Grid>
<controls:ProgressGrid x:Name="progressGrid" Text="Signing in, please wait..." Visibility="Collapsed"/>
</Grid>
そして、コードビハインドでは、次のような単純なものだけです:
private void SignInCommand_Executed(object sender, ExecutedRoutedEventArgs e)
{
contentGrid.Visibility = Visibility.Collapsed;
progressGrid.Visibility = Visibility.Visible;
}