вещи об использовании richtextbox в Windows Phone - PullRequest
3 голосов
/ 21 ноября 2011

Я использую richtextbox, чтобы показать некоторый HTML-контент в Windows Phone 7.1.

Исходный код 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 Phone? Есть мысли?

Screenshot1

screenshot 1

screenshot2

Screenshot 2

p.s: не имеет значения, содержит ли html-код некоторые неанглийские символы или нет. Это происходит, когда HTML-исходный код состоит из большого количества слов. Эти два скриншота просто показывают проблему.

1 Ответ

7 голосов
/ 21 ноября 2011

В телефоне действует ограничение, согласно которому любой UIElement не может быть больше 2048 пикселей в любом направлении.Это применяется во избежание проблем с производительностью, связанных с памятью и необходимостью рисовать очень большие объекты.Это сделано для того, чтобы защитить вас от действий, которые сильно влияют на производительность, но также имеют некоторые другие причины.Например, телефон - плохое устройство для чтения больших фрагментов текста.Это относится еще больше к плотным телам текста.Таким образом, это ограничение размера заставляет вас задуматься о том, как или, если нужно, отображать большие куски текста в вашем приложении.

Однако есть некоторые решения.1006 * для большой «единицы» текста, вы можете использовать что-то вроде этого: http://blogs.msdn.com/b/priozersk/archive/2010/09/08/creating-scrollable-textblock-for-wp7.aspx

...