本文主要是介绍可高度自定义的MessageBox,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
MessageBoxTouch
因为系统MessageBox按钮和字体太小, 所以自己写了个方便更改外观的MessageBox. 有什么好玩的功能也可以扩展上去. 下有演示图.
GitHub项目地址
特性
- 单例模式运行, 运行时无法操作父窗口.
- 因为可以改变字体且支持触摸操作, 所以适合在平板上使用.
- 消息框最初有一定高度, 但如果Message文本内容过多, 超出了高度限制, MessageBox显示不下时, 窗口高度会对应增加, 使消息能被完整显示出来.
- 如果消息框窗口高度达到窗口工作区高度, 但还是容不下消息字符串显示时, 消息框高度不再增长, 但是可以通过滚动消息区域查看剩余消息.
- 可以自由改变外观.
- 可在按钮区域插入自定义控件 (如输入框, 另一个按钮, 进度条, 等等). 调用后可获取用户对插入的自定控件的操作结果.
- 可以在运行时改变消息框内容与样式.
用法
- 生成项目MessageBoxTouch, 得到对应动态链接库, 引用到自己的项目中, 并调用. 本工程自带有示例.
- 工具的MessageBox的Show函数参数与System.Windows.MessageBox的参数兼容, 简单而言只要引入一下dll, 不用做过多改动即可使用工具提供的MessageBox.
- 工具的MessageBox.Show函数还有与系统函数不同的重载, 可以实现更多功能. 例如自定义消息框按钮.
- 可以通过设置属性改变MessageBox的外观, 例如窗口各部分的字体, 透明度, 背景, 边框, 窗口大小, 限制高度增长, 设置窗口宽度等等.
图片示例
代码示例
兼容写法
返回值为MessageBoxResult型.
MessageBox.Show("message");
MessageBox.Show("message", "title", MessageBoxButton.OKCancel, MessageBoxImage.Question);
自定义写法
返回值为int型, 值为参数按钮列表中的索引.
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");
批量修改
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");
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 |
否 |
这篇关于可高度自定义的MessageBox的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!