Изменить шрифт html содержимого, преобразованного в строку с помощью веб-браузера - PullRequest
0 голосов
/ 26 марта 2020

Я использую this для преобразования HTML содержимого в XAML, но мне нужно изменить размер шрифта содержимого. Итак, я пытаюсь использовать this для изменения размера шрифта, но я получаю doc как null. Есть идеи почему?

Вот мой код-

public static void DocumentPropertyChanged(DependencyObject target, DependencyPropertyChangedEventArgs e)
    {
        WebBrowser browser = target as WebBrowser;

        var doc = browser.Document as HTMLDocument;

        if (browser != null)
        {
            string document = e.NewValue as string;
            browser.NavigateToString(document);
        }

        if (doc != null)
        {
            doc.execCommand("FontSize", false, 12);
            doc.execCommand("FontFamily", false, "Arial");
        }
    }

1 Ответ

0 голосов
/ 27 марта 2020

Попробуйте:

public static void DocumentPropertyChanged(DependencyObject target, DependencyPropertyChangedEventArgs e)
{
    if (!(target is WebBrowser)) // Handles null and other weird things.
        throw new Exception("target is not a WebBrowser!");

    WebBrowser browser = target as WebBrowser;

    string document = e.NewValue as string;

    if (document == null)
        throw new Exception("e.NewValue is not a string!");

    browser.NavigateToString(document);

    var doc = browser.Document as HTMLDocument;

    if (doc != null)
    {
        doc.execCommand("FontSize", false, 12);
        doc.execCommand("FontFamily", false, "Arial");
    }
    else
    {
        throw new Exception("browser.Document is not an HTMLDocument!");
    }
}

Я думаю для этого требуется ссылка на Microsoft.ms html .dll и оператор using mshtml;, если вы этого еще не сделали пока.

Я добавил все броски, потому что я не уверен на 100%, в чем проблема, не запустив этот код.

Так что я надеюсь, что это того стоит это помогает.

Редактировать ...

В документации указано, что NavigateToString загружает содержимое асинхронно .

При назначении doc после навигации вышеуказанный код появляется для работы с очень короткими документами, но этому нельзя доверять. Назначение doc до того, как навигация не работает.

Лучшим решением может быть обработка события WebBrowser.Navigated, чтобы убедиться, что содержимое полностью загружено перед взаимодействием со свойством WebBrowser.Document:

XAML:

<WebBrowser Name="browser" Navigated="Browser_Navigated"/>

CS:

public static void DocumentPropertyChanged(DependencyObject target, DependencyPropertyChangedEventArgs e)
{
    WebBrowser browser = target as WebBrowser;

    if (browser != null)
    {
        string document = e.NewValue as string;
        browser.NavigateToString(document);
    }
}

private void Browser_Navigated(object sender, NavigationEventArgs e)
{
    var doc = webBrowser.Document as HTMLDocument;

    if (doc != null)
    {
        doc.execCommand("FontSize", false, 12);
        doc.execCommand("FontFamily", false, "Arial");
    }
}

Примечание. Этот код запустит ваш execCommand (чего у меня нет проверено кстати) на каждом документе, загруженном в WebBrowser. Если это проблема, мы можем ее исправить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...