Полный текст не отображается в веб-браузере Windows Phone

Я пытаюсь отобразить html-контент, доступный в локальном xml-файле. Я использую приведенный ниже код для отображения контента в веб-браузере,

   StringBuilder sb = new StringBuilder();
   sb.Append(@"<html><head>");
   sb.Append(@"<meta name=""viewport"" content=""width=""device-width"">");
   sb.Append(@"<style type=""text/css"">");
   sb.Append(@"body {");
   sb.Append(@"        margin:5px;");
   sb.Append(@"        text-align:center;");
   sb.Append(@"        letter-spacing:0.1em;");
   sb.Append(@"        font-size-adjust: none;");
   sb.Append(@"        font-size: 14px;");
   sb.Append(@"        font-family:""Segoe WP"";");
   sb.Append(@"      }");
   sb.Append("p");
   sb.Append("{margin:5px;}");
   sb.Append(@"</style></head><body>");
   sb.Append(commentry);
   sb.Append(@"</body></html>");
   discusswebBrowser.NavigateToString(sb.ToString());

Содержимое отображается в веб-браузере, но последние несколько строк обрезаются / не отображаются. Я попытался изменить параметры, высоту элемента управления и т. Д., Но некоторые конечные строки не отображаются, независимо от длины содержимого. Я даже пытался поместить в веб-браузер только простой текст. Причина, по которой я использую управление через веб-браузер, заключается в том, что контент форматируется для html-страницы, а также для обеспечения функции масштабирования. Контроль определяется следующим образом:

<Grid x:Name="ContentPanel" Grid.Row="1" >
<ScrollViewer Grid.Row="1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
<phone:WebBrowser Name="discusswebBrowser" Height="1000" />
</ScrollViewer>
</Grid>

2 ответа

Не смог найти ответа на эту проблему, поэтому придумал обходной путь самостоятельно. Сначала я проверяю длину отображаемого содержимого, а затем, если длина превышает 4000 символов, я делю его на две части. Затем также добавьте панель приложения с кнопкой "Дополнительно", чтобы пользователь мог нажать на кнопку и просмотреть оставшийся текст. Вот код

{
            if (commentry.Length > 4000 && commentry.IndexOf("<p>", commentry.Length / 2) > 0)
            {
                //Change the xaml to contain a panaroma , and if then on the second item create web browser control with the second half of the commentry. 
                commentry1 = commentry.Remove(commentry.IndexOf("<p>", commentry.Length / 2), commentry.Length - commentry.IndexOf("<p>", commentry.Length / 2));
                commentry2 = commentry.Remove(0, commentry.IndexOf("<p>", commentry.Length / 2));
                appBarMoreButton = new ApplicationBarIconButton(new Uri("/Images/quote.back.png", UriKind.Relative));
                appBarMoreButton.Text = "more";
                appBarMoreButton.Click += new EventHandler(loadMoreContent);
                appBarPreviousButton = new ApplicationBarIconButton(new Uri("/Images/quote.back.png", UriKind.Relative));
                appBarPreviousButton.Text = "Previous";
                appBarPreviousButton.Click += new EventHandler(loadFirstPart);


            }

         var htmlScript = "<script>function getDocHeight() { " +
            "return document.getElementById('pageWrapper').offsetHeight;" + 
            "}" +
            "function SendDataToPhoneApp() {" +
            "window.external.Notify('' + getDocHeight());" +
            "}</script>";

         if (commentry1 == null && commentry2 == null)
         {
             var htmlConcat = string.Format("<html><meta name=\"viewport\" content=\"width=device-width,user-scalable=yes,height=device-height\" /><head>{0}</head>" +
          "<body style=\"margin:5px;padding:0px;background-color:{3};\" " +
          "onLoad=\"SendDataToPhoneApp()\">" +
          "<div id=\"pageWrapper\" style=\"width:100%;color:{2}; background-color:{3}\"> " +
          "{1}</div></body><footer></footer></html>",
          htmlScript,
          commentry, fontColor, backGroundColor);
             discusswebBrowser.NavigateToString(htmlConcat);

         }
         else
         {
             var htmlConcat = string.Format("<html><meta name=\"viewport\" content=\"width=device-width,user-scalable=yes,height=device-height\" /><head>{0}</head>" +
                         "<body style=\"margin:5px;padding:0px;background-color:{3};\" " +
                         "onLoad=\"SendDataToPhoneApp()\">" +
                         "<div id=\"pageWrapper\" style=\"width:100%;color:{2}; background-color:{3}\"> " +
                         "{1}</div></body><footer></footer></html>",
                         htmlScript,
                         commentry1, fontColor, backGroundColor);
             discusswebBrowser.NavigateToString(htmlConcat);
             ApplicationBar = new ApplicationBar();
             ApplicationBar.IsVisible = true;
             ApplicationBar.Mode = ApplicationBarMode.Minimized;
             ApplicationBar.IsMenuEnabled = false;
             ApplicationBar.Buttons.Add(appBarMoreButton);


         }
        discusswebBrowser.ScriptNotify += 
        new EventHandler<NotifyEventArgs>(wb1_ScriptNotify);
        }

Для обработчика событий для кнопки more создайте функцию, которая будет загружать оставшийся текст вместе с кнопкой на панели приложения, чтобы вернуться к первой части.

 private void loadMoreContent(object sender, EventArgs e)
    {
        if (commentry2 != null)
        {
            var htmlScript = "<script>function getDocHeight() { " +
           "return document.getElementById('pageWrapper').offsetHeight;" +
           "}" +
           "function SendDataToPhoneApp() {" +
           "window.external.Notify('' + getDocHeight());" +
           "}</script>";

            var htmlConcat = string.Format("<html><meta name=\"viewport\" content=\"width=device-width,user-scalable=yes,height=device-height\" /><head>{0}</head>" +
                         "<body style=\"margin:5px;padding:0px;background-color:{3};\" " +
                         "onLoad=\"SendDataToPhoneApp()\">" +
                         "<div id=\"pageWrapper\" style=\"width:100%;color:{2}; background-color:{3}\"> " +
                         "{1}</div></body><footer></footer></html>",
                         htmlScript,
                         commentry2, fontColor, backGroundColor);
            discusswebBrowser.NavigateToString(htmlConcat);
            this.ApplicationBar.Buttons.RemoveAt(0);
            this.ApplicationBar.Buttons.Add(appBarPreviousButton);


        }
    }

Вы должны удалить жестко закодированный Height="1000"Также Grid.Row="1" в ScrollViewer не требуется, так как вы не определили определения строк для ContentPanel

<Grid x:Name="ContentPanel" Grid.Row="1" >
<ScrollViewer  VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
<phone:WebBrowser Name="discusswebBrowser"  />
</ScrollViewer>
</Grid>

Также вам не нужен ScrollViewer как телефон:WebBrowser имеет механизм прокрутки внутри.

Последний фрагмент, который должен работать

 <Grid x:Name="ContentPanel" Grid.Row="1" >
    <phone:WebBrowser Name="discusswebBrowser"  />
    </Grid>
Другие вопросы по тегам