控件中国网现已改版,您看到的是老版本网站的镜像,系统正在为您跳转到新网站首页,请稍候.......
中国最专业的商业控件资讯网产品咨询电话:023-67870900 023-67871946
产品咨询EMAIL:SALES@COMPONENTCN.COM

Windows phone中用RichTextBox实现文字、图片混合排版

作者:未知 出处:cnblog 2013年05月28日 阅读:

 我最开始的思路是用几个stackpanel,几个TextBox,几个image来实现,实现起来很是麻烦。微软为我们提供了很好的解决方案,richtextbox就是很好的选择;具体可参考 http://msdn.microsoft.com/zh-cn/library/ee681613(v=VS.95).aspx 。

 
这里我简单实现了一下图文混排。
 
思路是这样的:首先我们希望能把图片文字,同一般的文字分离开来,便于我们生成文字还是图片。
 
               例如:  "大家好,hello,希望大家喜欢[disdain],开心哦[joyful]哈哈哈!"
 
               我们可以把它拆分成 :    "大家好,hello,希望大家喜欢"  +  "[disdain]"  +  ",开心哦"  +  "[joyful]"  +"哈哈哈!" 
 
               其中第一个我们叫它一般字符,第二个表示图片的我们叫它图片字符。
 
               于是我们希望定义一个数组来存这5个字段。于是我们定义一个string[] 数组
 
               并且分别定义两个字符串来分别来赋值 一般字符 和  图片字符。
 
               接下来就是一些筛选加判断将一般字符和图片字符分离开来,具体实现方法在我的代码里大家可以参考一下(方法有很多种,我的有些繁琐,欢迎大家分享一下更简便的方法。)
 
               需要源代码的留下邮箱,我发给你们。
 
1.筛选方法:
 
string abc = "大家好,hello,希望大家喜欢[disdain],开心哦[joyful]哈哈哈!";  //我们要转换成文字加图片的内容
         public MainPage()
         {
             InitializeComponent();
 
             ObservableCollection<FaceItem> faceItemList = new ObservableCollection<FaceItem>();
       
             FaceItem item1 = new FaceItem { FaceName = "[disdain]", FaceUri = "Emotions/[disdain].png" };
          
             FaceItem item2 = new FaceItem { FaceName = "[joyful]", FaceUri = "Emotions/[joyful].png" };
        
             faceItemList.Add(item1);
             faceItemList.Add(item2);
          
             this.FaceList.ItemsSource = faceItemList;
 
 
             char[] abcs = abc.ToCharArray();           //将需要转换的内容转换成char数组,便于我们进行筛选操作,例如:“大家好,hello,希望大家喜欢[disdain],开心哦[joyful]哈哈哈!”
             string strs = "";                          //文字(非"[]"类型的文字)  例如:“大家好,hello,希望大家喜欢”
             string strface = "";                       //图片("[]"类型的文字)    例如:“[disdain]”
             List<string> list = new List<string>();    //我们把文字和图片放入其中,最后我们通过遍历这个list来动态为richbox添加内容
             for (int i = 0; i < abcs.Count(); i++)
             {
                 if (abcs[i].ToString() != "[")           
                 {
                     for (int j = 0; j < abcs.Count() - i ; j++)
                     {
                         if (abcs[i + j].ToString() != "[")
                         {
                             strs = strs + abcs[i + j].ToString();
                             if (i + j == abcs.Count()-1)
                             {
                               if (abcs[i+j].ToString()!="]") 
                               {
                                 i = i + j ;
                                 break;
                               }
                             }
                         }
                         else 
                         {
                             i = i + j-1;
                             break;
                         }
                        
                     }  
                     if (strs!="")
                    {
                       list.Add(strs);
                        strs = "";
                     }
                 }
                 if (abcs[i].ToString() == "[")
                 {
                     for (int j = 0; j < abcs.Count()-i; j++)
                     {
                         if (abcs[i + j].ToString() != "]")
                         {
                             strface = strface + abcs[i + j].ToString();
                            
                         }
                         if (abcs[i + j].ToString() == "]")
                         {
                             strface = strface + abcs[i + j].ToString();
                             i = i + j; 
                             break;
                         }  
 
                     } 
                     FaceItem itemnew = new FaceItem { FaceName = strface, FaceUri = "Emotions/" + strface + ".png" };
                         if (true)
                         {
                             list.Add(strface);
                             strface = "";
 
                         }
                 }
2. 下面是绘制内容:
 
//// 动态生成richbox内的内容
            Paragraph ph = new Paragraph(); //放到for循环外面,因为只有一个段落就够了
            content1.Blocks.Add(ph);        //放入到richbox中
            for (int i = 0; i < list.Count();i++ ) 
            {
                if (list[i].ToString().StartsWith("["))
                {
                    // Run myRun= new Run();
                    InlineUIContainer iu = new InlineUIContainer();
                    Image im = new Image();
                    im.Source = new BitmapImage(new Uri("Emotions/" + list[i].ToString() + ".png", UriKind.RelativeOrAbsolute));
                    im.Height = 30;
                    iu.Child = im;
                 
                    ph.Inlines.Add(iu);
                }
                else
                {
                    Run myRun = new Run();
                    myRun.Text = list[i].ToString();
                    ph.Inlines.Add(myRun);
                   
                } 
               
            }
 

热推产品

  • ActiveReport... 强大的.NET报表设计、浏览、打印、转换控件,可以同时用于WindowsForms谀坔攀戀Forms平台下......
  • AnyChart AnyChart使你可以创建出绚丽的交互式的Flash和HTML5的图表和仪表控件。可以用于仪表盘的创......
首页 | 新闻中心 | 产品中心 | 技术文档 | 友情连接 | 关于磐岩 | 技术支持中心 | 联系我们 | 帮助中心 Copyright-2006 ComponentCN.com all rights reserved.重庆磐岩科技有限公司(控件中国网) 版权所有 电话:023 - 67870900 传真:023 - 67870270 产品咨询:sales@componentcn.com 渝ICP备12000264号 法律顾问:元炳律师事务所 重庆市江北区塔坪36号维丰创意绿苑A座28-5 邮编:400020
在线客服
在线客服系统
在线客服
在线客服系统