【原译】自动省略功能的WPF文本框控件
免责申明(必读!):本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播。同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该翻译稿之人无任何关系。谢谢合作!
原文链接地址:http://www.codeproject.com/KB/WPF/TextBoxWithEllipsis.aspx
介绍
WPF文本框控件类,不像TextBlock,他没有内置的选项,以便当文本内容超过可视区域的时候,显示省略号,我想让我正在做的一个项目能够拥有这个特性,可是,我在网上找不到一个比较简单的方法实现他,于是啊,我决定自己写个TextBox的继承类,必要的时候能够显示省略,我把这个类命名为TextBoxWithEllipsis.
TextBoxWithEllipsis属性列表
既然TextBoxWithEllipsis继承自TextBox,那么他就有了TextBox的所有属性,当然还得有一些其他的属性,我自己呢,只需要很简单的几个属性,所以就不多加其他的属性了。
LongText |
保存原始的没有截短的文本,而Text属性则自动设置成他的截断版本,以省略号结尾,你也可以把这两个属性保存的内容互换, 随意。这里,当我读取Text属性的时候,我得到已经截短了的版本,而LongText则得到没有截断的版本。 |
IsEllipsisEnabled |
一个布尔值,使得省略这个功能启用或者关闭,当启用的时候,一个省略号(unicode编码是0x2026)将会显示在截断了 的LongText后面,其他的,和正常的TextBox控件无异。 |
UseLongTextForToolTip |
这个bool属性为true的时候,当把鼠标放到截断了的文本框上面时,会通过tooltip的方式显示完整的文本内容。 |
示例程序
示例程序是一个vs2010 c# WPF工程,包含两个相关的类
TextBoxWithEllipsis.cs 这个实现了咱们这个类,你可以简单的把他拷贝到你自己的工程里,可能你得改改命名空间
MainWindow.xaml 自适应的WPF窗口,用来测试咱们这个控件
运行后,直接在“Source Text”文本框里输入文本,然后在下面设置一下选项,提示之类的。这个控件的位置大小会随着窗口的改变而改改变。并且,当你把焦点移动到我写的这个文本框的时候,省略功能会暂时取消,好让你编辑。
实现
代码假定TextBox.ViewportWidth
<TextBox.ExtentWidth,文本放不下因此需要省略号,测试在LayoutUpdated事件句柄中进行,如果文本太长了,就进行二分搜索,设置Text属性的长度为上一次太短的和上一次太长的和的一半,Text属性的改变导致了LayoutUpdated的再一次调用,这样就一直重复知道找到了LongText合适的子串。
OnTextChanged()方法也被重载以防止当Text属性被内部改变(比如 LayoutUpdated方法)或从外部输入或者粘贴到这个控件的时候。TextChanged事件被触发,在重载的函数里,我们就把Text的值又赋值给LongText。然后就可以了
许可
此文章和包含的所有代码遵循MIT许可。
著作权声明:本文由http://www.cnblogs.com/lazycoding翻译,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述