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,一经查实,立即删除!

相关文章

Laravel框架一:原理机制篇

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

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

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

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

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

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…

HDU 1159 Common Subsequence 动态规划

2017-08-06 15:41:04 writer&#xff1a;pprp 刚开始学dp&#xff0c;集训的讲的很难&#xff0c;但是还是得自己看&#xff0c;从简单到难&#xff0c;慢慢来&#xff08;如果哪里有错误欢迎各位大佬指正&#xff09; 题意如下&#xff1a; 给两个字符串&#xff0c;找到其中大…

【Xmail】使用Xmail搭建局域网邮件服务器

下载地址&#xff1a; http://www.xmailserver.org/xmail-1.27.win32bin.zip&#xff0c;当前最新版本 1.27。 解压文件&#xff1a;xmail-1.27.win32bin.zip 1、把其中的 MailRoot 目录拷贝到 C:\&#xff1b; 2、把 C:\xmail-1.27.win32bin\xmail-1.27 目录下的所有文件&am…

uploadify 配置后,页面显示无效果

uploadify使用的是Flash版本 谷歌浏览器&#xff1a;默认没有开启Flash&#xff0c;进行如下图设置即可 转载于:https://www.cnblogs.com/daryl/p/7299471.html

Day39:threading模块、ThreadLocal

一、threading模块 1、线程对象的创建 1.1 Thread类直接创建 import threading import timedef countNum(n): # 定义某个线程要运行的函数print("running on number:%s" %n)time.sleep(3)if __name__ __main__:t1 threading.Thread(targetcountNum,args(23,)) #生成…

linux h5 动画软件下载,技术|7款绚丽的jQuery/HTML5动画及源码

jQuery是一款非常流行的JavaScript框架&#xff0c;利用jQuery&#xff0c;我们可以制作简单的动画效果&#xff0c;但是结合HTML5&#xff0c;这样的动画效果就会变得更加出彩。本文分享了7款jQuery结合HTML5的动画以及源码下载。1、HTML5/SVG实现布谷鸟时钟动画这是一款非常有…

时钟抖动对高速ADC采样系统的影响

在高速数据采样中&#xff0c;ADC时钟信号的稳定性对其性能有至关重要的影响&#xff0c;因为这些抖动会破坏高速ADC的时序。 孔径的定义 孔径时间ta&#xff0c;是指从采样时钟跳变开始&#xff0c;一直到保持电压建立。换言之&#xff0c;孔径是指采样保持电路中开关切换的时…

python - hadoop,mapreduce demo

Hadoop,mapreduce 介绍 59888745qq.com 大数据工程师是在Linux系统下搭建Hadoop生态系统&#xff08;cloudera是最大的输出者类似于Linux的红帽&#xff09;&#xff0c; 把用户的交易或行为信息通过HDFS&#xff08;分布式文件系统&#xff09;等存储用户数据文件&#xff0c;…

Vue父子组件间的通信

父组件通过 props 向下传递数据给子组件&#xff0c;子组件通过 events 向上给父组件发送消息。 父组件&#xff1a; <div><div style"background:#34495E;color: #fff; padding:20px"><p style"margin-bottom: 20px">这是父组件</p&…

1009 Product of Polynomials (25 分)

1009 Product of Polynomials (25 分) 这题目要卡的话只能卡第一个吧&#xff0c;考虑零项之后&#xff0c;这道题就简单了。 #include<iostream> #include<set> #include<vector> #include<iomanip> using namespace std; int main() {double cun1[1…

c语言pwm调制方式,pwm调制原理同步调制_几种pwm调制方式介绍 - 全文

PWM简介脉冲宽度调制是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术&#xff0c;广泛应用在从测量、通信到功率控制与变换的许多领域中。脉冲宽度调制是一种模拟控制方式&#xff0c;其根据相应载荷的变化来调制晶体管基极或MOS管栅极的偏置&#xff0c;来…

c语言如何用循环语句一个字一个字的输出,怎样用c语言的for嵌套循环,用·画出泳字,求解,主要是怎样用循环语句打出,在某一行中既有空格又有·...

暗域天堂#include #include #include #include #include using namespace std;int get_character(unsigned char* pc1, unsigned char* pc2){unsigned char buf[100];cin >> buf;*pc1 buf[0];*pc2 buf[1];if (*pc1 {return -2;}if (*pc2 {return -2;}return 0;}void lo…

c语言赋值运算符左边必须是,C语言运算符入门讲解

概述C 语言运算符分为算术、关系、逻辑、赋值、逗号和 sizeof 5 大类。表达式&#xff1a;在 C/C 中&#xff0c;用运算符将操作对象连接起来就构成了表达式。表达式是用于计算的式子&#xff0c;是计算求值的基本单位。操作对象&#xff1a;又称操作数&#xff0c;操作数可以为…

MSYS2使用教程

一、安装 官方下载地址 http://www.msys2.org/ 指定好安装路径&#xff08;一般D根目录即可&#xff09;&#xff0c;一路下一步就好。 二、配置国内镜像、设置窗体修改颜色 使用[清华大学开源软件镜像站]中的地址&#xff0c;修改\etc\pacman.d目录下的三个文件。 配置教程 ht…

[原创]浅谈移动互联网App兼容性测试

[原创]浅谈移动互联网App兼容性测试 今天要谈的话题&#xff0c;估计各位测试都有感受&#xff0c;移动互联网App兼容性测试&#xff0c;我们到底测试覆盖如何去挑选机型&#xff1f;具体移动App兼容性测试如何开展&#xff1f;是不是应引进像testin这样的第三方来检查覆盖?可…

高仿人人android梦想版终极源码发送,人人Android客户端梦想版发布

人人网梦想版for Android 5.0.1下载(人人网Android客户端)人人网今天发布Android客户端“梦想版”&#xff0c;新版更新的“私信”功能与微信等聊天工具同出一辙&#xff0c;还可以发送语音和大幅表情。其他界面也进行了大幅更新。以下为人人网官方介绍&#xff1a;打开这篇日志…

android 平板方案,Android平板方案

一、英伟达(NVIDIA) Tegra 2NVIDIA Tegra 2处理器&#xff0c;采用40nm制程制造&#xff0c;集成8个不同功能的处理器&#xff0c;主要包括&#xff1a;两个ARMCortex-A9核心&#xff0c;运行频率1GHz。另外有一个ARM7处理器&#xff0c;一个音频处理器(AudioProcessor)&#x…