WPF:完美自定義MeaagseBox 動畫 反彈 背景模糊 扁平化


不知道為什么,WPF的MeaageBox的風格還停留在Win 2000的風格。。。

 

很久前就想自己封裝一個MessageBox出來,但是都只是簡單的封裝,不怎么具有通用性。這次終於搞完了。

使用方法和系統的MessageBox的使用方法相似度90%以上。另外10%主要是自己加進去了一些更實用的東西進去。

好,廢話不多說。

MessageBox經常使用的元素有這些:

1.MessageButton:由於方便以后擴展,這里不使用原生的MessageButton枚舉,而是自定義一個枚舉:

/// <summary>
    /// CMessageBox顯示的按鈕類型
    /// </summary>
    public enum CMessageBoxButton
    {
        OK = 0,
        OKCancel = 1,
        YesNO = 2,
        YesNoCancel = 3
    }

2.MessageBoxImage,由於方便以后擴展,這里不使用原生的MessageBoxImage枚舉,而是自定義一個枚舉:

    /// <summary>
    /// CMessageBox顯示的圖標類型
    /// </summary>
    public enum CMessageBoxImage
    {
        None = 0,
        Error = 1,
        Question = 2,
        Warning = 3
    }
CMessageBoxImage

3.MessageBoxResult,由於方便以后擴展,這里不使用原生的MessageBoxResult枚舉,而是自定義一個枚舉:

    /// <summary>
    /// 消息框的返回值
    /// </summary>
    public enum CMessageBoxResult
    {
        //用戶直接關閉了消息窗口
        None = 0,
        //用戶點擊確定按鈕
        OK = 1,
        //用戶點擊取消按鈕
        Cancel = 2,
        //用戶點擊是按鈕
        Yes = 3,
        //用戶點擊否按鈕
        No = 4
    }
CMessageBoxResult

4.CMessageBoxDefaultButton,Windows的MessageBox並沒有這個枚舉。通過這個枚舉可以將MessageBox上面的按鈕突出顯示(比如YesNo的MessageBox可以突出顯示Yes),這樣的應用場景很多。

    /// <summary>
    /// 消息的重點顯示按鈕
    /// </summary>
    public enum CMessageBoxDefaultButton
    {
        None = 0,
        OK = 1,
        Cancel = 2,
        Yes = 3,
        No = 4
    }
CMessageBoxDefaultButton

MessageBox常用的枚舉就是1、2、3.定義完成枚舉之后就可以仿造Windows的MessageBox重載Show方法了:

        /// <summary>
        /// 顯示消息框
        /// </summary>
        /// <param name="cmessageBoxText">消息內容</param>
        public static CMessageBoxResult Show(string cmessageBoxText)

        /// <summary>
        /// 顯示消息框
        /// </summary>
        /// <param name="cmessageBoxText">消息內容</param>
        /// <param name="caption">消息標題</param>
        public static CMessageBoxResult Show(string cmessageBoxText, string caption)


        /// <summary>
        /// 顯示消息框
        /// </summary>
        /// <param name="cmessageBoxText">消息內容</param>
        /// <param name="CMessageBoxButton">消息框按鈕</param>
        public static CMessageBoxResult Show(string cmessageBoxText, CMessageBoxButton CMessageBoxButton)


        /// <summary>
        /// 顯示消息框
        /// </summary>
        /// <param name="cmessageBoxText">消息內容</param>
        /// <param name="caption">消息標題</param>
        /// <param name="CMessageBoxButton">消息框按鈕</param>
        public static CMessageBoxResult Show(string cmessageBoxText, string caption, CMessageBoxButton CMessageBoxButton)



        /// <summary>
        /// 顯示消息框
        /// </summary>
        /// <param name="cmessageBoxText">消息內容</param>
        /// <param name="caption">消息標題</param>
        /// <param name="CMessageBoxButton">消息框按鈕</param>
        /// <param name="CMessageBoxImage">消息框圖標</param>
        /// <returns></returns>
        public static CMessageBoxResult Show(string cmessageBoxText, string caption, CMessageBoxButton CMessageBoxButton, CMessageBoxImage CMessageBoxImage)



        /// <summary>
        /// 顯示消息框
        /// </summary>
        /// <param name="cmessageBoxText">消息內容</param>
        /// <param name="caption">消息標題</param>
        /// <param name="CMessageBoxButton">消息框按鈕</param>
        /// <param name="CMessageBoxImage">消息框圖標</param>
        /// <param name="CMessageBoxDefaultButton">消息框默認按鈕</param>
        /// <returns></returns>
        public static CMessageBoxResult Show(string cmessageBoxText, string caption, CMessageBoxButton CMessageBoxButton, CMessageBoxImage CMessageBoxImage, CMessageBoxDefaultButton CMessageBoxDefaultButton)

然后需要添加一個Window,這個Window就是自定義的MessageBox的主界面。這個界面沒什么好說的,需要代碼的可以在最后的代碼下載鏈接進行下載。

值得一提的是,在Loaded的Trriger里面為MessageBox添加了一個啟動動畫,這個動畫是個縮放動畫,並帶有反彈效果。

 

然后需要未MessageBox實現模糊效果。當然模糊效果並不是說讓MessageBox變得模糊,而是MessageBox彈出時其父窗體變得模糊。

模糊效果很好實現:

            BlurEffect effect = new BlurEffect();
            effect.Radius = 6;
            effect.KernelType = KernelType.Gaussian;
            Application.Current.Windows[0].Effect = effect;

最后附上一個有點卡的GIF模擬圖:

 真實效果比它好太多。。。

 

 

 

源代碼下載:http://download.csdn.net/detail/lyclovezmy/7635001

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM