【WP7】TextBlock长文本显示

WP7中的使用轻量级的TextBlock控件来显示文本,但是TextBlock显示过长的文本时,会发生截断,过长的部分不显示

如果过长的字符串,可以分解为多个TextBlock来显示,在MSDN上也有相关的实现,但是这个效率很低,而且也不是适合所有的情况,有时还是会出现文本截断问题

  http://blogs.msdn.com/b/priozersk/archive/2010/09/08/creating-scrollable-textblock-for-wp7.aspx

 

我用下面算法来分解字符串,然后生成多个TextBlock放在StackPanel,最后在放在ScrollViewer中

  思路:

    先设置一个最大长度MAX,然后用 tbList来存放分解出来的字符串

    然后以此读取字符串中的每一行,

      当所读取字符串长度小于MAX时,继续读取,直到所读取的字符串长度大于MAX

      当所读取字符串长度大于MAX时,保存之前读取的字符串到 tbList,然后重新继续

    当单行的长度大于MAX时,则按每MAX个字符一个字符串来分解(比如:当MAX=300, 当读取到一行的长度为420,则该行分解为300和120两个长度的字符串,不足)

表达不是很清楚,直接上代码吧 

        public List<string> ParstText(string text)
        {
            const int MAX = 300;
            var reader = new StringReader(text);
            var tblist = new List<string>();

            string line;
            var builder = new StringBuilder();
            while ((line = reader.ReadLine()) != null)
            {
                //如果总长度不超过MAX,则加入
                if (line.Length + builder.Length < MAX)
                {
                    builder.AppendLine(line);
                }
                else
                {
                    //先加入
                    tblist.Add(builder.ToString().Trim());

                    builder = new StringBuilder();
                    //单行长度小于MAX,则Append
                    if (line.Length < MAX)
                    {
                        builder.AppendLine(line);
                    }
                    //单行长度大于MAX,则
                    else
                    {
                        int times = line.Length / MAX;
                        for (int j = 0; j < times; j++)
                        {
                            tblist.Add(line.Substring(j * MAX, MAX).Trim());
                        }
                        builder.AppendLine(line.Substring(times * MAX));
                    }
                }
            }
            if (builder.Length > 0)
                tblist.Add(builder.ToString().Trim());

            return tblist;
        }

 

posted @ 2013-04-22 13:22  bomo  阅读(1197)  评论(0编辑  收藏  举报