wpf 右下角弹出窗

原文:wpf 右下角弹出窗

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

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

前台代码:

<Window x:Class="V2VReporter.Views.SystemViews.MsgPopup"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:V2VReporter.Views.SystemViews"
        xmlns:controls="clr-namespace:V2VReporter.Controls"
        mc:Ignorable="d"
        Title="系统消息" Height="230" Width="300" AllowsTransparency="True" WindowStyle="None" ShowInTaskbar="False">
    <Border BorderBrush="{StaticResource SideLevel1}" BorderThickness="1">
        <Grid>
            <Grid.RowDefinitions>
                <RowDefinition Height="30"></RowDefinition>
                <RowDefinition Height="*"></RowDefinition>
                <RowDefinition Height="Auto"></RowDefinition>
            </Grid.RowDefinitions>
            <Grid Grid.Row="0" Background="{StaticResource MainGreen}">
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*"></ColumnDefinition>
                    <ColumnDefinition Width="*"></ColumnDefinition>
                </Grid.ColumnDefinitions>
                <StackPanel Grid.Column="0" Orientation="Horizontal">
                    <TextBlock Text="" Style="{StaticResource IconFont}" VerticalAlignment="Center" FontSize="18" Foreground="AliceBlue" Margin="5,0,0,0"></TextBlock>
                    <TextBlock Text="系统消息" Foreground="AliceBlue" FontSize="15" VerticalAlignment="Center" Margin="2,0,0,0" ></TextBlock>
                </StackPanel>
                <StackPanel Grid.Column="1" HorizontalAlignment="Right">
                    <controls:IconButton Style="{StaticResource TitleCloseBtn}" Margin="0,5,2,0" Click="ButtonBase_OnClick"></controls:IconButton>
                </StackPanel>
            </Grid>
        </Grid>
    </Border>
</Window>

后台代码:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using V2VReporter.Resource;

namespace V2VReporter.Views.SystemViews
{
    /// <summary>
    /// MsgPopup.xaml 的交互逻辑
    /// </summary>
    public partial class MsgPopup:Window
    {
        /// <summary>
        /// 关闭动画
        /// </summary>
        private Storyboard sb_close=new Storyboard();
        /// <summary>
        /// 关闭标识
        /// </summary>
        private bool close_flg = false;
        /// <summary>
        /// 关闭动画
        /// </summary>
        private DoubleAnimation close=new DoubleAnimation();
        /// <summary>
        /// 窗口弹出
        /// </summary>
        private Storyboard sb_loaded=new Storyboard();
        /// <summary>
        /// 窗口弹出动画
        /// </summary>
        private DoubleAnimation load=new DoubleAnimation();
        /// <summary>
        /// 窗口加载动画
        /// </summary>
        private DoubleAnimation loadOp=new DoubleAnimation();

        public MsgPopup(Window win)
        {
            InitializeComponent();

            initedCloseStory();
            initedLoadStory(win);
            sb_loaded.Begin();
        }

        private void initedLoadStory(Window win)
        {
            this.Owner = win;
            this.Left = win.Width - this.Width;
            load.From = win.Height;
            load.To = win.Height - this.Height;
            load.Duration = new Duration(TimeSpan.FromSeconds(1.5));
            load.FillBehavior = FillBehavior.HoldEnd;
            load.AutoReverse = false;
            sb_loaded.Children.Add(load);
            Storyboard.SetTarget(load, this);
            Storyboard.SetTargetProperty(load, new PropertyPath("Top"));

            loadOp.From = 0;
            loadOp.To = 1;
            loadOp.Duration=new Duration(TimeSpan.FromSeconds(1.5));
            loadOp.FillBehavior = FillBehavior.HoldEnd;
            loadOp.AutoReverse = false;
            sb_loaded.Children.Add(loadOp);
            Storyboard.SetTarget(loadOp, this);
            Storyboard.SetTargetProperty(loadOp, new PropertyPath("Opacity"));

        }

        private void initedCloseStory()
        {
            close.From = 1;
            close.To = 0;
            close.Duration = new Duration(TimeSpan.FromSeconds(1));
            close.FillBehavior = FillBehavior.HoldEnd;
            close.AutoReverse = false;
            sb_close.Children.Add(close);
            Storyboard.SetTarget(close, this);
            Storyboard.SetTargetProperty(close, new PropertyPath("Opacity"));
        }

        protected override void OnClosing(CancelEventArgs e)
        {
            base.OnClosing(e);
            if (!close_flg)
            {
                sb_close.Completed += delegate
                {
                    close_flg = true;
                    this.Close();
                };
                sb_close.Begin();
                e.Cancel = true;
            }
            else
            {
                e.Cancel = false;
            }
        }

        private void ButtonBase_OnClick(object sender, RoutedEventArgs e)
        {
            this.Close();
        }
    }
}

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

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

原文地址:https://www.cnblogs.com/lonelyxmas/p/10480345.html

时间: 2024-08-15 13:30:12

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

系统右下角弹出升级Windows10的升窗

这几天收到用户反馈,系统右下角弹出提示升级Windows10的升窗框,用户感觉很烦恼.经过排查,确定为QQ的推广.推广的时候,会在客户机C:\Users\Administrator\AppData\Roaming目录下,生成一个WIN10TIPS0623V1.EXE的执行文件,然后此执行文件便会在登录QQ十分钟后弹出提示Windows10升级提示框.如图:       解决办法:在云更新安全中心,将此进程拦截即可.进程名:WIN10TIPS0623V1.EXE 特征码:489CA1015783E

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

DuiVision的弹出窗口类CDlgPopup,是菜单.下拉列表等控件的父类,也可以单独使用,用于创建弹出窗口,弹出窗口默认是非激活状态下自动关闭,例如鼠标点击到弹出窗口外面的区域,弹出窗口就会自动关闭,也可以设置为不自动关闭. 通用的弹出窗口一般通过对话框的OpenDlgPopup函数创建. 弹出窗的属性说明如下: 属性名 类型 说明 width 数字 窗口宽度 height 数字 窗口高度 bkimg 字符串 窗口的背景图片,如果指定了就使用指定的背景图片,否则使用全局设置的背景图片 bk

网页右下角弹出窗体

<!--开始--><style type="text/css"> #msg_win{position:absolute;right:0px;display:none;overflow:hidden;z-index:99;border:1px solid #c00;background:#F9EFFC;width:210px;font-size:12px;margin:0px;} #msg_win .icos{position:absolute;top:2px;*

Android应用之——百度地图最新SDK3.0应用,实现最常用的标注覆盖物以及弹出窗覆盖物

一.概述 最新版的百度地图SDK3.0,修改了很多方法,之前的很多方法被简化了,正好在做地图这一块,顺便就使用了最新版的sdk. 下载官方给的demo,发现变化还是挺大的,之前的一些方法都换了,地图的初始化也进行了调整.多了好几个类,具体用法参考下面的例子,详细的说明可参照官方的说明文档. 二.效果图 标注覆盖物效果图: 弹出窗覆盖物: 三.实现过程 大部分是根据官方给的demo来的. A.配置文件: 第一步:在工程里新建libs文件夹,将开发包里的baidumapapi_vX_X_X.jar拷

data-参数说明(模态弹出窗的使用)

除了通过data-toggle和data-target来控制模态弹出窗之外,Bootstrap框架针对模态弹出框还提供了其他自定义data-属性,来控制模态弹出窗.比如说:是否有灰色背景modal-backdrop,是否可以按ESC键关闭模态弹出窗.有关于Modal弹出窗自定义属性相关说明如下所示: JavaScript触发时的参数设置 $(function(){ $(".btn").click(function(){ $("#mymodal").modal({ b

jquery Mobile弹出窗

先创建一个窗体 <div data-role="popup" id="popupView" class="ui-content" data-overlay-theme="b" data-position-to="window" data-dismissible="false"> <a href='javascript:void(0)' data-rel="ba

Bootstarp学习(二十四)模态弹出框--模态弹出窗的使用

除了通过data-toggle和data-target来控制模态弹出窗之外,Bootstrap框架针对模态弹出框还提供了其他自定义data-属性,来控制模态弹出窗.比如说:是否有灰色背景modal-backdrop,是否可以按ESC键关闭模态弹出窗.有关于Modal弹出窗自定义属性相关说明如下所示: <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content=&qu

Android学习笔记二十之Toast吐司、Notification通知、PopupWindow弹出窗

Android学习笔记二十之Toast吐司.Notification通知.PopupWindow弹出窗 Toast吐司 Toast吐司是我们经常用到的一个控件,Toast是AndroidOS用来显示消息的一种机制,它与Dialog不同,Toast不会获取到焦点,通常显示一段时间之后就会自动消失,下面我们来介绍Toast的几种常用方式: 第一种,默认显示方式,也是最常用的方式: Toast.makeText(MainActivity.this, "这是默认的显示方式", Toast.LE

iOS:弹出窗控制器:UIPopoverController

弹出窗控制器:UIPopoverController 截图: 功能:它是ipd特有的特性,不适用iphone,用来点击一个按钮时,弹出一个窗口以显示一些信息. 如果没有使用passthroughViews属性设置过滤控件,那么点击屏幕的任意区域都可以关闭弹出窗:可是,如果设置了passthroughViews属性过滤了按钮的父视图和显示区域控件,那么点击屏幕任何区域都是无效的,只有点击按钮才会与用户发生交互. 介绍:它是直接继承自NSObject的控件,并不是UIViewController的子