博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自定义弹出框控件制作及示例
阅读量:5731 次
发布时间:2019-06-18

本文共 4551 字,大约阅读时间需要 15 分钟。

控件 xaml

View Code

控件 cs

using System;using System.Collections.Generic;using System.Linq;using System.Net;using System.Windows;using System.Windows.Controls;using System.Windows.Documents;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Animation;using System.Windows.Shapes;namespace neihan8.Control{    public partial class Toast : UserControl    {        public Toast()        {            InitializeComponent();        }        public static readonly DependencyProperty MessageProperty            = DependencyProperty.Register("Message", typeof(string), typeof(Toast), new PropertyMetadata(OnMessageChanged));        public string Message        {            get            {                return (string)GetValue(MessageProperty);            }            set            {                SetValue(MessageProperty, value);            }        }        private static void OnMessageChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)        {            if (d != null && d is Toast)            {                (d as Toast).SetMessage((string)e.NewValue);            }        }        private void SetMessage(string toastBox)        {            message.Text = toastBox;        }    }}
View Code

调用控件的类

using System;using System.Net;using System.Windows;using System.Windows.Controls;using System.Windows.Documents;using System.Windows.Ink;using System.Windows.Input;using System.Windows.Media;using System.Windows.Media.Animation;using System.Windows.Shapes;using neihan8.Control;using System.Windows.Controls.Primitives;using System.Windows.Threading;namespace neihan8{    public class ToastPrompt    {        public event EventHandler Click;        public event EventHandler Completed;        public void Show(string message)        {            Popup p = new Popup();            Toast tb = new Toast() { Message = message };            p.Child = tb;            p.IsOpen = true;            tb.Open.Begin();            DispatcherTimer timer = new DispatcherTimer();            tb.Open.Completed += new EventHandler((sender, eventargs) =>            {                timer.Interval = TimeSpan.FromSeconds(3);                timer.Tick += new EventHandler((sd, ea) =>                {                    if (timer != null && timer.IsEnabled)                    {                        timer.Stop();                        tb.Close.Begin();                    }                });                timer.Start();            });            tb.Close.Completed += new EventHandler((s, e) =>            {                p.IsOpen = false;                if (Completed != null)                    Completed.Invoke(this, new EventArgs());            });            tb.Tap += new EventHandler
((sender, eventargs) => { if (Click != null) Click.Invoke(this, new EventArgs()); }); tb.ManipulationCompleted += new EventHandler
((sender, eventargs) => { if (eventargs.TotalManipulation.Translation.X > 200 || eventargs.FinalVelocities.LinearVelocity.X > 1000) { if (timer != null && timer.IsEnabled) { timer.Stop(); tb.Close.Begin(); } } }); } }}
View Code

类支持 Completed、Click 事件,支持右划关闭控件

按返回键两次退出程序事例

private bool canexit = false;        public MainPage()        {            InitializeComponent();            this.BackKeyPress += new EventHandler
(MainPage_BackKeyPress); } private void MainPage_BackKeyPress(object sender, System.ComponentModel.CancelEventArgs e) { e.Cancel = !canexit; ToastPrompt toast = new ToastPrompt(); toast.Completed += (o, ex) => { canexit = false; }; toast.Show("再按一次退出程序。"); canexit = true; }

 

转载于:https://www.cnblogs.com/fatdaniel/p/3640407.html

你可能感兴趣的文章
Linux学习笔记(二)系统常用命令和一些概念
查看>>
SaltStack实战之配置管理-LAMP自动化部署
查看>>
phpstorm 更换字体
查看>>
Linux命令大全
查看>>
jQuery表单美化插件jqTransform
查看>>
跟我学Spring Cloud(Finchley版)-04-服务注册与服务发现-原理剖析
查看>>
终端、作业控制与守护进程
查看>>
如何让 Drupal 使用 Wordpress 形式的编辑代码?
查看>>
ServletContext作用功能详解
查看>>
makefile(04)_函数
查看>>
自定义类似viewpager的viewgroup
查看>>
将博客搬至CSDN
查看>>
Linux运维学习-4——2016年7月26日
查看>>
MongoDB GroupBy操作, 结果集大小限制问题。
查看>>
在球面上随机生成分布点的算法(fortran)
查看>>
Centos 下搭建FTP上传下载服务器
查看>>
功件与面向功件编程
查看>>
10年追逐技术潮流,差一点儿就两手空空,竹篮打水,留给我的只有经验
查看>>
ASP.NET 生成唯一不重复的订单号 支持多用户并发、持多数据库的实现参考(C#.NET通用权限管理系统组件源码组成部分)...
查看>>
redis缓存服务器
查看>>