Как показать формат html с помощью RichTextBlock - PullRequest
1 голос
/ 06 февраля 2020

Я сейчас работаю над Windows 10 проектом UWP. Я получаю файл HTML с сервера и хочу показать это в приложении UWP. Я хочу использовать RichTextBlock вместо веб-представления. Я попробовал код github здесь , который использовал библиотеку Html2Xaml, но я Я получаю сообщение об ошибке при попытке привязать данные к RichTextBlock. Я нашел this , но он содержит только преобразование rtf в html

Я просто хочу преобразовать html в RichTextBlock и покажите файл html в приложении UWP. Пожалуйста, кто-нибудь, подскажите, как выполнить мое требование с RichTextBlock

1 Ответ

1 голос
/ 07 февраля 2020

Лучший способ отобразить Html - использовать WebView, но если вы хотите преобразовать его в текст, который может отображать RichTextBlock, это может быть более сложным.

Позвольте мне кратко объяснить идею:

1. Загрузите Html и превратите его в анализируемый объект.

В диспетчере пакетов nuget вы можете найти несколько связанных Html пакетов для синтаксического анализа, выполнить поиск Html, чтобы загрузить самый популярный пакет.

2. Разобрать документ Html и сгенерировать соответствующий Block или Inline на основе типа тега по рекурсии

Рекурсивный метод - проверить, есть ли у анализируемого в данный момент Tag дочерние элементы, и если это так, повторите метод разбора.

3. Методы преобразования для различных тегов

RichTextBlock не могут быть преобразованы в соответствующий стилизованный текст в соответствии с тегами Html, поэтому их необходимо написать самим.

Take <b> ... </b> в качестве примера, это жирный встроенный текст. Этот метод можно использовать при преобразовании:

private static Inline GenerateBold(HtmlNode node)
{
    if (string.IsNullOrEmpty(node.InnerText.Trim()))
        return null;
    Span s = new Span();
    s.Inlines.Add(new Run() { Text = node.InnerText.Trim(), FontWeight = FontWeights.Bold });
    return s;
}

Текстовые типы, поддерживаемые RichTextBlock, находятся в пространстве имен Windows.UI.Xaml.Documents, которое в основном разделено на Inline и Block. Если вы хотите увидеть все типы текста в этом пространстве имен, вы можете просмотреть этот документ


Преобразование тегов Html в типы текста, поддерживаемые RichTextBlock, требует однозначного одно обращение. Кроме того, вы не сможете полностью воспроизвести эффект CSS на стилях в RichTextBlock (это означает, что вам также необходимо создать CSS синтаксический анализатор).

Если вы собираетесь сделайте эту большую работу, я надеюсь, что мои предложения могут помочь вам.

С уважением.

...