Dot-Net
如何在 WPF 中的控制項頂部顯示進度條
在 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; }