不要跟裝飾者 - 我所做的是有兩個獨立的容器控件(通常是網格)佔據屏幕的相同區域。一個是我的「進度」控制,另一個是我的「內容」控制。默認情況下,我將進度控件的可見性設置爲「已摺疊」,並將內容控件的可見性設置爲「可見」。
如果按照這種方式設置,當您開始對web服務的異步調用時,可以使進度控件可見並且內容控件摺疊。當webservice完成後,讓它使用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;
}
哇!很好的答案!但是,在您的解決方案中,如何將ProgressBar控件置於ListBox的中心?帆布? – Martin 2008-12-01 01:06:43