Отключить панель прокрутки WPF WebBrowser

Я пытаюсь скрыть панель прокрутки веб-браузера, но она все еще видна.

XAML:

<WebBrowser Name="wb" Width="700" Height="600" 
                        OverridesDefaultStyle="False"
                        ScrollViewer.CanContentScroll="False"
                        ScrollViewer.HorizontalScrollBarVisibility="Hidden" 
                        ScrollViewer.VerticalScrollBarVisibility="Hidden" />

Спасибо.

Ответ 1

Это работает для меня:

<WebBrowser LoadCompleted="wb_LoadCompleted"></WebBrowser>           

void wb_LoadCompleted(object sender, NavigationEventArgs e)
    {
        string script = "document.body.style.overflow ='hidden'";
        WebBrowser wb = (WebBrowser)sender;
        wb.InvokeScript("execScript", new Object[] { script, "JavaScript" });
    }

Таким образом вам не нужен mshtml

Ответ 2

Не идеально, но он работает:

Добавьте Microsoft.mshtml ссылки на проект. Затем измените свой xaml на это:

<WebBrowser Name="wb" Width="700" Height="600" 
            OverridesDefaultStyle="False"
            ScrollViewer.CanContentScroll="False"
            ScrollViewer.HorizontalScrollBarVisibility="Hidden" 
            ScrollViewer.VerticalScrollBarVisibility="Hidden"
            LoadCompleted="wb_LoadCompleted"></WebBrowser>

и в вашем коде позади:

private void wb_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e)
{
    mshtml.IHTMLDocument2 dom = (mshtml.IHTMLDocument2)wb.Document;
    dom.body.style.overflow = "hidden";
}

Ответ 3

в вашем html....

 html{overflow:hidden;}

он должен решить это или вы можете использовать метатег, чтобы указать режим рендеринга Ie

<meta http-equiv="X-UA-Compatible" content="IE=edge" /> 

Ответ 4

Добавьте Microsoft.mshtml ссылки на проект. Вам не нужно изменять какие-либо свойства прокрутки в XAML, поскольку они не управляют веб-браузером при использовании mshtml. В функции LoadCompleted выполните следующие действия:

private void webBrowserChat_LoadCompleted(object sender, NavigationEventArgs e)
{
    mshtml.IHTMLDocument2 documentText = (IHTMLDocument2)webBrowserChat.Document; 
    //this will access the document properties 
    documentText.body.parentElement.style.overflow = "hidden"; 
   // This will hide the scrollbar (Set to "auto" if you want to see when it passes the surfacelimit)
}

Ответ 5

Добавление scroll="no" в тег html body работало для меня, в то время как других предложений здесь не было.

Ответ 6

Я сделал свой элемент управления WebBrowser более широким, чем видимая область, на 16 пикселей, что является шириной полосы прокрутки.

Это будет работать, только если ваш контроль веб-браузера коснется самого правого приложения. Элемент управления веб-браузером не позволит другим элементам XAML поверх него, но вы можете перегрузить край вашего приложения.

Я сделал это в обработчике событий Loaded для окна:

private void AppLoaded(object sender, RoutedEventArgs routedEventArgs)
{
    WebBrowserView.Width = WebBrowserView.ActualWidth + 16;
}

Я обнаружил, что инъекция JavaScript на страницу, казалось, сломала некоторые страницы, и полоса прокрутки исчезла только после завершения загрузки страницы.

Ответ 7

Свойство overflow, присвоенное значению hidden в теге body, решает эту проблему.

Если у вас есть набор правил css для вашего тега body, добавьте в него следующую строку:

overflow: hidden

В противном случае добавьте следующую строку к вашему конкретному замедлению тега <body>:

style="overflow:hidden"

Ответ 8

Простите немного поздно, но я, наконец, могу отключить полосу прокрутки. Подсказка от @Devdude была ключом.

Главное - установить overflow = hidden, но как это сделать в WPF? Я использовал DependencyObject, чтобы я мог связывать: включать и отключать, когда захочу.

Прежде всего вам нужно добавить ссылку на mshtml. В своем проекте добавьте ссылку add Microsoft.mshtml. Затем в файле .cs добавьте:

using mshtml;

Объект DependencyObject

public class WebBrowserUtility : DependencyObject
{
    public static readonly DependencyProperty HideScrollBarProperty = DependencyProperty.RegisterAttached(
        "HideScrollBar",
        typeof(string),
        typeof(WebBrowserUtility),
        new UIPropertyMetadata(null, HideScrollBarPropertyChanged));

    public static string GetHideScrollBar(DependencyObject obj)
    {
        return (string)obj.GetValue(HideScrollBarProperty);
    }
    public static void SetHideScrollBar(DependencyObject obj, string value)
    {
        obj.SetValue(HideScrollBarProperty, value);
    }
    public static void HideScrollBarPropertyChanged(DependencyObject obj, DependencyPropertyChangedEventArgs args)
    {
        WebBrowser browser = obj as WebBrowser;
        string str = args.NewValue as string;
        bool isHidden;
        if (str != null && bool.TryParse(str, out isHidden))
        {
            browser.HideScrollBar(isHidden);
        }
    }
}

Расширение WebBrowser, которое фактически выполняет работу по отключению переполнения, которое происходит только после завершения WebBrowser Загрузка документа:

public static class WebBrowserExtension
{
    public static void HideScrollBar(this WebBrowser browser, bool isHidden)
    {
        if (browser != null)
        {
            IHTMLDocument2 document = browser.Document as IHTMLDocument2;
            if (document == null)
            {
                // If too early
                browser.LoadCompleted += (o, e) => HideScrollBar(browser, isHidden);
                return;
            }

            //string bodyOverflow = string.Format("document.body.style.overflow='{0}';", isHidden ? "hidden" : "auto");
            //document.parentWindow.execScript(bodyOverflow); // This does not work for me...

            string elementOverflow = string.Format("document.documentElement.style.overflow='{0}';", isHidden ? "hidden" : "auto");
            document.parentWindow.execScript(elementOverflow);
        }
    }
}

Для использования в XAML

<WebBrowser ns:WebBrowserUtility.HideScrollBar="True"/>

Примечание. Убедитесь, что вы растягиваете WebBrowser, чтобы увидеть все содержимое. Несмотря на это, scrollbar будет скрыт на этот раз.