Отображать форматированный текст в приложении WP7

Я хочу отобразить текст about в моем приложении WP7. Но он содержит ссылки, полужирный текст и маркированный список. Есть ли простой способ отобразить это как форматированный текст или html? Я не хочу создавать это с помощью панели стека с текстовыми блоками и гиперссылками...


person Hinek    schedule 11.10.2011    source источник


Ответы (2)


Выпуск Mango для Windows Phone увеличил версию Silverlight с 3 до 4. В рамках этого они добавили элемент управления RichTextBox, который может делать то, что вам нужно. '

Одна статья (правда, старая) о First Посмотрите на элемент управления RichTextBox.

person Nigel Sampson    schedule 11.10.2011
comment
Да, вам нужно загрузить последнюю версию SDK с create.msdn.com, после установки ваш проект будет иметь обновление вариант, когда вы щелкаете правой кнопкой мыши по нему в обозревателе решений. - person Nigel Sampson; 12.10.2011

Если у вас есть HTML-страница или файл для отображения, используйте ссылку Веб-браузер. Он поддерживает все основные функции, которые вы ожидаете от веб-браузера; HTML-разметка, стили, теги привязки позволяют перейти к другим ресурсам или местам на вашей странице.

Чтобы отобразить файл, расположенный внутри проекта Visual Studio, вам нужно сделать что-то вроде этого. Дайте мне знать, если вам нужна дополнительная информация. Надеюсь это поможет.

Al.

=== обновлено ===

/// <summary>
/// Contains extension methods for the WebBrowser control.
/// </summary>
public static class WebBrowserExtensions {

    private static void SaveFileToIsoStore(String fileName) {
        //These files must match what is included in the application package,
        //or BinaryStream.Dispose below will throw an exception.
        using(IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication()) {
            if (false == isoStore.FileExists(fileName)) {
                StreamResourceInfo sr = Application.GetResourceStream(new Uri(fileName, UriKind.Relative));
                using (BinaryReader br = new BinaryReader(sr.Stream)) {
                    byte[] data = br.ReadBytes((int)sr.Stream.Length);
                    SaveToIsoStore(fileName, data);
                }
            }
        }
    }

    private static void SaveToIsoStore(string fileName, byte[] data) {
        string strBaseDir = string.Empty;
        string delimStr = "/\\";
        char[] delimiter = delimStr.ToCharArray();
        string[] dirsPath = fileName.Split(delimiter);

        using (IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication()) {
            //Recreate the directory structure
            for (int i = 0; i < dirsPath.Length - 1; i++) {
                strBaseDir = System.IO.Path.Combine(strBaseDir, dirsPath[i]);
                isoStore.CreateDirectory(strBaseDir);
            }

            //Remove existing file
            if (isoStore.FileExists(fileName)) {
                isoStore.DeleteFile(fileName);
            }

            //Write the file
            using (BinaryWriter bw = new BinaryWriter(isoStore.CreateFile(fileName))) {
                bw.Write(data);
                bw.Close();
            }
        }
    }

    public static void NavigateToHtmlFile(this WebBrowser webBrowser, String fileName) {
        SaveFileToIsoStore(fileName);
        using (IsolatedStorageFile isoStore = IsolatedStorageFile.GetUserStoreForApplication()) {

            if (isoStore.FileExists(fileName)) {
                webBrowser.Navigate(new Uri(fileName, UriKind.Relative));
            } else {
                //something bad has happened here
            }
        }
    }
}

а затем в вашем xaml

MyWebControl.NavigateToHtmlFile(pathToHtmlFile);
person ajmccall    schedule 11.10.2011
comment
Я хотел избежать использования элемента управления WebBrowser, потому что он кажется мне немного чрезмерным... - person Hinek; 11.10.2011
comment
хммммм... объясните немного сверху? С точки зрения кода это очень чисто, вас беспокоят накладные расходы памяти/ЦП на создание этого элемента управления? - person ajmccall; 11.10.2011
comment
Как я уже сказал, просто ощущение. Сейчас я попробовал WebBrowser, но страница не отображается. Я добавил html-файл в проект и пометил его как Embedded Ressource. Затем я установил Source в /MyApp;component/About.html... Я также пытался использовать метод Navigate и RelativeUri... безрезультатно. Где моя ошибка? - person Hinek; 11.10.2011
comment
WebControl не может отображать файлы, упакованные в XAP, только файлы в IsolateFileStorage. В первый раз, когда вы хотите отобразить локальный файл html, вам необходимо «скопировать» файл из связанного ресурса и «сохранить» его в локальной файловой системе телефона (IsolatedFileStorage). С этого момента метод Navigate будет работать, как и ожидалось. Я включил свой код, который является методом расширения, чтобы сделать это. В противном случае не стесняйтесь попробовать ответ, предложенный @Nigel - person ajmccall; 11.10.2011
comment
+1 Использование HTML и CSS в элементе управления веб-браузером чрезвычайно гибкое и простое в использовании даже для новичка. - person Edward; 12.10.2011
comment
большая проблема с веб-контролем — фон всегда белый. и вы не можете изменить цвет фона - person phuongho; 12.08.2013