设为首页 收藏本站
查看: 774|回复: 0

[05.15] Chinese Weibo LinkLabel etc. For Windows Phone 7

[复制链接]

尚未签到

发表于 2015-5-14 09:34:19 | 显示全部楼层 |阅读模式
  好的那么今天的主题就是 LinkLabel 例如说微博等程序中把文本自动替换为 Hyperlink 的一个 Text 显示器。
前些天看到的一个Silverlight的控件是基于SL2 的但是稍作改动就可以移植到Wp 叫做LinkLabel,现在的版本号是1.1
那么他的原理就是:
  1:读取Text属性为string,通过正则表达式适配其中的链接项目。
2:把读取链接在字符串中的 Index,将链接之前的文字添加为TextBlock 放入WrapP
anel,那么这里有个大问题待会会提到。
3:生成链接并扔到 WrapPanel 里面。继续处理后面的文字。

  
  问题描述:
  但是这个LinkLabel及其不适合中国人使用。因为他是针对英文单词适配的。将每个单词读取为一个 Word 添加到 WrapPanel,实现自动换行的概念。而 Hyperlink 更加是很难实现完美的自动换行,这就出现如果用汉字会无法换行,因为没有空格可以识别,也就是所有汉字都是一个单词,被当做单独的 Word 添加到 WrapPanel,即使加上 TextWrap 属性仍然会因为无法估计最好一行剩余空间,导致格式很凌乱。产生及其混乱的 UI。
  
  解决方案设想:
  我做了一个临时的不完美解决方案,稍作改动,将每个汉字生产了一个 TextBlock 添加到 WrapPanel 实现自动换行,但是仍然没有解决的 Hyperlink 的换行问题,而且这样不停的添加子 Template 可能对性能也会有很大的影响。前些天一直在研究性能问题,尚未作出有效的更改,先从解决这个遗留问题开始吧。当然发此文是我尚在寻求解决方案中,今天看 WP7Contib 项目 发现了很多有趣的项目。那么我有个想法就是做一个新的 AutoCutPanel,把添加进来后的子控件长度超过 Panel 的 LineBreakWidth属性的断产生n个(取决于它的长度是否大于 LineBreakWitdth)。
我不太爱画图,大概意思就是,例如这一行总共有12个字符空间,现在第一行只剩下3个字符的空间,那么我添加一个TextBlock,有18个字符,就把前3个截断,放入上一行,而接下来12个放入下一行,再接下来3个放入第三行。这样至少比每个字添加为控件节约空间。

  Note:这个方案还有个问题,就是那么我做 Hyperlink 截断的时候,这些控件的 State 需要关联起来,这个具体实现我还没太明白,需要深入研究下。
  
  DynamicTextBlock:
  好那么就可以进入正题,这个遗留问题遗留了很久,知道我看到了这个 Dynamic TextBlock,那么事实上他就是给 TextBlock 加入了一个 Trimming 属性,就是我要的那部分。正好可以用在 WP 的silverlight 开发上,在我们真正实现 Silverlight 4之前,这种解决方案还是比较可取的。接下来我就要去阅读他的源代码了,晚上再来更新。
好的,那么阅读完毕它的代码之后,发现就跟我事先想过的一样,用一个循环控制,然后每次都用 Reduce 字符串里面的一个字符,再 MesureSize 然后再循环。当初我就为了寻求更优的解决方案,可是看来只有这个方式了,或许也还是有没有想到的地方,当然每次减少一个字符这里可能可以优化,但是这些小细节上的算法就还是算了吧,嘿嘿。
好的,那么下面开始根据 Toolkit 里面的 WrapPanel 修改源代码实现我自己的 AutoCutPanel 吧。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-66806-1-1.html 上篇帖子: Windows Phone 7 启动器与选择器(学习笔记) 下篇帖子: Windows Phone 7云服务MyPhone新特性
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表