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这个控件来做一个提示框的效果。什么是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

目录
打赏
0
0
0
0
3
分享
相关文章
探索MySQL递归查询,优雅的给树结构分页!
总结起来,对于MySQL中的树结构数据,递归查询结合预排序遍历树算法可以实现优雅的分页,但需要注意性能优化和数据更新的问题。这项技术提供了一种高效处理层级数据的工具,使得开发者可以在复杂的数据结构下实现直观和可靠的数据查询。
650 1
实时计算 Flink版产品使用问题之如何查看当前消费的binlog位置
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
Java 远程控制全实现:高效解决远程控制场景,附代码示例
Java 远程控制全实现:高效解决远程控制场景,附代码示例
729 0
Kubernetes(K8s)与虚拟GPU(vGPU)协同:实现GPU资源的高效管理与利用
本文探讨了如何使用Kubernetes和虚拟GPU(vGPU)实现异构GPU的协同调度。Kubernetes是一个容器编排平台,通过设备插件、资源规格、调度器扩展和节点标签实现GPU资源管理。vGPU技术允许物理GPU资源在多个虚拟机或容器中共享。文章详细介绍了vGPU的部署配置步骤,并提出了GPU资源调度、负载均衡和监控调优的方法。强调虚拟GPU的性能取决于硬件和驱动支持,合理配置能提供高性能计算环境。参考文献包括Kubernetes和NVIDIA官方文档及相关研究论文。
深入理解MySQL中varchar和text的区别
在MySQL中,varchar和text都是用于存储文本数据的数据类型。varchar是可变长度字符串,存储时按实际长度分配空间,适合存储较短的、长度可变的字符串,如用户名。text类型用于存储大量文本,始终占用足够空间,适合文章内容。varchar在存储和查询时可能更快,可被索引,而text需特殊搜索技术。在数据库设计时,应根据存储需求和性能平衡选择。
1490 0
宜搭无代码实现物料数字仓库和自动采购系统展示
物料库存台账是企业数字化的一个核心需求,市面上常见的各种进销存和金蝶用友财务管理软件皆是围绕着仓库货物的销售、采购、入库、出库等物料流转流程设计的。但大部分软件依靠人工去计算库存空余和采购需求数量的计算,然后在将进出数据手工录入系统,进销存软件仅仅体现出一个数字记账功能。就是一个流水账!
666 1
宜搭无代码实现物料数字仓库和自动采购系统展示
基于SSM的电影院购票系统的设计与实现
大家好,今天给大家带来一款SSM的电影院售票系统,非常不错的一个项目,学习​javaweb编程必备。
222 0
【视频】Dataphin资源治理视频手册
在 每年节约数亿元大数据成本,阿里巴巴数据中台成本治理怎么做的 这篇文章中,我们详细介绍了在大数据环境下,如何通过系统化的治理方式,来进行资源的优化,从而节约大数据建设的成本,提高大数据建设的ROI。本文我们来看下,如何使用Dataphin对系统的存储和计算资源进行优化。
【视频】Dataphin资源治理视频手册
Nacos简介及使用
一、前言     Nacos是阿里巴巴最新开源的项目,核心定位是“一个更易于帮助构建云原生应用的动态服务发现、配置和服务管理平台”,项目地址:https://nacos.io/zh-cn/     Nacos核心提供两个功能:服务注册与发现,动态配置管理。     1、服务注册与发现   &n
27435 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等