Отключить полосу прокрутки WPF WebBrowser

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

XAML:

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

Спасибо.

Ответы на вопрос(10)

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

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

overflow: hidden

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

style="overflow:hidden"

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

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

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

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

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

 B.K.14 апр. 2015 г., 06:00
Это будет работать, только если пользователь не изменит размер окна. Вам придется постоянно обновлять это, если размер изменился.

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

<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

 Ratman15 мар. 2017 г., 10:12
Решение @befstrat не работает формы, мне пришлось изменить сценарий с помощью строки script = "document.documentElement.style.overflow = 'hidden'"

scroll="no" в HTMLbody тег работал для меня, в то время как другие предложения здесь не.

чтобы напрямую определить тело документа:

wb.Document.Body.scroll = "no"

в вашем HTML ....

 html{overflow:hidden;}

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

<meta http-equiv="X-UA-Compatible" content="IE=edge" /> 
 Martin Clemens Bloch07 мар. 2015 г., 12:52
Установка стиля html кажется самым чистым из ответов здесь ... Веб-браузер WPF доставляет мне головную боль.

ть какие-либо свойства прокрутки в 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)
}

с которой вы все столкнулись, но мои поиски привели меня сюда, поэтому я надеюсь, что это кому-нибудь поможет Я пытался встроить PDF-документ, используя компонент WPF WebBrowser. Оказывается, именно средство просмотра PDF (вызванное из браузера) создавало полосы прокрутки!

Для ее решения добавьте параметры в вызов файла PD. В моем XML: Source = "http: //address/file.pdf#toolbar=0&navpanes=0&scrollbar=0"

В коде это будет в следующем формате:Http: //address/file.pdf#toolbar=0&navpanes=0&scrollbar=0

(Благодаряleeand00 для этого решения от его ответа наэто вопрос.)

Добавьте 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";
}
 Alvin23 окт. 2012 г., 09:16
Нет, это не работает.
 horatius8302 янв. 2013 г., 20:29
Это не работает для меня, полоса прокрутки все еще видна.
 Alvin23 окт. 2012 г., 11:25
Полоса прокрутки все еще там.
 Markus31 янв. 2013 г., 14:25
Решение отлично работает для меня, какую страницу вы пытаетесь показать? Может быть, на странице есть полоса прокрутки?
 Sisyphe18 окт. 2012 г., 13:52
Это сработало для вас?

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

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

Прежде всего, вам нужно добавить ссылку наmshtml, В вашем проекте добавьте ссылку добавить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 Расширение, которое фактически выполняет работу по отключению переполнения, которое происходит только послеWeb,Browser Загрузка документа завершена:

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 будет скрыт на этот раз.

Ваш ответ на вопрос