TextBlock显示问题

问题描述:

  条件一:TextBlock的Text内容超过本身显示的范围时,以"..."的形式显示部分内容

  条件二:单击"..."后弹出一个Div,来将TextBlock对应内容全部展现。

  条件三:使用触屏

问题分析与解决:

  1. 对于条件一,设置TextBlock的TextTrimming属性即可

  2. 对于条件二,计算一下TextBlock的总宽度和展现内容所需长度,进行对比,能够完全展示,则不显示"..."的按钮,否则显示

    具体计算方法如下:

    //获取Textblock真正长度 

    var subjectivemaxWidth = Application.Current.MainWindow.ActualWidth / 2;
            this.subjectiveImageButton.Visibility = subjectivemaxWidth < this.GetTextBlockIdealWidth(this.subjectiveTextBlock) ? Visibility.Visible : Visibility.Collapsed;

    

    //获取完全展示内容所需长度,其实就是ActualWidth,但有时候该值为空,因此手动计算一下更安全

     private double GetTextBlockIdealWidth(TextBlock textBlock)      

      {            

         var text = textBlock.Text;            

         var alphabetCount = this.GetAlphabetCount(text);         

         var characterCount = text.Length - alphabetCount;

         var idealWidth = textBlock.FontSize * (alphabetCount / 2.0 + characterCount);           

           return idealWidth;

        }

          private int GetAlphabetCount(string str)    

       {            

       var count = 0;            

       foreach (var s in str)           

       {

                      if ((s > 'a' && s < 'z') || (s > 'A' && s < 'Z'))  

                     {                    

               count++;

               }

            }

                return count;        

      }

  3. 对于条件三,如果条件二的做法才有意义,否则使用ToolTip完全搞定了。

mark一下,如果哪位高手有更好的方法,欢迎共享。

posted @ 2013-12-06 09:35  生态圈_行者  阅读(371)  评论(0编辑  收藏  举报