Dot-Net

如何在 WPF 中的控制項頂部顯示進度條

  • December 1, 2008

在 WPF UserControl 中,我必須呼叫 WebService。我在一個單獨的執行緒上進行此呼叫,但我想通知使用者該呼叫可能需要一些時間。

WebMethod 向我返回一個對象集合,我將它綁定到我的 UC 中的 ListBox。到目前為止,一切都很好……這部分工作得很好。但是,我想在通話期間顯示進度條(或任何類型的動畫……)。此動畫將位於 ListBox 控制項的頂部並居中。

我嘗試了 Adorner,它部分有效。但是,我必須在受保護的覆蓋 void OnRender(DrawingContext drawingContext) 中繪製所有控制項…我只想添加一個控制項幾秒鐘…

有人知道我如何實現這一目標嗎?

謝謝!

不要使用裝飾器——我所做的是有兩個獨立的容器控制項(通常是網格),它們佔據螢幕的同一區域。一個是我的“進度”控制項,另一個是我的“內容”控制項。我將進度控制項的可見性設置為 Collapsed,並將內容控制項的可見性預設設置為 Visible。

如果您以這種方式進行設置,當您啟動對 web 服務的非同步呼叫時,您可以使進度控制項可見並且內容控制項折疊。當 web 服務完成時,讓它使用 Dispatcher.BeginInvoke 更新 UI,然後將進度控制項切換回折疊狀態,並將內容控制項切換回可見狀態。

我通常使進度控制不確定。這是一個例子;在此,我有一個名為 ProgressGrid 的單獨的使用者控制項,它有我的進度條。

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

引用自:https://stackoverflow.com/questions/329676