C#-ToolTIp和Popup简单使用

简介: 很多时候我们需要做一个提示框,来给用户说明这个元素的作用,比如鼠标移动到哪个元素上面,显示一个弹出框并显示这个元素的相关介绍,想到提示内容,我们很容易想到toolip和Popup,接下来就来分别是用一下这两个控件。

很多时候我们需要做一个提示框,来给用户说明这个元素的作用,比如鼠标移动到哪个元素上面,显示一个弹出框并显示这个元素的相关介绍,想到提示内容,我们很容易想到toolip和Popup,接下来就来分别是用一下这两个控件。

ToolTip

首先,新建一个wpf项目,然后我们在主窗口里面放入一个button,设置这个button的tooltip值,即是需要提示的内容,这个实现起来很简单吧。

<Windowx:Class="PopupTest.MainWindow"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:PopupTest"mc:Ignorable="d"Title="MainWindow"Height="450"Width="800"><Grid><ButtonContent="ToolTip"HorizontalAlignment="Left"Height="31"Margin="39,32,0,0"VerticalAlignment="Top"Width="131"ToolTip="这是一个button"></Button></Grid></Window>

接下来,我们需要往提示里面加点内容,比如标题啥的,你可以使用xaml对象来实现。

<Windowx:Class="PopupTest.MainWindow"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:PopupTest"mc:Ignorable="d"Title="MainWindow"Height="450"Width="800"><Grid><ButtonContent="ToolTip"HorizontalAlignment="Left"Height="31"Margin="39,32,0,0"VerticalAlignment="Top"Width="131"><Button.ToolTip><ToolTip><StackPanel><TextBlock>标题</TextBlock><TextBlock>这是一个button</TextBlock></StackPanel></ToolTip></Button.ToolTip></Button></Grid></Window>

当你把鼠标放到按钮上的时候会出现提示框,过5s之后,提示就会消失了,如果想要改变显示的时间又该怎么办呢?那么就要用到ToolTipService属性了,这里有三个属性需要了解下: InitialShowDelay鼠标移动上去到显示提示框出现之间的时间,BetweenShowDelay当第二个工具提示在没有延迟的情况下显示时,两个工具提示的显示之间的最大时间,ShowDuration工具提示保持可见的时间。

<Windowx:Class="PopupTest.MainWindow"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:PopupTest"mc:Ignorable="d"Title="MainWindow"Height="450"Width="800"><Grid><ButtonContent="ToolTip"HorizontalAlignment="Left"Height="31"Margin="39,32,0,0"VerticalAlignment="Top"Width="131"ToolTipService.InitialShowDelay="1000"ToolTipService.ShowDuration="3000"ToolTipService.BetweenShowDelay="2000"><Button.ToolTip><ToolTip><StackPanel><TextBlock>标题</TextBlock><TextBlock>这是一个button</TextBlock></StackPanel></ToolTip></Button.ToolTip></Button></Grid></Window>

你也可以采用Popup这个控件来做一个提示框的效果。什么是Popup控件?简单的来说就是弹出窗口,MSDN的解释是Popup控件通过当前的应用程序窗口相对于指定的元素或屏幕坐标浮动的单独窗口中显示内容。

<ButtonHeight="31"Margin="206,32,456.333,0"VerticalAlignment="Top"Width="131"><StackPanel><Popup><TextBlock>这是一个button</TextBlock></Popup></StackPanel></Button>

Popup不会像ToolTip一样自动弹出来,如果要显示需要设置Isopen="true",上面的这种写法有个问题,这个button的内容相当于已经设置为Popup如果你要在button里面加上文字可以这样改写。将Popup拿到button外面,设置PlacementTarget属性,作用于你需要的控件上。

<ButtonName="btnpopup"Height="31"Margin="206,32,456.333,0"VerticalAlignment="Top"Width="131"></Button><PopupIsOpen="True"PlacementTarget="{Binding ElementName=btnpopup}"><TextBlockBackground="#FFFCFBFB">这是一个button</TextBlock></Popup>

这样我们运行的时候这个弹出框就会一直显示在那里,很显然不是我们想要的效果,我们需要的是鼠标移动到按钮上就显示提示,鼠标离开之后提示框消失,这就需要增加两个鼠标事件了,MouseEnter以及MouseLeave事件。

<ButtonName="btnpopup"Height="31"Margin="206,32,456.333,0"VerticalAlignment="Top"Width="131"MouseEnter="btnpopup_MouseEnter"MouseLeave="btnpopup_MouseLeave"></Button><PopupName="popupname"PlacementTarget="{Binding ElementName=btnpopup}"><TextBlockBackground="#FFFCFBFB">这是一个button</TextBlock></Popup>privatevoidbtnpopup_MouseEnter(objectsender, MouseEventArgse){
popupname.IsOpen=true;
}privatevoidbtnpopup_MouseLeave(objectsender, MouseEventArgse){
popupname.IsOpen=false;
}

这个时候就有点我们想要的效果了,运行我们发现这个弹出框显示在按钮的下方了,我们想要改变一下它的位置,让它显示到右边去,这个时候要设置方位的属性了,Placement=right,placement有好几个值,各代表着不同位置设置,有兴趣的查看一下官方文档。

<PopupName="popupname"PlacementTarget="{Binding ElementName=btnpopup}"Placement="Right"><TextBlockBackground="#FFFCFBFB">这是一个button</TextBlock></Popup>

好了,这两个控件我们先简单的介绍这么多,可以查看下面的参考资料进行详细了解,下次我们实现这样一个功能吧,如果实现将鼠标移动到list的某一项时,显示list这一项的内容?同样的用这两种方式实现。

参考资料

ToolTip概述

https://docs.microsoft.com/zh-cn/dotnet/framework/wpf/controls/how-to-position-a-tooltip

Popup概述

https://docs.microsoft.com/zh-cn/dotnet/framework/wpf/controls/popup-overview

目录
相关文章
|
机器学习/深度学习 人工智能 数据可视化
生成AI的两大范式:扩散模型与Flow Matching的理论基础与技术比较
本文系统对比了扩散模型与Flow Matching两种生成模型技术。扩散模型通过逐步添加噪声再逆转过程生成数据,类比为沙堡的侵蚀与重建;Flow Matching构建分布间连续路径的速度场,如同矢量导航系统。两者在数学原理、训练动态及应用上各有优劣:扩散模型适合复杂数据,Flow Matching采样效率更高。文章结合实例解析两者的差异与联系,并探讨其在图像、音频等领域的实际应用,为生成建模提供了全面视角。
3861 1
生成AI的两大范式:扩散模型与Flow Matching的理论基础与技术比较
|
10月前
|
JSON 前端开发 文件存储
开源项目,全网音乐免费听,太牛逼啦,XiaoMusic 无限点歌机~~~~
XiaoMusic 是一款开源的小爱音箱音乐增强工具,支持全网音乐免费听。通过 NAS 或电脑部署,结合 yt-dlp 下载与本地音乐管理,实现语音点歌、搜索播放、多设备控制,让小爱变身家庭音乐中枢。
3598 2
|
Ubuntu Linux 开发工具
Ubuntu操作系统:从桌面到服务的全能之选
选择Ubuntu,带有Linux 5.4.0-84-generic(恢复模式)的选项,并按下回车键。这将带您进入一个新界面,再次按下回车键以继续。请注意,不同版本可能显示的内容有所不同。
|
数据采集 监控 大数据
大数据中的ETL过程详解
【8月更文挑战第25天】ETL过程在大数据中扮演着至关重要的角色。通过合理设计和优化ETL过程,企业可以高效地整合和利用海量数据资源,为数据分析和决策提供坚实的基础。同时,随着技术的不断进步和发展,ETL过程也将不断演进和创新,以更好地满足企业的数据需求。
1463 3
|
存储 传感器 监控
工业相机如何实现实时和本地Raw格式图像和Bitmap格式图像的保存和相互转换(C#代码,UI界面版)
工业相机如何实现实时和本地Raw格式图像和Bitmap格式图像的保存和相互转换(C#代码,UI界面版)
1256 0
|
存储 监控 数据管理
Lua代码解析:实现上网行为监管软件的自定义规则引擎
在当今数字化时代,网络安全和数据隐私保护备受关注。为了确保网络安全和合规性,许多组织和机构需要监管和管理其员工或用户的上网行为。为了实现这一目标,开发一款高效的上网行为监管软件至关重要。本文将介绍如何使用Lua语言开发一种自定义规则引擎,以实现上网行为监管软件的自定义规则引擎。
555 0
|
Java Linux 数据安全/隐私保护
Linux下监听或绑定(bind)843端口失败
问题:写了一个程序,尝试在843端口监听,结果在执行bind的时候失败了   原来,系统不允许用户程序在1-1024端口监听,因为他们是知名端口。解决办法:   换成root用户,即可成功bind。
|
Linux
Linux 下压缩与解压.zip和.rar及.7z文件
对于Window下的常见压缩文件.zip和.rar,Linux也有相应的方法来解压它们: 1)对于.zip linux下提供了zip和unzip程序,zip是压缩程序,unzip是解压程序。它们的参数选项很多,可用命令zip -help和unzip -help查看,这里只做简单介绍,举例说明一下其用法: # zip yajiu.zip yajiu.jpg yajiu.png 这
3158 0
|
Oracle 关系型数据库 数据库
oracle 小议如何从表空间 删除 数据文件
Oracle不提供如删除表。 视图一样删除数据文件的方法,数据文件是表空间的一部分,所以不能“移走”表空间。 在对表空间/数据文件进行任何脱机、删除之前,首先对数据库进行一个全备份。
1753 0