• 【原译】自动省略功能的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翻译,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢!

  • 相关阅读:
    geoserver发布地图服务WMTS
    geoserver发布地图服务WMS
    geoserver安装部署步骤
    arcgis api 3.x for js 入门开发系列十四最近设施点路径分析(附源码下载)
    arcgis api 3.x for js 入门开发系列十三地图最短路径分析(附源码下载)
    cesium 之自定义气泡窗口 infoWindow 后续优化篇(附源码下载)
    arcgis api 3.x for js 入门开发系列十二地图打印GP服务(附源码下载)
    arcgis api 3.x for js 入门开发系列十一地图统计图(附源码下载)
    arcgis api 3.x for js 入门开发系列十叠加 SHP 图层(附源码下载)
    arcgis api 3.x for js入门开发系列九热力图效果(附源码下载)
  • 原文地址:https://www.cnblogs.com/lazycoding/p/2312366.html
Copyright © 2020-2023  润新知