2011-11-21 3 views
3

richtextbox를 사용하여 Windows Phone 7.1에서 일부 Html 컨텐츠를 보여줍니다. windows에서 richtextbox의 사용에 관한 것들

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);" 

를 사용

HTML 소스 코드는 같다. 마지막으로, 나는이 코드를 사용

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

추신 : HTML 소스 코드가 일부 비 영어 문자를 포함할지 여부는 중요하지 않습니다 아니. 이것은 HTML 소스 코드가 많은 양의 단어에있을 때 발생합니다. 이 두 스크린 샷은 문제를 보여줍니다.

+0

당신은 영어 문자를 사용하여 코드를 예시한다. 문자로 인해 코드를 읽을 수 있다면 당신을 도울 수 없습니다. – Rego

+0

오키, 잠깐만 ~ – ellic

답변

7

전화는 어떤 방향으로도 UIElement이 2048 픽셀보다 클 수 없다는 제한을 적용합니다. 이는 메모리와 관련된 성능 문제를 피하고 매우 큰 객체를 그리는 데 적용됩니다. 이것은 성능에 큰 영향을 미치는 것을 막기위한 것이지만 그 뒤에 다른 추론을 가지고 있습니다. 예를 들어, 휴대 전화는 대용량의 텍스트를 읽을 수없는 장치입니다. 이것은 조밀 한 텍스트 본문에 더 많이 적용됩니다. 따라서이 크기 제한은 응용 프로그램 내에서 큰 텍스트 조각을 표시하는 방법이나 생각해야 할 사항을 생각하게합니다.

몇 가지 해결책이 있습니다.
오히려 하나의 Paragrpah 또는 텍스트의 큰 "단위"에 대한 TextBlock을 사용하는 것보다,이 같은 것을 사용하여 고려할 수 : http://blogs.msdn.com/b/priozersk/archive/2010/09/08/creating-scrollable-textblock-for-wp7.aspx

+0

Thx, 너의 도움으로이 문제를 해결했다. – ellic

+0

@ellic 그러면이 대답에 동의해야합니다. –

관련 문제