一、前言

在项目中,经常需要用到消息提醒功能,在以前接触安卓开发那会使用过Toast,于是打算在WPF上也来模仿一个,话不多说,撸起袖子干起来!

二、正文

1、首先新建一个工程,工程的目录如下

2、编写Toast.cs的代码,这里因为只需要显示文本信息,所以Toast继承Label即可,然后添加一个定时关闭的方法

  1. public class Toast : Label
  2. {
  3. public Toast()
  4. {
  5.  
  6. }
  7.  
  8. public void SetTimeClose(TimeSpan time)
  9. {
  10. new Thread(() =>
  11. {
  12. Thread.Sleep(time);
  13. if (this.Parent is Panel)
  14. {
  15. this.Dispatcher.BeginInvoke(new Action(() =>
  16. {
  17. (this.Parent as Panel).Children.Remove(this);
  18. }));
  19. }
  20. })
  21. { IsBackground = true }.Start();
  22. }
  23. }

3、接着编写一下Toast控件的样式

  1. <Style TargetType="{x:Type ctls:Toast}">
  2. <Setter Property="Foreground" Value="White" />
  3. <Setter Property="FocusVisualStyle" Value="{x:Null}" />
  4. <Setter Property="Template">
  5. <Setter.Value>
  6. <ControlTemplate TargetType="{x:Type ctls:Toast}">
  7. <Border
  8. MinWidth="50"
  9. MinHeight="50"
  10. Padding="25,0"
  11. Background="#90000000"
  12. CornerRadius="2">
  13. <Border.Effect>
  14. <DropShadowEffect BlurRadius="10" ShadowDepth="1" />
  15. </Border.Effect>
  16. <ContentPresenter
  17. HorizontalAlignment="Center"
  18. VerticalAlignment="Center"
  19. TextBlock.FontSize="14" />
  20. </Border>
  21. </ControlTemplate>
  22. </Setter.Value>
  23. </Setter>
  24. </Style>

4、编辑MainWindow.xaml文件,其中StackPanel是用来添加Toast控件的容器

  1. <Window x:Class="ToastDemo.MainWindow"
  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:ToastDemo"
  7. mc:Ignorable="d"
  8. Title="MainWindow" Height="450" Width="800">
  9. <Grid>
  10. <Grid>
  11. <Button
  12. Width="100"
  13. Height="50"
  14. Content="Button"
  15. Click="Button_Click"/>
  16. </Grid>
  17. <StackPanel
  18. Name="ToastPanel"
  19. Margin="0,80,30,0"
  20. HorizontalAlignment="Center"
  21. VerticalAlignment="Top" />
  22. </Grid>
  23. </Window>

5、接着编写后台代码,添加一个ShowToast方法来生成一个Toast到ToastPanel

  1. public partial class MainWindow : Window
  2. {
  3. public MainWindow()
  4. {
  5. InitializeComponent();
  6. }
  7.  
  8. private void Button_Click(object sender, RoutedEventArgs e)
  9. {
  10. ShowToast("这是一个Toast");
  11. }
  12.  
  13. public void ShowToast(string text, TimeSpan? time = null)
  14. {
  15. Toast toast = new Toast();
  16. toast.Content = text;
  17. toast.Margin = new Thickness(0, 10, 0, 0);
  18. ToastPanel.Children.Add(toast);
  19. if (time == null)
  20. {
  21. toast.SetTimeClose(TimeSpan.FromSeconds(5));
  22. }
  23. else
  24. {
  25. toast.SetTimeClose(time.Value);
  26. }
  27. }
  28. }

6、运行一下看一下效果,可以看到想要的基本效果已经完成了

WPF开发随笔收录-仿安卓Toast的更多相关文章

  1. WPF开发随笔收录-ScrollViewer滑块太小解决方案

    一.前言 在WPF开发过程中,ScrollViewer是一个很常使用到的控件,在自己工作的项目中,收到一个反馈就是当ScrollViewer里面的内容太长时,滚动条的滑块就会变得很小,然后导致点击起来 ...

  2. WPF开发随笔收录-DrawingVisual绘制高性能曲线图

    一.前言 项目中涉及到了心率监测,而且数据量达到了百万级别,通过WPF实现大数据曲线图时,尝试过最基础的Canvas来实现,但是性能堪忧,而且全部画出来也不实际.同时也尝试过找第三方的开源库,但是因为 ...

  3. WPF开发随笔收录-唯一标识符GUID

    一.前言 该系列博客用于记录本人在WPF开发过程中遇到的各种知识点 二.正文 1.在工作的项目中,软件需要用到在线升级功能,由于第一次弄,在下载服务端的文件到本地时,文件的名称我选择直接生成为固定的格 ...

  4. WPF开发随笔收录-心电图曲线绘制

    一.前言 项目中之前涉及到胎儿心率图曲线的绘制,最近项目中还需要添加心电曲线和血样曲线的绘制功能.今天就来分享一下心电曲线的绘制方式: 二.正文 1.胎儿心率曲线的绘制是通过DrawingVisual ...

  5. WPF开发随笔收录-获取软件当前目录的坑

    一.唠唠叨叨 软件开发过程中,经常需要使用到获取exe当前目录这个功能,前同事在实现这个需求时使用的是Directory.GetCurrentDirectory()这个方法,但再最近的测试中,突然发现 ...

  6. WPF开发随笔收录-DataAnnotations实现数据校验(MVVM架构下)

    一.前言 在自己的项目中挺多地方需要涉及到数据验证的,初期的实现方式都是通过点击确定后再逐个验证数据是否符合要求,但这种方式会让后台代码变得很多很乱.于是就开始在网上需求好的解决方式,刚好看到了一个大 ...

  7. WPF开发随笔收录-报警闪烁效果实现

    一.前言 工作中目前经手的项目是医疗相关的监护软件,所以会涉及到一些报警效果的实现,今天在这里就简单分享一下实现方式 二.正文 1.实现的方式比较的简单,就是通过一个Border控件,然后搭配Data ...

  8. WPF开发随笔收录-带递增递减按钮TextBox

    一.前言 今天分享一下如何实现带递增递减按钮的TextBox控件 二.正文 1.之前的博客分享了一篇自定义XamlIcon控件的文章,这次就直接在那个项目的基础上实现今天这个自定义控件 2.首先添加两 ...

  9. WPF开发随笔收录-本地日志LogUtil类

    一.前言 生活中的日志是记录你生活的点点滴滴,让它把你内心的世界表露出来,更好的诠释自己的内心世界.而在开发者眼中的日志是我们排除问题的第一手资料,项目中的程序上线之后,一旦发生异常,第一件事就是先去 ...

随机推荐

  1. java实现MD5文件加密

    package me.zhengjie.modules.logdump.util; import java.io.FileInputStream; import java.io.IOException ...

  2. 『现学现忘』Git基础 — 7、设置Git Bash终端默认路径

    目录 1.Git Bash默认路径 2.如何查看Git Bash终端默认路径 3.如何修改Git Bash终端的默认路径 4.拓展:指定目录进入Git Bash终端 5.注意事项 如果您不熟悉Git命 ...

  3. redis的zset数据结构:跳表

    点赞再看,养成习惯,微信搜索「小大白日志」关注这个搬砖人. 文章不定期同步公众号,还有各种一线大厂面试原题.我的学习系列笔记. 广州这边封闭式管理好久了,今天终于周末可以出去溜溜了 什么是zset z ...

  4. gcc版本切换 Linux环境下

    先看看我们系统用的gcc和g++是什么版本:gcc -v 可能会出现安装失败(E: 软件包gcc还没有可供安装的候选者): 1.使用如下命令修改源 sudo gedit /etc/apt/source ...

  5. 超详细的Linux 用户与用户组知识

    一个执着于技术的公众号 1.用户和组的概念 Linux系统对用户与组的管理是通过ID号来实现的.我们在登录系统时,输入用户名与对应密码,操作系统会将用户名转化为ID号后再判断该账号是否存在,并对比密码 ...

  6. 史上最全Linux面试题(2020最新版)

    作者:ThinkWon 链接:https://blog.csdn.net/thinkwon/article/details/104588679 导读:本文整理了最新的Linux面试题,近3万字,约10 ...

  7. 一探 Vue 数据响应式原理

    一探 Vue 数据响应式原理 本文写于 2020 年 8 月 5 日 相信在很多新人第一次使用 Vue 这种框架的时候,就会被其修改数据便自动更新视图的操作所震撼. Vue 的文档中也这么写道: Vu ...

  8. SM3和Blake

    在此给出SM3和Blake的对比 哈希函数 哈希算法 (Hash Algorithm) 是将任意长度的数据映射为固定长度数据的算法,也称为消息摘要.一般情况下,哈希算法有两个特点, 一是原始数据的细微 ...

  9. Spring Boot整合模板引擎freemarker

    jsp本质是servlet,渲染都在服务器,freemarker模板引擎也是在服务器端渲染. 项目结构 引入依赖pom.xml <!-- 引入 freemarker 模板依赖 --> &l ...

  10. unity---给物体施加普通力和位置力

    普通力 让物体沿着某一方向获得一个力,vector3方向 addForceObj.GetComponent<Rigidbody>().AddForce(1000,0,1000); 位置力 ...