可高度自定義的MessageBox

MessageBoxTouch

WTFPL

由於系統MessageBox按鈕和字體過小, 因此本身寫了個方便更改外觀的MessageBox. 有什麼好玩的功能也能夠擴展上去. 下有演示圖.

GitHub項目地址git

特性

  • 單例模式運行, 運行時沒法操做父窗口.
  • 由於能夠改變字體且支持觸摸操做, 因此適合在平板上使用.
  • 消息框最初有必定高度, 但若是Message文本內容過多, 超出了高度限制, MessageBox顯示不下時, 窗口高度會對應增長, 使消息能被完整顯示出來.
  • 若是消息框窗口高度達到窗口工做區高度, 但仍是容不下消息字符串顯示時, 消息框高度再也不增加, 可是能夠經過滾動消息區域查看剩餘消息.
  • 能夠自由改變外觀.
  • 可在按鈕區域插入自定義控件 (如輸入框, 另外一個按鈕, 進度條, 等等). 調用後可獲取用戶對插入的自定控件的操做結果.
  • 能夠在運行時改變消息框內容與樣式.

用法

  • 生成項目MessageBoxTouch, 獲得對應動態連接庫, 引用到本身的項目中, 並調用. 本工程自帶有示例.
  • 工具的MessageBox的Show函數參數與System.Windows.MessageBox的參數兼容, 簡單而言只要引入一下dll, 不用作過多改動便可使用工具提供的MessageBox.
  • 工具的MessageBox.Show函數還有與系統函數不一樣的重載, 能夠實現更多功能. 例如自定義消息框按鈕.
  • 能夠經過設置屬性改變MessageBox的外觀, 例如窗口各部分的字體, 透明度, 背景, 邊框, 窗口大小, 限制高度增加, 設置窗口寬度等等.

圖片示例

示例

代碼示例

兼容寫法

返回值爲MessageBoxResult型.github

MessageBox.Show("message");
MessageBox.Show("message", "title", MessageBoxButton.OKCancel, MessageBoxImage.Question);

自定義寫法

返回值爲int型, 值爲參數按鈕列表中的索引.app

MessageBox.Show(new List<object> { "btn1" }, "msg");
MessageBox.Show(new List<object> { new ButtonSpacer(250), "btn1", "btn2", "btn3", "btn4", "btn5", new ButtonSpacer(30) }, "msg", "title", MessageBoxImage.Asterisk);

修改式樣屬性

單獨修改

添加在Show函數以前函數

MessageBox.ButtonPanelColor = new MessageBoxColor("red");
MessageBox.WindowMinHeight = 300;
MessageBox.MessageFontSize = 22;
MessageBox.Show(new List<object> { "btn1" }, "msg");
批量修改
  • 推薦 在Show函數參數中設置
PropertiesSetter propertiesSetter = new PropertiesSetter();
propertiesSetter.ButtonBorderThickness = new Thickness(10);
propertiesSetter.MessagePanelColor = new MessageBoxColor(Colors.black);
MessageBox.Show(propertiesSetter, "message", "title", MessageBoxButton.OKCancel, MessageBoxImage.Question);
MessageBox.Show(propertiesSetter, new List<object> { "btn1" }, "msg");
  • 在Show函數以前設置
PropertiesSetter propertiesSetter = new PropertiesSetter();
propertiesSetter.ButtonBorderThickness = new Thickness(10, 0, 0, 0);
propertiesSetter.MessagePanelColor = new MessageBoxColor("#222DDD");
MessageBox.PropertiesSetter = propertiesSetter;
MessageBox.Show(new List<object> { new TextBox(), "btn1" }, "msg");

修改按鈕區域

插入空白

在傳入的List<object>中對應位置插入一個ButtonSpacer實例. 構造函數參數可爲空或指定寬度值. 工具

插入自定義控件

在傳入的List<object>中對應位置插入插入一個FrameworkElement派生類的實例, 便可在對應位置顯示相應控件.
列寬由插入的控件的寬度決定. 字體

  • Show函數調用結束返回後可調用MessageBox.GetBtnList()獲取該控件, 獲得用戶輸入 / 操做結果.
int result = MessageBox.Show(new List<object> { new TextBox(), "btn1", "btn2" }, "msg");
TextBox tb = (TextBox)MessageBox.GetBtnList()[0];
MessageBox.Show(tb.Text == string.Empty ? "用戶未輸入" : tb.Text, (string)MessageBox.GetBtnList()[result]);

可操做的屬性

屬性 狀態
窗口標題 / 消息 / 按鈕 已實裝
窗口鎖高 已實裝
窗口初始高度與寬度 已實裝
消息區域換行風格 已實裝
各區域文本字體 已實裝
各區域文本大小 已實裝
各區域文本顏色 已實裝
各區域透明度 已實裝
各區域背景色 已實裝
各區域邊框顏色 已實裝
各區域邊框寬度 已實裝
窗口漸顯時間 已實裝
自定窗口打開與關閉動畫 已實裝
自定義圖標 已實裝
是否應用窗口關閉按鈕 已實裝
按鈕動做樣式 已實裝
窗口計時 / 當即關閉 已實裝

成員函數與屬性

MessageBox屬性 類型 含義 靜態 狀態
TitleText string 設置 / 取得標題文字 已實裝
MessageText string 設置 / 取得消息文字 已實裝
LockHeight bool 是否鎖住窗口高度不容許自動增加 已實裝
TextWrappingMode TextWrapping 消息段落換行風格 已實裝
WindowWidth double 窗口寬度 已實裝
WindowMinHeight double 窗口最小 (初始) 高度 已實裝
TitleFontFamily FontFamily 標題文本字體 已實裝
MessageFontFamily FontFamily 消息文本字體 已實裝
ButtonFontFamily FontFamily 按鈕文本字體 已實裝
TitleFontSize int 標題文本大小 已實裝
MessageFontSize int 消息文本大小 已實裝
ButtonFontSize int 按鈕文本大小 已實裝
TitleFontColor MessageBoxColor 標題文本顏色 已實裝
MessageFontColor MessageBoxColor 消息文本顏色 已實裝
ButtonFontColor MessageBoxColor 按鈕文本顏色 已實裝
WindowOpacity double 窗口總體透明度 已實裝
TitleBarOpacity double 標題區域透明度 已實裝
MessageBarOpacity double 消息區域透明度 已實裝
ButtonBarOpacity double 按鈕區域透明度 已實裝
TitlePanelColor MessageBoxColor 標題區域背景色 已實裝
MessagePanelColor MessageBoxColor 消息區域背景色 已實裝
ButtonPanelColor MessageBoxColor 按鈕區域背景色 已實裝
WndBorderColor MessageBoxColor 窗口邊框顏色 已實裝
TitlePanelBorderColor MessageBoxColor 標題區域邊框顏色 已實裝
MessagePanelBorderColor MessageBoxColor 消息區域邊框顏色 已實裝
ButtonPanelBorderColor MessageBoxColor 按鈕區域邊框顏色 已實裝
ButtonBorderColor MessageBoxColor 按鈕邊框顏色 已實裝
WndBorderThickness MessageBoxColor 窗口邊框寬度 已實裝
TitlePanelBorderThickness Thickness 標題區域邊框寬度 已實裝
MessagePanelBorderThickness Thickness 消息區域邊框寬度 已實裝
ButtonPanelBorderThickness Thickness 按鈕區域邊框寬度 已實裝
ButtonBorderThickness Thickness 按鈕邊框寬度 已實裝
WindowShowDuration Duration 窗口漸顯時間 已實裝
WindowShowAnimations List<KeyValuePair<DependencyProperty, AnimationTimeline>> 窗口顯示動畫 已實裝
WindowCloseAnimations List<KeyValuePair<DependencyProperty, AnimationTimeline>> 窗口關閉動畫 已實裝
CloseIcon BitmapImage 自定義關閉圖標 已實裝
WarningIcon BitmapImage 自定義警告圖標 已實裝
ErrorIcon BitmapImage 自定義錯誤圖標 已實裝
InfoIcon BitmapImage 自定義信息圖標 已實裝
QuestionIcon BitmapImage 自定義問題圖標 已實裝
EnableCloseButton bool 應用窗口關閉按鈕 已實裝
ButtonStyleList List<Style> 按鈕動做樣式 已實裝
CloseTimer MessageBoxCloseTimer 窗口計時 / 當即關閉 已實裝
MessageBox函數 含義 參數 返回值 靜態
Show(string, string, MessageBoxButton, MessageBoxImage) 兼容形式調出消息窗口 消息, 標題 (選), 按鈕類型 (選), 圖標類型 (選) MessageBoxResult
Show(List<object>, string, string, MessageBoxImage) 自定義形式調出消息窗口 按鈕列表, 消息, 標題 (選), 圖標類型 (選) int
Show(PropertiesSetter, string, string, MessageBoxButton, MessageBoxImage) 兼容形式調出消息窗口, 並使用既有樣式 樣式, 消息, 標題 (選), 按鈕類型 (選), 圖標類型 (選) MessageBoxResult
Show(PropertiesSetter, List<object>, string, string, MessageBoxImage) 自定義形式調出消息窗口, 並使用既有樣式 樣式, 按鈕列表, 消息, 標題 (選), 圖標類型 (選) int
GetBtnList() 獲取按鈕列表 List<object>
SetButtonStyle() 設定當前顯示的圖標類型 void
MessageBoxColor屬性 含義 類型
color 顏色值 object
colorType 顏色類型 ColorType
MessageBoxColor函數 含義 參數 返回值 靜態
MessageBoxColor(object) 構造函數 十六進制顏色碼字符串或者Color類的實例或顏色名字符串
MessageBoxColor(object, ColorType) 構造函數 十六進制顏色碼字符串或者Color類的實例或顏色名字符串, ColorType枚舉值
GetSolidColorBrush() 輸出這個實例顏色實例對應的SolidColorBrush SolidColorBrush
MessageBoxCloseTimer屬性 含義 類型
timeSpan 距窗口關閉的時間 TimeSpan
result int 窗口關閉後返回的返回值
MessageBoxCloseTimer函數 含義 參數 返回值 靜態
MessageBoxCloseTimer(TimeSpan, int) 構造函數 TimeSpan實例 (距關閉的時間), 窗口關閉後返回的返回值
MessageBoxCloseTimer(int, int) 構造函數 距關閉的秒數, 窗口關閉後返回的返回值
CloseNow() 當即關閉窗口
PropertiesSetter屬性 含義
略 (參考MessageBox屬性)
PropertiesSetter函數 含義 參數 返回值 靜態
PropertiesSetter() 構造函數
PropertiesSetter(PropertiesSetter) 構造函數 一個既有的PropertiesSetter實例
ButtonSpacer屬性 含義 類型
length 留白長度 double
ButtonSpacer函數 含義 參數 返回值 靜態
ButtonSpacer() 構造函數
ButtonSpacer(double) 構造函數 留白長度
GetLength() 獲取留白長度 double
相關文章
相關標籤/搜索