相信很多人用过MessageBox.show(),是不是觉得这个消息框有点丑呢,反正我是觉得有点丑的,所以我自己重写了一个。先不说,上两幅图对比先:

  

当然,也不是很好看,不过比原有的好多了。

不多说了,先上xmal代码:

 1 <Window x:Class="MESBox.MEGBox"
2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4 Title="MEGBox" MinWidth="200" WindowStyle="None"
5 AllowsTransparency="True" Background="#AA000000"
6 WindowStartupLocation="CenterScreen" Window.SizeToContent="WidthAndHeight"
7 MouseLeftButtonDown="DragWindow" ShowInTaskbar="False">
8 <Window.Resources>
9 <Style x:Key="ButtonStyle" TargetType="{x:Type Button}">
10 <Setter Property="Foreground" Value="White"/>
11 <Setter Property="Template">
12 <Setter.Value>
13 <!--设置样式 -->
14 <ControlTemplate TargetType="{x:Type Button}">
15 <Grid>
16 <Rectangle x:Name="Rectangle" Stroke="#FFFFFFFF" StrokeMiterLimit="1.000000" StrokeThickness="0.500000" RadiusX="12.5" RadiusY="12.5" Fill="#FF777777">
17 </Rectangle>
18 <ContentPresenter x:Name="ContentPresenter" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
19 VerticalAlignment="{TemplateBinding VerticalContentAlignment}" RecognizesAccessKey="True"/>
20 </Grid>
21 <!-- 设置鼠标移到关闭按钮上的效果 -->
22 <ControlTemplate.Triggers>
23 <Trigger Property="IsMouseOver" Value="true">
24 <Setter Property="Fill" TargetName="Rectangle">
25 <Setter.Value>
26 <SolidColorBrush Color="White"></SolidColorBrush>
27 </Setter.Value>
28 </Setter>
29 <Setter Property="Foreground" Value="Black"></Setter>
30 </Trigger>
31 </ControlTemplate.Triggers>
32 </ControlTemplate>
33 </Setter.Value>
34 </Setter>
35 </Style>
36 </Window.Resources>
37
38 <Grid Height="Auto">
39 <Grid.RowDefinitions>
40 <RowDefinition Height="Auto"></RowDefinition>
41 <RowDefinition Height="Auto"></RowDefinition>
42 <RowDefinition Height="Auto" ></RowDefinition>
43 </Grid.RowDefinitions>
44 <DockPanel Grid.Row="0">
45 <Button DockPanel.Dock="Right" Style="{StaticResource ButtonStyle}"
46 Width="25" Height="25" Content="X"
47 HorizontalAlignment="Right" VerticalAlignment="Top"
48 Margin="3,3,3,3"
49 Click="CloseWindow" >
50 </Button>
51 </DockPanel>
52 <TextBlock Padding="10,15,10,15" Grid.Row="1" x:Name="content"
53 Foreground="White" FontSize="18"
54 MaxWidth="500" TextWrapping="Wrap"/>
55
56 <StackPanel Orientation="Horizontal" FlowDirection="RightToLeft" Grid.Row="2">
57 <Button Content="确定" Width="80" Click="CloseWindow" Height="30" Margin="10,0,0,0" ></Button>
58 </StackPanel>
59 </Grid>
60 </Window>

  

其中,window 的属性里WindowStyle="None",AllowsTransparency="True"是设置window无边框的关键,WindowStartupLocation="CenterScreen",使窗口初始化时在屏幕正中央出现,Background="#AA000000",#AA000000是具有半透明的颜色,另外,由于消息框的大小是随着内容的多少来变化的,所以并没有设置窗口的长和宽,因此设置Window.SizeToContent="WidthAndHeight",为的是使消息框能自适应内容。

  另外,还要注意的是,因为window失去了边框和它的头部,所以是不能够对它进行拖拽的,这就很别扭了,所以我给MouseLeftButtonDown设置了一个DragWindow处理方法。

具体的cs代码如下:

 1 using System;
2 using System.Collections.Generic;
3 using System.Linq;
4 using System.Text;
5 using System.Windows;
6 using System.Windows.Controls;
7 using System.Windows.Data;
8 using System.Windows.Documents;
9 using System.Windows.Input;
10 using System.Windows.Media;
11 using System.Windows.Media.Imaging;
12 using System.Windows.Shapes;
13
14 namespace MESBox
15 {
16 /// <summary>
17 /// MEGBox.xaml 的交互逻辑
18 /// </summary>
19 public partial class MEGBox : Window
20 {
21 private static MEGBox _Instance;
22 public static MEGBox Instance
23 {
24 get
25 {
26 if (_Instance == null)
27 {
28 _Instance = new MEGBox();
29 }
30 return _Instance;
31 }
32 }
33 public MEGBox()
34 {
35 InitializeComponent();
36 }
37 public void Show(string content)
38 {
39 this.content.Text = " " + content;
40 this.ShowDialog();
41 }
42 private void DragWindow(object sender, MouseButtonEventArgs e)
43 {
44 this.DragMove();
45 }
46 public void CloseWindow(object sender, RoutedEventArgs args)
47 {
48
49 this.Close();
50 _Instance = null;
51 }
52
53 }
54 }

代码简单易懂,也不详细说了。

WPF 自定义消息框(转)的更多相关文章

  1. wpf 自定义消息框

    相信很多人用过MessageBox.show(),是不是觉得这个消息框有点丑呢,反正我是觉得有点丑的,所以我自己重写了一个.先不说,上两幅图对比先: 当然,也不是很好看,不过比原有的好多了. 不多说了 ...

  2. WPF 文本框添加水印效果

    有的时候我们需要为我们的WPF文本框TextBox控件添加一个显示水印的效果来增强用户体验,比如登陆的时候提示输入用户名,输入密码等情形.如下图所示: 这个时候我们除了可以修改TextBox控件的控件 ...

  3. WPF文本框密码框添加水印效果

    WPF文本框密码框添加水印效果 来源: 阅读:559 时间:2014-12-31 分享: 0 按照惯例,先看下效果 文本框水印 文本框水印相对简单,不需要重写模板,仅仅需要一个VisualBrush ...

  4. WPF提示框效果

    WPF提示框效果 1,新建WPF应用程序 2,添加用户控件Message 3,在Message中编写如下代码 <Border x:Name="border" BorderTh ...

  5. WPF 提示框、确认框、确认输入框

    1.提示框 分为提示.异常.失败.成功几种类型 方法: /// <summary> /// 弹出提示 /// 标题:提示 /// </summary> /// <para ...

  6. 【Unity技巧】自定义消息框(弹出框)

    写在前面 这一篇我个人认为还是很常用的,一开始也是实习的时候学到的,所以我觉得实习真的是一个快速学习工程技巧的途径. 提醒:这篇教程比较复杂,如果你不熟悉NGUI.iTween.C#的回调函数机制,那 ...

  7. WPF 文本框设置了阴影效果后,因左右的transform变化引发的拉伸渲染问题

    背景 最近遇到一个动画执行时,文本位置变化的问题.如下图: 如果你仔细看的话,当星星变小时,文本往下降了几个像素. 貌似有点莫名其妙,因为控件之间并不在同一个Panel布局控件中,不存在高度限制变化引 ...

  8. WPF 矩形框8个控制点伸缩及拖拽

    最近在研发图片控件矩形框8个控制点进行控制边框的大小.位置等信息,之前查阅了相关的信息,比如别人整合的类:ControlResizer 这个类虽然是好,但是很大程度上是有限制,换句话说,它需要你二次更 ...

  9. WPF密码框中禁止复制、粘贴

    如题: " Margin="215,32,151,0" > <PasswordBox.CommandBindings> <CommandBindi ...

随机推荐

  1. Shell 命令挂后台执行

    使用nohup命令,结合& #!/bin/bash #挂后台执行文件 kimbo_test.sh nohup >& & 说明:0 是标准输入(STDIN),1 是标准输出 ...

  2. 浏览器DOM操作

    HTML Node 节点 常用API 高效遍历 DOM Repaint and reflow 插入大量内容避免重绘和回流 style 样式操作 DOM事件 HTML - innerHTML:内部HTM ...

  3. phalcon: 解决php7/phalcon3.2以上版本,不支持oracle数据库的方法

    解决php7/phalcon3.2以上版本,不支持oracle数据库的方法 phalcon3.2(3.0以上)版本不支持oracle的方法. https://github.com/phalcon/in ...

  4. 负载均衡,会话保持,session同步

    一,什么负载均衡 一个新网站是不要做负载均衡的,因为访问量不大,流量也不大,所以没有必要搞这些东西.但是随着网站访问量和流量的快速增长,单台服务器受自身硬件条件的限制,很难承受这么大的访问量.在这种情 ...

  5. Android Studio 3.0 及个版本下载和 gradle 各版本下载

    Android Studio 3.0 下载地址: 链接:http://pan.baidu.com/s/1jHVuOQi 密码:3pd0 Android Studio 3.0 包含了三大主要功能: 一套 ...

  6. Android------底部导航栏BottomNavigationBar

    Android 的底部导航栏 BottomNavigationBar 由Google官方Material design中增加的. Android底部导航栏的实现方式特别多,例如TabHost,TabL ...

  7. 《深入理解mybatis原理7》 MyBatis的二级缓存的设计原理

    <深入理解mybatis原理> MyBatis的二级缓存的设计原理 MyBatis的二级缓存是Application级别的缓存,它可以提高对数据库查询的效率,以提高应用的性能.本文将全面分 ...

  8. Ansible 开发调试 之【pycharm远程调试】

    介绍 PyCharm是一种Python IDE,带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具,比如调试.语法高亮.Project管理.代码跳转.智能提示.自动完成.单元测试.版本 ...

  9. 面向对象:三大特性、类成员、property

    一.类的基础知识 python 一切皆为对象. 我们以前的str,list,int 都是对象. 1.1 类的定义 与 调用 class 关键字用来定义类,注意类名首字母大写. 类的调用,先实例化一个类 ...

  10. springmvc日期格式化

    jsp页面String类型转Controller后台Date类型 方法1.在实体中加入日期格式化注解 @DateTimeFormat(pattern="yyyy-MM-dd") p ...