天天看点

WPF自定义控件与样式(13)-自定义窗体Window & 自适应内容大小消息框MessageBox

一.前言

  申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接。

  本文主要内容:

自定义Window窗体样式;

基于自定义窗体实现自定义MessageBox消息提示框;

二.自定义Window窗体样式

  自定义的Window窗体效果:

WPF自定义控件与样式(13)-自定义窗体Window & 自适应内容大小消息框MessageBox
WPF自定义控件与样式(13)-自定义窗体Window & 自适应内容大小消息框MessageBox

  因为WPF默认的窗体比较简陋,大都需要自己实现Window窗体样式效果,基本思路很简单:

第一步:干掉默认样式:WindowStyle = WindowStyle.None;

第二步:设置窗体透明:AllowsTransparency = true;

第三步:设置自己的窗体样式;

  这样从外观样式上可以满足,但做为窗体该具备的基本功能还没有,需要另外来实现了:

窗体Icon、标题栏(可以通过样式实现); 窗体的基本按钮:最小化、最大化、关闭按钮; 窗体的鼠标拖动; 好像Win8、Win10的功能吧,窗体拖动到桌面边缘自动最大化、还原; 鼠标调整窗口大小; 双击标题栏最大化、还原;

  进入正题,自定义窗体WindowBase的后台C#代码:  

WPF自定义控件与样式(13)-自定义窗体Window & 自适应内容大小消息框MessageBox
WPF自定义控件与样式(13)-自定义窗体Window & 自适应内容大小消息框MessageBox

View Code

  绑定命令的扩展方法:

  WindowBase的样式有两个,一个是基础样式BaseWindowStyle,可以自定义头部标题栏,提供更多定制需求。另一个样式DefaultWindowStyle为默认窗体样式,用于大多数不要特别定制的窗体需求。BaseWindowStyle样式代码:  

  DefaultWindowStyle样式代码:  

WPF自定义控件与样式(13)-自定义窗体Window & 自适应内容大小消息框MessageBox
WPF自定义控件与样式(13)-自定义窗体Window & 自适应内容大小消息框MessageBox

  上面效果的背景色彩、边框的资源:  

三.实现自定义MessageBox消息提示框

  基于第二节自定义的窗体WindowBase,实现自定义的MessageBox就简单了,效果图:

WPF自定义控件与样式(13)-自定义窗体Window & 自适应内容大小消息框MessageBox
WPF自定义控件与样式(13)-自定义窗体Window & 自适应内容大小消息框MessageBox
WPF自定义控件与样式(13)-自定义窗体Window & 自适应内容大小消息框MessageBox
WPF自定义控件与样式(13)-自定义窗体Window & 自适应内容大小消息框MessageBox

  仔细观察,不难发现上面的窗体大小是根据内容的多少自适应的。窗体自适应内容的的关键设置就是SizeToContent="WidthAndHeight",但为了达到更好的效果控制,还需要控制内容的大小范围,范围可以自己调整,看了样式代码你就了解了:  

  上面不同消息类型的颜色资源:  

  后台C#代码  

WPF自定义控件与样式(13)-自定义窗体Window & 自适应内容大小消息框MessageBox
WPF自定义控件与样式(13)-自定义窗体Window & 自适应内容大小消息框MessageBox

附录:参考引用

<a href="http://www.cnblogs.com/anding/p/4961215.html" target="_blank">WPF自定义控件与样式(1)-矢量字体图标(iconfont)</a>

<a href="http://www.cnblogs.com/anding/p/4968050.html" target="_blank">WPF自定义控件与样式(2)-自定义按钮FButton</a>

<a href="http://www.cnblogs.com/anding/p/4970845.html" target="_blank">WPF自定义控件与样式(3)-TextBox &amp; RichTextBox &amp; PasswordBox样式、水印、Label标签、功能扩展</a>

<a href="http://www.cnblogs.com/anding/p/4976559.html" target="_blank">WPF自定义控件与样式(4)-CheckBox/RadioButton自定义样式</a>

<a href="http://www.cnblogs.com/anding/p/4979764.html">WPF自定义控件与样式(5)-Calendar/DatePicker日期控件自定义样式及扩展</a>

<a href="http://www.cnblogs.com/anding/p/4987426.html">WPF自定义控件与样式(6)-ScrollViewer与ListBox自定义样式</a>

<a href="http://www.cnblogs.com/anding/p/4990492.html">WPF自定义控件与样式(7)-列表控件DataGrid与ListView自定义样式</a>

<a href="http://www.cnblogs.com/anding/p/4993655.html" target="_blank">WPF自定义控件与样式(8)-ComboBox与自定义多选控件MultComboBox</a>

<a href="http://www.cnblogs.com/anding/p/4996614.html" target="_blank">WPF自定义控件与样式(9)-树控件TreeView与菜单Menu-ContextMenu</a>

<a href="http://www.cnblogs.com/anding/p/5006279.html">WPF自定义控件与样式(11)-等待/忙/正在加载状态-控件实现</a>

<a href="http://www.cnblogs.com/anding/p/5009120.html">WPF自定义控件与样式(12)-缩略图ThumbnailImage /gif动画图/图片列表</a>

个人能力有限,本文内容仅供学习、探讨,欢迎指正、交流。