[WPF]根据显示区域宽度裁剪字符串
WinForm中提供了Graphics.MeasureString,通过Reflector能看到MeasureString最终也是通过调用gdiplus.dll来完成的:
internal static extern int GdipMeasureString(HandleRef graphics, string textString, int length, HandleRef font, ref GPRECTF layoutRect, HandleRef stringFormat, [In, Out] ref GPRECTF boundingBox, out int codepointsFitted, out int linesFilled);
但WPF中既没有HDC,也没有Graphics,只有一个DrawingContext.显然想用API来搞定是不可能的了。
不过还好WPF中很多涉及字符显示的控件,像TextBlock、FormattedText都提供了Trimming属性,只需要将Trimming属性,设置为:Trimming.CharacterEllipsis或Trimming.WordEllipsis,就可以实现自动根据最大可显示宽度裁剪你的字符串并附加上"..."。
有些人估计看到这儿估计想骂我了:“大哥,你啰啰嗦嗦扯了这么多,不会就是想告诉我们WPF中TextBlock等控件具有自动裁剪功能吧”.
好吧,要不是因为TextBlock并不能完成我的需求,估计只能写到这了。
我的字符串:"xxxxxxxxxxx(123)",我希望的裁剪效果是:"xxxxx...(123)",而TextBlock只能整成这个样子:"xxxxxxxx..."。
不过既然TextBlock实现了裁剪的功能,咱们又有强大的Reflector,那接下来的任务是不是很简单了。
事实告诉我,一点也不简单,靠, MS 那帮龟孙子们写的代码可读性太差了。云里雾里最后终于找到一个叫"GlyphRun”的类,查MSDN:
Represents a sequence of glyphs from a single face of a single font at a single size, and with a single rendering style.
而且还给配了一副很牛X的图:
感觉离目标不远了,接着就发现了GlyphTypeface 类,GlyphTypeface提供了两个集合属性:
CharacterToGlyphMap,获取某个字符在“font CMAP table” 中对应的glyph索引
AdvanceWidths,根据glyph索引,获取某个字符的轮廓(glyph)宽度,实际宽度还要乘以字符大小。
原来每个字符的轮廓宽度早在“font CMAP table"约定好了,至于"font CMAP table”是什么,感兴趣的朋友自己去Google吧
demo源码下载地址:http://files.cnblogs.com/gboxcc/wpf_trim_string.zip
转载于:https://www.cnblogs.com/gboxcc/archive/2009/02/06/wpf_string_trim_glyphtypeface.html
[WPF]根据显示区域宽度裁剪字符串相关推荐
- html自动裁剪图片宽度,html - CSS显示调整大小和裁剪的图像
html - CSS显示调整大小和裁剪的图像 我想显示具有一定宽度和高度的URL中的图像,即使它具有不同的大小比例.所以我想调整大小(保持比例),然后将图像剪切到我想要的大小. 我可以用html ba ...
- 【物联网智能网关-08】TinyGUI和WPF汉字显示技术比较
TinyGUI是我在2010上半年的时候,基于.NET Micro Framework系统开发的一个轻量级图形库,虽然TinyGUI运行需要的资源少,运行快,但是不支持汉字显示(如需显示汉字还是必须借 ...
- html 背景区域设置,HTML5 背景的显示区域实现
background-clip 属性规定背景的绘制区域. 默认值: border-box 继承性: no 版本: css3 javascript 语法: object.style.backgr ...
- 《Photoshop Lightroom4 经典教程》—第2课2.5节使用主显示区域
本节书摘来自异步社区<Photoshop Lightroom4 经典教程>一书中的第2课2.5节使用主显示区域,作者[美]Adobe公司,更多章节内容可以访问云栖社区"异步社区& ...
- uniapp开发微信小程序,多行文本换行,动态改变文字区域宽度
需求:商品标题部分超出两行显示- 且当点击编辑显示选择按钮后,文字区域宽度变小后,文字不能溢出. 如图: HTML代码 <!-- 收藏 --> <view class="g ...
- typora修改主题字体、代码块字体、行内块代码字体大小、引用块字体大小、代码块背景颜色、文章可写区域宽度以及修改教程
目录 0. 授人以渔 1.主题字体 2.代码块字体大小 3.引用块字体大小 4.代码块背景颜色 ①pink老师的样式代码 ②自己搜到的样式 5.块代码字体大小 6.修改文章可写区域的宽度 0. 授人以 ...
- 两步轻松搞定 编辑器上传图片尺寸过大 超出前台显示区域问题!
用户在编辑器中随意上传图片,难免会遇到图片宽度超出前台显示区域,严重影响页面展示美观度.... 两步搞定方法: 1.书写在内容显示区域DIV中控制img标签最大宽度. 2.js清除用户设定宽度. 问题 ...
- wpf 字体模糊_WPF:解决WPF文字显示不清晰初探
可能WPF太耀眼了,大家都一直在讨论它的光芒,我也是其中的一员. 当发现它给软件界面设计带来的革命性变化时,说服同事,在新项目中使用了WPF这一新技术. 无奈,项目快结束时,头头验收时说字体模糊,不能 ...
- uniapp图片自适应显示,不裁剪
先看图: 这是长图和方图的显示效果,都可以完全显示出来 上代码: html部分: <view class="question-title" style="width ...
最新文章
- hadoop作业初始化过程详解(源码分析第三篇)
- byte与char区别
- redis启动异常处理一例
- 设计模式学习(二): 观察者模式 (C#)
- c位边上还有什么位_c位是什么意思?明星站c位旁边是什么位?有什么含义【图】...
- Bootstrap3 模态对话框的事件
- Atiitt 技术部的基本发展战略 attilax总结 艾龙 著 1. 战略的解释,即是 大概纲领与方法	1 2. 技术的基本战略是,培训,吸收与改造,recos,预研,技术储备	1 2.1.
- Jmeter教程(图文版)
- VC打印机使用 win95环境的下例子测试
- WizTree v4.03 最快的磁盘空间分析工具中文便携版
- python实现 stft_Python中的可逆STFT和ISTFT
- 电脑弹窗广告太多了,程序员电脑为什么没有弹窗,那是你没打开这个设置
- 关于程序员的那些段子,你能看懂几个?
- Mac环境下安装hadoop
- HC-02蓝牙串口模块的配置和使用
- 想要通过炒币财富自由?先看看这篇文章吧!
- OpenGL进阶(十九) - 多光源
- 2022.01.19 - SX10-23.零钱兑换
- 餐饮SaaS行进时:美团To B,二维火To C
- Oracle建表不设主键,oracle建表,设置主键,修改属性等