WPF--TextBlock的ToolTip附加属性

大家可能在项目中,有的时候,由于显示的内容过长,所以,需要显示一部分内容,然后后面用省略号,把鼠标放上去,会显示出来全部的内容。

作为一个LowB程序员的我,第一反应是SubString截取,然后替换,然后ToolTip显示原有的内容。

我相信很大一部分的初级程序员第一想法也是这个,然而,这种方法不具有一个通用型,当然,有的童鞋可能说,写个函数,然后设置传递的参数,这样不就可以了吗?

事实上,这样也是很不方便的。

本文的重点来了:

昨天在项目里发现了同事写的一个很棒的附加属性,今天把它共享出来,供大家学习。

在此,先感谢那位同事,虽然不知道谁写的(没有备注),但是真的很棒。

代码不难,但是效果确实不错,先看下效果。

由于是一个可变的长度,所以,不是用传统的一个截取的方法,而是根据TextBlock外部的宽度,自动实现的截取效果,而且感觉系统的这种,还挺有意思。

可以看到第一行,前面是文字,后面是数字“我是测试长度1111111111111111111111111”,直接从数字部分往后,都用了省略号,而不是必须到了最外层的边缘才进行的截取。

第二行,由于后面是文字,到了最外层的宽度,才用省略号进行了替换。

代码如下:

public class TextBlockToolTip{public static bool GetAutoTooltip(DependencyObject obj){return (bool)obj.GetValue(AutoTooltipProperty);}public static void SetAutoTooltip(DependencyObject obj, bool value){obj.SetValue(AutoTooltipProperty, value);}// Using a DependencyProperty as the backing store for AutoTooltip.  This enables animation, styling, binding, etc...public static readonly DependencyProperty AutoTooltipProperty =DependencyProperty.RegisterAttached("AutoTooltip", typeof(bool), typeof(TextBlockToolTip), new PropertyMetadata(false,OnAutoTooltipPropertyChanged));private static void OnAutoTooltipPropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e){TextBlock textBlock = d as TextBlock;if (textBlock == null)return;if (e.NewValue.Equals(true)){textBlock.TextTrimming = TextTrimming.WordEllipsis;ComputeAutoTooltip(textBlock);textBlock.SizeChanged += TextBlock_SizeChanged;}else{textBlock.SizeChanged -= TextBlock_SizeChanged;}}private static void TextBlock_SizeChanged(object sender, SizeChangedEventArgs e){TextBlock textBlock = sender as TextBlock;ComputeAutoTooltip(textBlock);}private static void ComputeAutoTooltip(TextBlock textBlock){textBlock.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));var width = textBlock.DesiredSize.Width;if (textBlock.ActualWidth<width){ToolTipService.SetToolTip(textBlock, textBlock.Text);}else{ToolTipService.SetToolTip(textBlock, null);}}}

测试代码如下:

就是把附加属性AutoToolTip设置为True就可以了。

希望这个附加属性可以对你们有所帮助。

 

转载于:https://www.cnblogs.com/ZXdeveloper/p/7283647.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/428983.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

L2-001 紧急救援 (25 分)

L2-001 紧急救援 (25 分)作为一个城市的应急救援队伍的负责人&#xff0c;你有一张特殊的全国地图。在地图上显示有多个分散的城市和一些连接城市的快速道路。每个城市的救援队数量和每一条连接两个城市的快速道路长度都标在地图上。当其他城市有紧急求助电话给你的时候&#x…

oracle 虚拟补丁,趋势科技虚拟补丁(Virtual Patch)

本帖最后由 vger520 于 2012-4-26 09:20 编辑预先防止漏洞遭到攻击Virtual Patch(虚拟补丁)实际案例微软最近紧急通知系统管理员立即安装一个影响所有 Windows 系统的重大安全更新&#xff1a;「MS12-020远程桌面的漏洞可能会允许远端执行程序码」。而趋势科技的客户在该漏洞发…

Laravel框架一:原理机制篇

转载自http://www.cnblogs.com/XiongMaoMengNan/p/6644892.htmlLaravel作为在国内国外都颇为流行的PHP框架&#xff0c;风格优雅&#xff0c;其拥有自己的一些特点。 一. 请求周期 Laravel 采用了单一入口模式&#xff0c;应用的所有请求入口都是 public/index.php 文件。 注册…

L2-002 链表去重 (25 分) 船新方法

L2-002 链表去重 (25 分)给定一个带整数键值的链表 L&#xff0c;你需要把其中绝对值重复的键值结点删掉。即对每个键值 K&#xff0c;只有第一个绝对值等于 K 的结点被保留。同时&#xff0c;所有被删除的结点须被保存在另一个链表上。例如给定 L 为 21→-15→-15→-7→15&…

oracle中间键配置,Oracle Exalogic中间件云服务器简介及产品配置特点(2)

Oracle Exalogic中间件云服务器 —— 软硬件结合的优化平台目前&#xff0c;企业所面临的应用挑战大多集中在异构环境、复杂的多层应用以及现有环境的低利用率等。于是&#xff0c;企业开始根据实际业务需求和投资情况将系统进行整合设计&#xff0c;旨在精简架构以提高系统的灵…

System

类&#xff1a; System.TimeDate 关于时间的类转载于:https://www.cnblogs.com/Sea1ee/p/7285238.html

L2-003 月饼 (25 分)

L2-003 月饼 (25 分)月饼是中国人在中秋佳节时吃的一种传统食品&#xff0c;不同地区有许多不同风味的月饼。现给定所有种类月饼的库存量、总售价、以及市场的最大需求量&#xff0c;请你计算可以获得的最大收益是多少。 注意&#xff1a;销售时允许取出一部分库存。样例给出的…

Oracle删除pk+cascade,Oracle删除表

在本教程中&#xff0c;将学习如何使用Oracle DROP TABLE语句删除现有的表。Oracle DROP TABLE语句简介要将表移动到回收站或将其从数据库中完全删除&#xff0c;请使用DROP TABLE语句&#xff1a;DROP TABLE schema_name.table_name [CASCADE CONSTRAINTS | PURGE];在这个语句…

L2-005 集合相似度 (25 分)

L2-005 集合相似度 (25 分) 给定两个整数集合&#xff0c;它们的相似度定义为&#xff1a;N ​c ​​ /N ​t ​​ 100%。其中N ​c ​​ 是两个集合都有的不相等整数的个数&#xff0c;N ​t ​​ 是两个集合一共有的不相等整数的个数。你的任务就是计算任意一对给定集合的相似…

oracle有sysdata,Oracle基础

1、默认事例&#xff1a;用户名&#xff1a;scott密码&#xff1a;tiger 主机字符串&#xff1a;本机可以为空2、启动方法&#xff1a;运行&#xff1a;sqlplusscott/tigerlhd3、SQLPLUS基本命令&#xff1a;Desc&#xff1a;显示表、视图结构 desc 表名&#xff0c;视图List&…

selenium+java初级学习笔记之单个元素定位

元素定位可以大概分为八重一般情况下常用的就是by.id、by.name、by.classname&#xff0c;如果需要定位的元素中没有这几个可以选择其他方式的定位&#xff1a;By.id(id) //&#xff08;有时元素中id是会变化的&#xff0c;可以刷新页面&#xff0c;如果发现每次的id都不一样则…

L2-004 这是二叉搜索树吗? (25 分)

L2-004 这是二叉搜索树吗&#xff1f; (25 分) 一棵二叉搜索树可被递归地定义为具有下列性质的二叉树&#xff1a;对于任一结点&#xff0c; 其左子树中所有结点的键值小于该结点的键值&#xff1b; 其右子树中所有结点的键值大于等于该结点的键值&#xff1b; 其左右子树都是…

Linux高频命令汇总,Linux高频命令

8种机械键盘轴体对比本人程序员&#xff0c;要买一个写代码的键盘&#xff0c;请问红轴和茶轴怎么选&#xff1f;findfind path [options] params作用&#xff1a;在指定目录下查找文件1234find / -name "target.java" #在根目录下查找target.java文件find -name &qu…

深入理解javascript函数参数

arguments javascript对参数要求很随意&#xff0c;她才不管你传进来的参数是什么数据类型&#xff0c;甚至可以不传参数。实际上&#xff0c;javascript函数调用甚至不检查传入形参的个数。 1 function add(x){ 2 return x 1; 3 } 4 console.log(add(1))…

linux系统时间函数,Linux时间时区详解与常用时间函数

时间与时区整个地球分为二十四时区&#xff0c;每个时区都有自己的本地时间。UTC时间 与 GMT时间我们可以认为格林威治时间就是时间协调时间(GMT UTC)&#xff0c;格林威治时间和UTC时间都用秒数来计算的。UTC时间与本地时间UTC 时区差 本地时间时区差东为正&#xff0c;西为…

7-5 汉诺塔的非递归实现 (25 分)

7-5 汉诺塔的非递归实现 (25 分) 借助堆栈以非递归&#xff08;循环&#xff09;方式求解汉诺塔的问题&#xff08;n, a, b, c&#xff09;&#xff0c;即将N个盘子从起始柱&#xff08;标记为“a”&#xff09;通过借助柱&#xff08;标记为“b”&#xff09;移动到目标柱&…

js 异步问题

如果发现前端的异步请求&#xff0c;network有发送成功而且有返回值&#xff0c;但是没有进前端的callback成功回掉函数内&#xff0c;这时候就需要检查是不是配置文件做了语法限制&#xff0c;只能返回某些数据格式&#xff0c;不能返回某些数据格式。 一般限制最多的就是后端…

海康、大华IPC的rtsp格式

海康&#xff1a;  rtsp://[username]:[password][ip]:[port]/[codec]/[channel]/[subtype]/av_stream说明&#xff1a;username: 用户名。例如admin。password: 密码。例如12345。ip: 为设备IP。例如 192.0.0.64。port: 端口号默认为554&#xff0c;若为默认可不填写。codec…

linux awr 日志,Linux平台生成awr报告

1&#xff0e;使用Oracle用户登录应用服务器所使用的数据库所在的服务器# su –oracle2&#xff0e;输入env命令&#xff0c;查询出ORACLE_HOME 目录3&#xff0e;然后进入$ORACLE_HOME/rdbms/admin目录&#xff0c;查询awr语句(此步骤可以忽略)此处可以直接省略2&#xff0c;3…

利用一维数组输出杨辉三角

直接上代码&#xff1a; package hello;import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in new Scanner(System.in);int n in.nextInt();int table [] new int [n1];table[0] 1;for (int i1;i<n;i) {for (int j0;j<…