不知道為什么,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 }
3.MessageBoxResult,由於方便以后擴展,這里不使用原生的MessageBoxResult枚舉,而是自定義一個枚舉:

/// <summary> /// 消息框的返回值 /// </summary> public enum CMessageBoxResult { //用戶直接關閉了消息窗口 None = 0, //用戶點擊確定按鈕 OK = 1, //用戶點擊取消按鈕 Cancel = 2, //用戶點擊是按鈕 Yes = 3, //用戶點擊否按鈕 No = 4 }
4.CMessageBoxDefaultButton,Windows的MessageBox並沒有這個枚舉。通過這個枚舉可以將MessageBox上面的按鈕突出顯示(比如YesNo的MessageBox可以突出顯示Yes),這樣的應用場景很多。

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