2011-11-21 69 views
3

我正在使用richtextbox在windows phone 7.1中顯示一些Html內容。在windows phone中使用richtextbox的東西

HTML源代碼是這樣的:

Paragraph1</p> 
<img src="http://www.ifanr.com/wp-content/uploads/2011/11/DSC_332401.jpg" alt="" width="600" height="338" /></p> 
Paragraph2。</p> 
<h3>Title h3</h3> 
Paragraph3。 
</p> 

然後,我使用

"string[] sArray = Regex.Split(html, "</p>", RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace);" 

將它們分成數組。最後,我用的是代碼:

foreach (string array in sArray) 
      { 
       Paragraph parag = new Paragraph(); 
       Run run = new Run(); 
       Bold bold = new Bold(); 
       if (!Regex.IsMatch(array.ToString(), @"<img\b[^<>]*?\bsrc\s*=\s*[""']?\s*(?<imgUrl>[^\s""'<>]*)[^<>]*?/?\s*>")) 
       { 
        //h3 
        if (array.ToString().Contains("</h3>")) 
        { 
         string hString = array.ToString(); 
         hString = Regex.Replace(hString, "<h3>", ""); 
         string[] hArray = Regex.Split(hString, "</h3>", RegexOptions.IgnoreCase | RegexOptions.IgnorePatternWhitespace); 
         bold.Inlines.Add(hArray[0].ToString()); 
         parag.Inlines.Add(bold); 
         run.Text = hArray[1].ToString(); 
         parag.Inlines.Add(run); 
        } 
        else 
        { 
         if(array.ToString().Contains("<blockquote>")) 
         { 
          run.Text = Regex.Replace(array.ToString(), "<blockquote>", "blockquote:"); 
          run.FontSize = 18; 
         } 
         else 
          run.Text = array.ToString(); 
         parag.Inlines.Add(run); 
        } 
        rtb.Blocks.Add(parag); 
       } 
       else 
       { 
        //insert the image into richtextbox 
        Regex regImg = new Regex(@"http://[^\[^>]*?(gif|jpg|png|jpeg|bmp|bmp)", RegexOptions.IgnoreCase); 
        MatchCollection matches = regImg.Matches(array.ToString()); 
        string result = null; 
        foreach (Match match in matches) 
         result = match.Value; 

        Image image = new Image(); 

        image.Stretch = Stretch.Uniform; 
        image.Source = new BitmapImage(new Uri(result, UriKind.RelativeOrAbsolute)); 
        InlineUIContainer iuc = new InlineUIContainer(); 
        iuc.Child = image; 
        parag.Inlines.Add(iuc); 
        rtb.Blocks.Add(parag); 
       } 

添加一些段落或圖片到RichTextBox,一切順利的開始,但是當我向下滾動RichTextBox的,其餘段落消失。它整天困惑我,因爲我不能發現richtextbox有什麼問題。 它只是Windows手機中的一個錯誤?有什麼想法嗎?

ScreenShot1

screenshot 1

ScreenShot2

Screenshot 2

PS:不要緊的HTML源代碼是否包含了一些非英文字符或不。當html源代碼含有大量文字時會發生這種情況。這兩個ScreenShots只是顯示問題。

+0

你應該使用英文字符舉例說明你的代碼。如果我們甚至可以根據角色閱讀代碼,就很難幫助您。 – Rego

+0

Okey,稍等片刻〜 – ellic

回答

7

手機應用限制,任何UIElement在任何方向上都不能大於2048像素。這被強制執行以避免與內存有關的性能問題並且不得不繪製非常大的對象。這是爲了保護你不會做出極大影響性能的事情,但也有一些其他原因。例如,手機是閱讀大量文本的糟糕設備。對於密集的文本來說,這更適用。因此,這種大小限制會迫使您考慮在應用程序中顯示大量文本,或者應該如何顯示。

雖然有一些解決方案。
而不是使用一個單一的ParagrpahTextBlock文本的一個巨大的「單位」,你可以考慮使用這樣的事情:http://blogs.msdn.com/b/priozersk/archive/2010/09/08/creating-scrollable-textblock-for-wp7.aspx

+0

Thx,我已經在你的幫助下解決了這個問題。 – ellic

+0

@ellic然後你應該接受這個答案 –

相關問題