自己写的wpf 弹出框,欢迎拍砖,动画都写在了后台代码,前台代码不太重要,用了一下iconfont,具体样式我就不贴出来了,本次主要是后台代码的动画

需要有父级窗口才可以使用。

前台代码:

  1. <Window x:Class="V2VReporter.Views.SystemViews.MsgPopup"
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  5. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  6. xmlns:local="clr-namespace:V2VReporter.Views.SystemViews"
  7. xmlns:controls="clr-namespace:V2VReporter.Controls"
  8. mc:Ignorable="d"
  9. Title="系统消息" Height="230" Width="300" AllowsTransparency="True" WindowStyle="None" ShowInTaskbar="False">
  10. <Border BorderBrush="{StaticResource SideLevel1}" BorderThickness="1">
  11. <Grid>
  12. <Grid.RowDefinitions>
  13. <RowDefinition Height="30"></RowDefinition>
  14. <RowDefinition Height="*"></RowDefinition>
  15. <RowDefinition Height="Auto"></RowDefinition>
  16. </Grid.RowDefinitions>
  17. <Grid Grid.Row="0" Background="{StaticResource MainGreen}">
  18. <Grid.ColumnDefinitions>
  19. <ColumnDefinition Width="*"></ColumnDefinition>
  20. <ColumnDefinition Width="*"></ColumnDefinition>
  21. </Grid.ColumnDefinitions>
  22. <StackPanel Grid.Column="0" Orientation="Horizontal">
  23. <TextBlock Text="" Style="{StaticResource IconFont}" VerticalAlignment="Center" FontSize="18" Foreground="AliceBlue" Margin="5,0,0,0"></TextBlock>
  24. <TextBlock Text="系统消息" Foreground="AliceBlue" FontSize="15" VerticalAlignment="Center" Margin="2,0,0,0" ></TextBlock>
  25. </StackPanel>
  26. <StackPanel Grid.Column="1" HorizontalAlignment="Right">
  27. <controls:IconButton Style="{StaticResource TitleCloseBtn}" Margin="0,5,2,0" Click="ButtonBase_OnClick"></controls:IconButton>
  28. </StackPanel>
  29. </Grid>
  30. </Grid>
  31. </Border>
  32. </Window>

后台代码:

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using System.Windows;
  8. using System.Windows.Controls;
  9. using System.Windows.Data;
  10. using System.Windows.Documents;
  11. using System.Windows.Input;
  12. using System.Windows.Media;
  13. using System.Windows.Media.Animation;
  14. using System.Windows.Media.Imaging;
  15. using System.Windows.Shapes;
  16. using V2VReporter.Resource;
  17.  
  18. namespace V2VReporter.Views.SystemViews
  19. {
  20. /// <summary>
  21. /// MsgPopup.xaml 的交互逻辑
  22. /// </summary>
  23. public partial class MsgPopup:Window
  24. {
  25. /// <summary>
  26. /// 关闭动画
  27. /// </summary>
  28. private Storyboard sb_close=new Storyboard();
  29. /// <summary>
  30. /// 关闭标识
  31. /// </summary>
  32. private bool close_flg = false;
  33. /// <summary>
  34. /// 关闭动画
  35. /// </summary>
  36. private DoubleAnimation close=new DoubleAnimation();
  37. /// <summary>
  38. /// 窗口弹出
  39. /// </summary>
  40. private Storyboard sb_loaded=new Storyboard();
  41. /// <summary>
  42. /// 窗口弹出动画
  43. /// </summary>
  44. private DoubleAnimation load=new DoubleAnimation();
  45. /// <summary>
  46. /// 窗口加载动画
  47. /// </summary>
  48. private DoubleAnimation loadOp=new DoubleAnimation();
  49.  
  50. public MsgPopup(Window win)
  51. {
  52. InitializeComponent();
  53.  
  54. initedCloseStory();
  55. initedLoadStory(win);
  56. sb_loaded.Begin();
  57. }
  58.  
  59. private void initedLoadStory(Window win)
  60. {
  61. this.Owner = win;
  62. this.Left = win.Width - this.Width;
  63. load.From = win.Height;
  64. load.To = win.Height - this.Height;
  65. load.Duration = new Duration(TimeSpan.FromSeconds(1.5));
  66. load.FillBehavior = FillBehavior.HoldEnd;
  67. load.AutoReverse = false;
  68. sb_loaded.Children.Add(load);
  69. Storyboard.SetTarget(load, this);
  70. Storyboard.SetTargetProperty(load, new PropertyPath("Top"));
  71.  
  72. loadOp.From = ;
  73. loadOp.To = ;
  74. loadOp.Duration=new Duration(TimeSpan.FromSeconds(1.5));
  75. loadOp.FillBehavior = FillBehavior.HoldEnd;
  76. loadOp.AutoReverse = false;
  77. sb_loaded.Children.Add(loadOp);
  78. Storyboard.SetTarget(loadOp, this);
  79. Storyboard.SetTargetProperty(loadOp, new PropertyPath("Opacity"));
  80.  
  81. }
  82.  
  83. private void initedCloseStory()
  84. {
  85. close.From = ;
  86. close.To = ;
  87. close.Duration = new Duration(TimeSpan.FromSeconds());
  88. close.FillBehavior = FillBehavior.HoldEnd;
  89. close.AutoReverse = false;
  90. sb_close.Children.Add(close);
  91. Storyboard.SetTarget(close, this);
  92. Storyboard.SetTargetProperty(close, new PropertyPath("Opacity"));
  93. }
  94.  
  95. protected override void OnClosing(CancelEventArgs e)
  96. {
  97. base.OnClosing(e);
  98. if (!close_flg)
  99. {
  100. sb_close.Completed += delegate
  101. {
  102. close_flg = true;
  103. this.Close();
  104. };
  105. sb_close.Begin();
  106. e.Cancel = true;
  107. }
  108. else
  109. {
  110. e.Cancel = false;
  111. }
  112. }
  113.  
  114. private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
  115. {
  116. this.Close();
  117. }
  118. }
  119. }

直接用的话会运行不起来,主要看后台动画代码和逻辑

本文属原创 转载请写明出处

wpf 右下角弹出窗的更多相关文章

  1. DuiVision开发教程(18)-弹出窗

    DuiVision的弹出窗体类CDlgPopup,是菜单.下拉列表等控件的父类,也能够单独使用,用于创建弹出窗体.弹出窗体默认是非激活状态下自己主动关闭,比如鼠标点击到弹出窗体外面的区域,弹出窗体就会 ...

  2. Jquery和Javascript 实际项目中写法基础-弹出窗和弹出层 (4)

     一.实际项目中有很多如下界面效果.    二.该效果可以归结为弹出窗或者弹出层来实现的,为什么这么说?看如下代码:      <!DOCTYPE html> <html> & ...

  3. Bootstrap模态弹出窗

    Bootstrap模态弹出窗有三种方式: 1.href触发模态弹出窗元素: <a class="btn btn-primary" data-toggle="moda ...

  4. jquery Mobile弹出窗

    先创建一个窗体 <div data-role="popup" id="popupView" class="ui-content" da ...

  5. 右下角弹出"Windows-延缓写入失败"或者"xxx-损坏文件 请运行Chkdsk工具"

    知识点分析: 任务栏右下角弹出“Windows-延缓写入失败”或者“xxx-损坏文件 请运行Chkdsk工具”. 操作步骤: 方法一:Chkdsk工具 在开始---运行中输入cmd,然后输入chkds ...

  6. iOS:模态弹出窗控制器UIPopoverPresentationController

    模态弹出窗控制器:UIPopoverPresentationController 实质:就是将内容控制器包装成PopoverPresentationController的形式,然后再模态出来,必须指定 ...

  7. iOS:弹出窗控制器:UIPopoverController

    弹出窗控制器:UIPopoverController 截图:   实质:就是将内容控制器包装成popoverController的形式,然后在模态出来,必须给定指向目标(target.frame). ...

  8. C#利用API制作类似QQ一样的右下角弹出窗体

    C#利用API制作类似QQ一样的右下角弹出窗体 (2009-03-21 15:02:49) 转载▼ 标签: 杂谈 分类: .NET using System;using System.Collecti ...

  9. winform C#屏幕右下角弹出消息框并自动消失

    ①弹出信息框后慢慢下降消失 在主窗体中新增按钮重命名为btnShowAndDisappearMessages,在click事件中写如下代码: private void btnShowAndDisapp ...

随机推荐

  1. 数据流中位数 · data stream median

    [抄题]: 数字是不断进入数组的,在每次添加一个新的数进入数组的同时返回当前新数组的中位数. [思维问题]: [一句话思路]: 左边x个元素,右边要有x+1个元素,因此利用maxheap把左边的最大值 ...

  2. oralce 存储过程、函数和触发器

    一.存储过程和存储函数 指存储在数据库中供所有用户程序调用的子程序叫存储过程.存储函数.   创建存储过程 用CREATE PROCEDURE命令建立存储过程. 语法: create [or repl ...

  3. discuz的css处理机制

    common/common.css 是一个通用的css文件. common/module.css 是某个功能模块使用的css文件.   module.css中,利用特殊语法: /** 标识 **/ c ...

  4. SqlServer和MySql允许脏读的实现方式,提高查询效率

    --Sql Server 允许脏读查询sqlselect * from category with(nolock) --MySql 允许脏读查询sql Mysql没有语法糖,需要原生的sqlSET S ...

  5. C语言点滴

    static修饰的变量和函数不可以在其他文件extern引用该变量或者函数. static变量放在静态内存区. static变量赋值只生效一次,再无法调用赋值语句.但是可以运算,例如++等. exte ...

  6. win7 一切软件都安装不上 解决 把他卸掉

    KB2962872   控制面板,添加删除程序,查看已更新

  7. 2018.08.27 [Usaco2017 Jan]Promotion Counting(线段树合并)

    描述 The cows have once again tried to form a startup company, failing to remember from past experienc ...

  8. 2018.08.16 洛谷P1437 [HNOI2004]敲砖块(二维dp)

    传送门 看起来普通dp" role="presentation" style="position: relative;">dpdp像是有后效性的 ...

  9. GitHub 安装配置

    1:到 Github 注册 页面中注册,填写用户名.邮箱和密码 选择免费服务 步骤三可以根据自身喜好勾选或者直接跳过 2.1.2 创建远程仓库 创建完账号后,可以开始创建仓库 但是这里我们还没有验证邮 ...

  10. IDEA如何初始化Git本地仓库,并提交到远程仓库

    本文转载自:http://blog.csdn.net/two_people/article/details/77008593 1. 首先在远程仓库上新建一个项目,码云和github都可以,我这里使用的 ...