[WPF] Wait for a moment.

1、控件介紹

    在 WPF 中使用的等待控件,控件包括三種,普通的等待信息提示(WaitTip),進度條提示(WaitProgress),以及主程序覆蓋的模擬時鐘等待窗口(WaitClock),具體效果看下面的圖示。html

  • 支持自定義等待信息
  • 支持在異步線程中設置進度或者關閉等待窗口
  • 支持覆蓋某個 UIElementCollection,或者覆蓋當前主程序或者某個 Window

2、圖示效果

WaitControlDemo

3、細節說明

  1. 覆蓋某個 UIElementCollection,是在 UIElementCollection 中添加等待控件以後,等待控件的背景面板覆蓋住 UIElementCollection,達到用戶沒法操做 UIElementCollection 的效果,同時又不影響 UIElementCollection 以外的其餘控件。
  2. 覆蓋主程序或者某個 Window,是將等待控件放置於一個子 Window 中,並設置該子 Window 的以下屬性:
    • WindowStyle = WindowStyle.None
    • Background = new SolidColorBrush(Colors.Transparent) (設置背景爲透明色,配合下一條使用)
    • AllowsTransparency = true (容許透明色)
    • Owner = parentWindow (設置依附的父窗口)
    • WindowStartupLocation = WindowStartupLocation.CenterOwner (位於父窗口中央)
    • SizeToContent = SizeToContent.WidthAndHeight (保證 Window 跟隨內部的內容大小)
    • ShowInTaskbar = false (不在任務欄顯示該窗口)
    • Content = this(等待控件)

      最後在異步線程啓動以後,調用該子 Window 的 ShowDialog 方法便可。異步

      須要注意的是,若是在異步線程啓動以前,調用了子 Window 的 ShowDialog 方法,則是沒法在異步線程中關閉等待控件,即子 Window。以下代碼所示:ui

private void btnWaitTipTest2_Click(object sender, RoutedEventArgs e)
{
    WaitTip waitTip = new WaitTip(this);
    Thread t = new Thread(new ThreadStart((Action)delegate
    {
        try
        {
            for (int i = 0; i <= 5; i++)
            {
                Thread.Sleep(1000);
            }
            waitTip.Close();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }));
    t.Start();
    waitTip.Show("WaitTip Control Test2");
}

      上面代碼最後兩行,若是互換位置,依舊能夠顯示等待控件,可是子線程就不會運行,也就不會關閉等待控件了,由於 Window 的 ShowDialog 方法會佔住主線程,除非關閉,不然後面的代碼沒法運行。this

  1. WaitProgress 支持設置 IsIndeterminate 屬性,便是顯示實際值,仍是顯示通常的連續進度反饋。以及進度到達 100%後是否自動關閉進度條。
  2. WaitClock 主要是經過 Path 繪製時針、分針和秒針,而後在 DispatcherTimer 的 Tick 事件中不斷更新三針的角度便可,固然要設置好三針的旋轉中心,詳細內容可參考代碼。
  3. 最後,在異步線程中操做 UI 元素,採用了下面簡單的處理:
UI.Dispatcher.BeginInvoke((Action)delegate (){
    // 操做 UI 代碼
});

4、資源下載

dll+源工程以及Demo工程下載:http://files.cnblogs.com/files/memento/WaitControl.7zspa

相關文章
相關標籤/搜索