原地址-> http://www.cnblogs.com/yk250/p/5660777.html

介绍:传统的确定,取消,OK,CANCAL之类的对话框太繁琐了,由于项目需要而诞生的仿手机式提示对话框。当然传统的对话框项目中也有,这里就不做介绍了。

出场和退场动画做得很简单,就用Blend随便鼓捣了一番,将就用吧。

预览效果如下:

思路其实很简单:将窗体透明化->布局和样式设计->后台传值调用。

准备工作:Microsoft.Expression.Interactions.dll和System.Windows.Interactivity.dll的引用。Blend中大多数行为需要需要这2个dll,必备啊!

1,将窗体透明化,无边框化:(在.net 4.5中 拖动和缩放窗体再也不用自己写代码了,集成的 <WindowChrome/>就可以实现拖动缩放窗体等诸多功能。)

关键设置如下:

AllowsTransparency="True" HorizontalAlignment="Center" Background="Transparent"  xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity" xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions" WindowStyle="None"

2,布局,主要包括初始布局和动画过渡2个方面:

静态界面布局:

  1. <Grid HorizontalAlignment="Center" VerticalAlignment="Top" x:Name="back">
  2. <Border Padding="38 0" x:Name="br" HorizontalAlignment="Center" VerticalAlignment="Center">
  3. <i:Interaction.Triggers>
  4. <i:EventTrigger EventName="MouseEnter">
  5. <ei:ControlStoryboardAction Storyboard="{StaticResource ShowSb}" ControlStoryboardOption="Stop"/>
  6. </i:EventTrigger>
  7. <i:EventTrigger EventName="MouseLeave">
  8. <ei:ControlStoryboardAction Storyboard="{StaticResource MouseLeave}"/>
  9. </i:EventTrigger>
  10. </i:Interaction.Triggers>
  11. <Grid HorizontalAlignment="Center" VerticalAlignment="Center">
  12. <Grid HorizontalAlignment="Center" VerticalAlignment="Center">
  13. <Grid.RowDefinitions>
  14. <RowDefinition Height=""></RowDefinition>
  15. <RowDefinition Height="auto"></RowDefinition>
  16. <RowDefinition Height=""></RowDefinition>
  17. </Grid.RowDefinitions>
  18.  
  19. <Border Visibility="Visible" x:Name="grid1" Grid.RowSpan="" RenderTransformOrigin="0.5,0.5" BorderBrush="#00A0E9" BorderThickness="" CornerRadius="">
  20. <Border.RenderTransform>
  21. <TransformGroup>
  22. <ScaleTransform/>
  23. <SkewTransform/>
  24. <RotateTransform/>
  25. <TranslateTransform/>
  26. </TransformGroup>
  27. </Border.RenderTransform>
  28. <Border.Background>
  29. <LinearGradientBrush EndPoint="1,1" MappingMode="RelativeToBoundingBox" StartPoint="0,0">
  30. <GradientStop Color="#EFF0F2" Offset="0.75"/>
  31. <GradientStop Color="#EFF0F2" Offset="0.25"/>
  32. <GradientStop Color="#EFF0F2" Offset=""/>
  33. <GradientStop Color="#EFF0F2"/>
  34. </LinearGradientBrush>
  35. </Border.Background>
  36. </Border>
  37. <Border x:Name="grid2" Visibility="Visible" Opacity="" Grid.RowSpan="" RenderTransformOrigin="0.5,0.5" BorderBrush="#F35150" BorderThickness="" CornerRadius="">
  38. <Border.RenderTransform>
  39. <TransformGroup>
  40. <ScaleTransform/>
  41. <SkewTransform/>
  42. <RotateTransform/>
  43. <TranslateTransform/>
  44. </TransformGroup>
  45. </Border.RenderTransform>
  46. <Border.Background>
  47. <LinearGradientBrush EndPoint="1,1" MappingMode="RelativeToBoundingBox" StartPoint="0,0">
  48. <GradientStop Color="#EFF0F2" Offset="0.75"/>
  49. <GradientStop Color="#EFF0F2" Offset="0.25"/>
  50. <GradientStop Color="#EFF0F2" Offset=""/>
  51. <GradientStop Color="#EFF0F2"/>
  52. </LinearGradientBrush>
  53. </Border.Background>
  54. </Border>
  55. <TextBlock Margin="38 0 38 0" Grid.Row="" FontSize="" Foreground="#64676d" x:Name="tb" Text="{Binding Message,RelativeSource={RelativeSource AncestorType=Window},FallbackValue=失败信息}" TextWrapping="Wrap" MinWidth="" VerticalAlignment="Center" HorizontalAlignment="Center" RenderTransformOrigin="0.5,0.5" MaxWidth="" TextAlignment="Center" FontFamily="Microsoft YaHei">
  56. <TextBlock.RenderTransform>
  57. <TransformGroup>
  58. <ScaleTransform/>
  59. <SkewTransform/>
  60. <RotateTransform/>
  61. <TranslateTransform/>
  62. </TransformGroup>
  63. </TextBlock.RenderTransform></TextBlock>
  64. </Grid>
  65. </Grid>
  66. </Border>
  67.  
  68. </Grid>

进入和退出的动画控制:

  1. <Storyboard x:Key="ShowSb" Completed="Storyboard_Completed">
  2. <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)" Storyboard.TargetName="grid1">
  3. <EasingDoubleKeyFrame KeyTime="" Value="{Binding YOffSet}"/>
  4. <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value=""/>
  5. <EasingDoubleKeyFrame KeyTime="0:0:3" Value=""/>
  6. <EasingDoubleKeyFrame KeyTime="0:0:3.5" Value="{Binding YOffSet}"/>
  7. </DoubleAnimationUsingKeyFrames>
  8. <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)" Storyboard.TargetName="grid2">
  9. <EasingDoubleKeyFrame KeyTime="" Value="{Binding YOffSet}"/>
  10. <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value=""/>
  11. <EasingDoubleKeyFrame KeyTime="0:0:3" Value=""/>
  12. <EasingDoubleKeyFrame KeyTime="0:0:3.5" Value="{Binding YOffSet}"/>
  13. </DoubleAnimationUsingKeyFrames>
  14. <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)" Storyboard.TargetName="tb">
  15. <EasingDoubleKeyFrame KeyTime="" Value="{Binding YOffSet}"/>
  16. <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value=""/>
  17. <EasingDoubleKeyFrame KeyTime="0:0:3" Value=""/>
  18. <EasingDoubleKeyFrame KeyTime="0:0:3.5" Value="{Binding YOffSet}"/>
  19. </DoubleAnimationUsingKeyFrames>
  20.  
  21. </Storyboard>
  22.  
  23. <Storyboard x:Key="MouseLeave" Completed="Storyboard_Completed">
  24. <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="grid1">
  25. <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value=""/>
  26. </DoubleAnimationUsingKeyFrames>
  27. <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="grid2">
  28. <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value=""/>
  29. </DoubleAnimationUsingKeyFrames>
  30. <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="tb">
  31. <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value=""/>
  32. </DoubleAnimationUsingKeyFrames>
  33. <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)" Storyboard.TargetName="grid1">
  34. <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="{Binding YOffSet}"/>
  35. </DoubleAnimationUsingKeyFrames>
  36. <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)" Storyboard.TargetName="grid2">
  37. <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="{Binding YOffSet}"/>
  38. </DoubleAnimationUsingKeyFrames>
  39. <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.Y)" Storyboard.TargetName="tb">
  40. <EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="{Binding YOffSet}"/>
  41. </DoubleAnimationUsingKeyFrames>
  42. </Storyboard>

注意:鼠标移动上去停止动画和移出后快速消失的代码为:

  1. <i:Interaction.Triggers>
  2. <i:EventTrigger EventName="MouseEnter">
  3. <ei:ControlStoryboardAction Storyboard="{StaticResource ShowSb}" ControlStoryboardOption="Stop"/>
  4. </i:EventTrigger>
  5. <i:EventTrigger EventName="MouseLeave">
  6. <ei:ControlStoryboardAction Storyboard="{StaticResource MouseLeave}"/>
  7. </i:EventTrigger>
  8. </i:Interaction.Triggers>

后台代码逻辑:

  1. private bool iserror = false;
  2. public void Show(string messageBoxText, bool iserror = false)
  3. {
  4. this.iserror = iserror;
  5. this.Message = messageBoxText;
  6. this.Show();
  7. }
  8.  
  9. public OnlyShowMessageBox()
  10. {
  11. InitializeComponent();
  12. this.DataContext = new model() { YOffSet = -300d };
  13. this.Loaded += (y, k) =>
  14. {
  15. this.Top = ;
  16. this.Left = (SystemParameters.WorkArea.Width) / - this.ActualWidth / ;
  17. if (iserror)
  18. {
  19. this.grid1.Visibility = Visibility.Collapsed;
  20. }
  21. else { this.grid2.Visibility = Visibility.Collapsed; }
  22. (this.Resources["ShowSb"] as Storyboard).Begin();
  23. };
  24. }
  25.  
  26. private void Storyboard_Completed(object sender, EventArgs e)
  27. {
  28. this.Close();
  29. }

其中 :

  1. public class model : ModelBase
  2. {
  3. private double YOffset;
  4.  
  5. public double YOffSet
  6. {
  7. get { return YOffset; }
  8. set
  9. {
  10. YOffset = value;
  11. RaisePropertyChangedEvent("YOffSet");
  12. }
  13. }
  14.  
  15. }

其中ModelBase在 可分组的选择框控件(MVVM下)(Toggle样式 仿造单选框RadioButton,复选框CheckBox功能) 中有介绍。

最后,调用方法:

new OnlyShowMessageBox().Show("请注意:前方高能,禁止入内!", false);

或者

new OnlyShowMessageBox().Show("不存在此对象!", true);

WPF自动隐藏的消息框(鼠标放上去将一直显示,移开动画继续),提供normal和error两种边框。的更多相关文章

  1. WPF实战之一 桌面消息框(右下角消息弹出框)

    此版本是根据别人的项目改造的,记录下笔记 原文:https://blog.csdn.net/catshitone/article/details/75089069 一.即时弹出 1.创建弹出框 新建一 ...

  2. gridview列显示,截取其中前面的几个字显示出来,当鼠标放上去的时候显示全部——使用LinkButton的方法

    使用LinkButton的方法<asp:LinkButton ToolTip ='<%#Eval("FilePath") %>' runat="serv ...

  3. table中td文字超出长度用省略号隐藏超出内容,鼠标点击内容全部显示

    1,设置css样式 <style>table {width: 100%;float: left;table-layout:fixed;width:600px;border:1px soli ...

  4. 基于.Net实现前端对话框和消息框

    关于前端对话框.消息框的优秀插件多不胜数.造轮子是为了更好的使用轮子,并不是说自己造的轮子肯定好.所以,这个博客系统基本上都是自己实现的,包括日志记录.响应式布局等等一些本可以使用插件的.好了,废话不 ...

  5. 一步步开发自己的博客 .NET版(10、前端对话框和消息框的实现)

    关于前端对话框.消息框的优秀插件多不胜数.造轮子是为了更好的使用轮子,并不是说自己造的轮子肯定好.所以,这个博客系统基本上都是自己实现的,包括日志记录.响应式布局.评论功能等等一些本可以使用插件的.好 ...

  6. Delphi 7中的四种消息框

    Delphi中平常使用的消息框有四种形式,有ShowMessage.MessageDlg.Application.MessageBox.MessageBox.下面来深入了解下这四种形式的实现和使用.1 ...

  7. 使用jQuery开发messager消息框插件

    1.插件使用 首先引入jquery库,然后引入dialog.js.dialog.css.messager.js.messager.css,如下: <script type="text/ ...

  8. 代码操作Word时,目录自动更新的两种方法

    最近的项目中有一个功能点为:根据分析数据库并生成报告.不过不是大数据.数据挖掘之类,报告的内容.组织方式都是事先固定下来的.实现的方式为,在普通word文档中插入书签制成模板,然后程序使用OpenXM ...

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

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

随机推荐

  1. JavaScript 立即执行函数

    js中(function(){…})()立即执行函数写法理解 javascript和其他编程语言相比比较随意,所以javascript代码中充满各种奇葩的写法,有时雾里看花,当然,能理解各型各色的写法 ...

  2. Facebook 网络模拟工具 ATC部署及使用

    废话引用: Facebook此前开源了增强网络流量控制工具 ATC,能利用WiFi网络模拟各种移动网络,测试智能手机和APP在不同国家地区和应用环境下的性能表现.ATC能够模拟2G.2.5G(Edge ...

  3. 【转载】ANSYS 动力分析 (9) - 瞬态动力分析 (1)

    原文地址:http://htbbzzg.blog.163.com/blog/static/69725206201081663611208/ 第四章   瞬态动力分析 第一节:瞬态动力分析的定义和目的  ...

  4. 【jq】c#零基础学习之路(5)自己编写简单的Mylist<T>

    public class MyList<T> where T : IComparable { private T[] array; private int count; public My ...

  5. 兼容ie7、8、9、10、FF、Chrome的遮罩显示

    经常碰到这种情形,要实现图片上有一层遮罩和按钮,鼠标滑过时遮罩颜色变深且按钮图片变化,磕磕碰碰终于弄出来题目所述兼容的解决方案. 对于遮罩的实现,将遮罩层.按钮.图片放置在同一个div中,根据abso ...

  6. Membership基本用法

    MemberShip简介: Membership是Asp.Net框架,用于管理网站的用户Membership,角色Roles以及配置信息Profile. System.Web.Security.Mem ...

  7. Ret2Libc 练习(1) -- ZwSetInformationProcess

    花了两个小半晚上的时间将0day安全这本书的绕过DEP的第一个实验做了,这里做些笔记. Ret2libc 我现在自己的理解就是在开启DEP保护的情况下,在程序的其他的可执行位置找到可以满足我利用要求的 ...

  8. ecs CentOS 7 安装 mysql (mariadb)

    检查之前是否已经安装 rpm -qa | grep mariadb 如果已安装,卸载 yum remove mysql mysql-server mysql-libs compat-mysql51 开 ...

  9. linux 持续构建(自动部署) 重启动tomcat或进程的脚本

    #!/bin/sh TOMCAT_PATH=`dirname "$0"` echo "TOMCAT_PATH is /usr/local/tomcat" PID ...

  10. DB SQL Monitor 阻塞及等待事件监控工具

    SQL Monitor Designed By zhaoguan wang 说明------------------------------------------------------------ ...