------------恢复内容开始------------

好久没写WPF的博客了,其实有很多心得要总结下,但是懒。。。。。

今天工作需要,需要实现一个

1 右下角的提示窗口,然后过三五秒自动消失这样的需求。

2 再任意位置可以弹出 一个小界面,比如点击确认按钮后弹出某些确认信息 (用窗口实现当然也可以,感觉有点大马拉小车)

想着这样的功能应该又好人做过了,直接网上抄下就可以了,奈何没找到,CSDN下载都需要积分。哎,现在的人都想着赚钱了嘛。。。。

决定用Popup做,回顾了下Popup的玩法,要实现,右下角/任意坐标,还是有点麻烦的。一些基础如果不是很清楚可以看下这个博客

https://www.cnblogs.com/nimorl/p/11628596.html ,写的比较清楚

想实现任意位置,需要用到PlacementRectangle 属性,这个东西 简单点说就是需要你告诉POPUP 一个坐标,然后它根据坐标来做相对定位,我觉得太麻烦了,我这么懒的人是不会去计算坐标的

所以我想了个简单的方法。既然popup需要一个宿主,那么我们可以在界面的任意位置放置这个宿主,只不过不显示宿主。这样,POPUP的位置也可以说是任意了。

比如左下角。假设我们Window下面是一个Grid.那么我只要把宿主放到右下角,然后让POPUP 靠左显示就可以了

1     <Grid >
2 <Button x:Name="pophost" Height="100" Width="1" HorizontalAlignment="Right" Margin="0,0,0,0" VerticalAlignment="Bottom" > </Button>
3 <Popup IsOpen="True" StaysOpen="True" PlacementTarget ="{Binding ElementName=pophost}" Placement="Left" >
4 <TextBlock Background="AliceBlue" Height="100" Width="200">我是popup里的txtblock</TextBlock>
5 </Popup>
6 </Grid>

那么,我要多放一个额外的宿主是不是很麻烦那?是的,所以我们改进下代码,定义一个UserCrontrol,  名字就叫myPopup吧   里面放一个Popup,这样,你用的时候直接用myPopup就行了

 1 <UserControl x:Class="CsharpWpfManual.myPopup"
2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
4 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
5 xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
6 xmlns:local="clr-namespace:CsharpWpfManual"
7 mc:Ignorable="d" x:Name="popuphost"
8 Width="0.1" Height="100" >
9 <Popup x:Name="pp" PlacementTarget="{Binding ElementName=popuphost}" IsOpen="False" StaysOpen="True" Placement="Left" Opened="pp_Opened">
10 <TextBox x:Name="txt" Width="300" Height="100">你好,我来了</TextBox>
11 </Popup>
12 </UserControl>

这样我用的时候,代码就变成了这样

1     <Grid >
3 <local:myPopup Background="Red" x:Name="mypp" Width="0" Height="100" HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="0,0,0,0"/>
4 </Grid>

下面我们写一下myPopup 的cs代码。实现一些定时和显示消息的功能

 1 public partial class myPopup : UserControl
2 {
3 public myPopup()
4 {
5 InitializeComponent();
6 readDataTimer.Tick += new EventHandler(timeCycle);
7 readDataTimer.Interval = new TimeSpan(0, 0, 0, 5);
8 }
9
10 private static System.Windows.Threading.DispatcherTimer readDataTimer = new System.Windows.Threading.DispatcherTimer();
11 public void timeCycle(object sender, EventArgs e)
12 {
13 if (pp.IsOpen == true)
14 {
15 pp.IsOpen = false;
16 }
17 readDataTimer.IsEnabled = false;
18
19 }
20 /// <summary>
21 /// opend事件,打开后,启动定时器开始计时,先写死5秒把
22 /// </summary>
23 private void pp_Opened(object sender, EventArgs e)
24 {
25 readDataTimer.IsEnabled = true;
26
27 readDataTimer.Start();
28 }
29
30
31 public void ShowMessage(string message)
32 {
33 pp.IsOpen = true;
34 txt.Text = message;
35 }
36 }

至此,相信聪明的小伙伴们已经想到了如何把 提示框放在界面中央了, 也可以扩展一下在mypopup类中做个Content属性,这样就可以方式任何东西啦,我懒的做了,谁做好了记得分享啊

我也不多说了,上个源码给大伙看把

https://files.cnblogs.com/files/CSSZBB/WpfApp7.rar

-

WPF Popup 右下角提示框 定时消失 ,以及任意位置定位的更多相关文章

  1. Android检测WIFI连接、提示框延时消失

    Android检测系统WIFI是否连接?如没有连接,显示提示框,提示进行设置,当点击设置进入系统WIFI界面后1秒钟,提示框自动消失. 代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 ...

  2. winCE/Windows 应用程序消息提示框自动消失功能

    近期在做winCE系统的扫描枪应用程序,遇到了一些问题,其中包括消失提示框在手持终端显示过小, 用户要求提示框提示几秒后自动关闭,Windows平台可以通过调用系统API以定时器的方式进行自动销毁. ...

  3. 从service弹出系统级自定义提示框,可在任意页面弹出

    添加权限 <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> // 显示 ...

  4. [ios][swift]提示框,并自动消失

    参考: 提示框:http://blog.csdn.net/gishero/article/details/43941361 提示框自动消失:http://www.cnblogs.com/yemingl ...

  5. JS延时提示框

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 31.0px Consolas; color: #2b7ec3 } p.p2 { margin: 0.0px ...

  6. iOS:提示框(警告框)控件UIActionSheet的详解

    提示框(警告框)控件2:UIActionSheet 功能:当点击按钮或标签等时,弹出一个提示框,显示必要的提示,然后通过添加的按钮完成需要的功能.它与导航栏类似,它继承自UIView.   风格类型: ...

  7. iOS:提示框(警告框)控件UIAlertView的详解

    提示框(警告框)控件:UIAlertView   功能:当点击按钮或标签等时,弹出一个提示框,显示必要的提示,然后通过添加的按钮完成需要的功能.   类型:typedef NS_ENUM(NSInte ...

  8. 如何使用CSS创建巧妙的动画提示框

    当你的用户需要一些额外的上下文来放置图标,或者当他们需要一些保证来点击按钮,或者可能是一个复活节彩蛋的标题来搭配一个图片时,工具提示是一个很好的方法来增强用户界面.现在让我们来制作一些动画工具提示,只 ...

  9. 【 D3.js 高级系列 — 9.0 】 交互式提示框

    一般来说,图表中不宜存在过多文字.但是,有时需要一些文字来描述某些图形元素.那么,可以实现一种交互:当用户鼠标滑到某图形元素时,出现一个提示框,里面写有描述文字.这是一种简单.普遍的交互式,几乎适用于 ...

随机推荐

  1. [刘阳Java]_第一个Java程序_第7讲

    1. 其实第一个Java程序是很简单,但是当自己编写第一个Java程序时候需要注意如下几个内容: 理解Java程序的运行环境 校验你的Java环境变量是否能够运行你所写的第一个Java程序 理解Jav ...

  2. [刘阳Java]_CSS数字分页效果

    先给出效果图,见下图.下图主要的完成当鼠标放到分页数字的上会呈现一个变大的效果 实现思路: (1). 使用浮动属性,以便让li元素水平排列. (2).将a元素设置为块级元素,然后设置它们的尺寸. (3 ...

  3. MySQL中的redo log和undo log

    MySQL中的redo log和undo log MySQL日志系统中最重要的日志为重做日志redo log和归档日志bin log,后者为MySQL Server层的日志,前者为InnoDB存储引擎 ...

  4. PAT甲级:1089 Insert or Merge (25分)

    PAT甲级:1089 Insert or Merge (25分) 题干 According to Wikipedia: Insertion sort iterates, consuming one i ...

  5. Python urllib翻译笔记一

    22.5.urllib- URL处理模块urllib 是一个收集几个模块以处理URL的包: urllib.request 用于打开和阅读URL urllib.error 包含由urllib.reque ...

  6. Kafka流处理内幕详解

    1.概述 流处理是一种用来处理无穷数据集的数据处理引擎.通常无穷数据集具有以下几个特点: 无穷数据:持续产生的数据,它们通常会被称为流数据.例如:银行信用卡交易订单.股票交易就.游戏角色移动产生的数据 ...

  7. 记录一次HSDB的使用遇到的问题 No such type.

    univese Unrecognized command. Try help... hsdb> universe Heap Parameters: Gen 0: eden [0x00000000 ...

  8. thinkphp5 原生sql带分页方法

    1.先在顶部引入use think\paginator\driver\Page; 2.使用下例代码 $pageNumber = input('page')? input('page'):'0';//客 ...

  9. C++动态内存管理与源码剖析

    引言 在本篇文章中,我们主要剖析c++中的动态内存管理,包括malloc.new expression.operator new.array new和allocator内存分配方法以及对应的内存释放方 ...

  10. HCNA Routing&Switching之VLAN间路由

    前文我们了解了二层交换技术vlan相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15091491.html:今天我们来聊一聊不同VLAN间通信相关话题 ...