12

我试图隐藏 webbrowser 滚动条,但它仍然可见。

XAML:

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

谢谢你。

4

10 回答 10

22

这对我有用:

<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

于 2013-03-09T09:21:44.660 回答
8

不理想,但它有效:

将 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";
}
于 2012-10-17T09:02:02.433 回答
6

添加scroll="no"到 htmlbody标签对我有用,而这里的其他建议没有。

于 2017-12-18T08:56:47.277 回答
4

在你的 html ....

 html{overflow:hidden;}

它应该可以解决它,或者您可以使用元标记来指定即渲染模式

<meta http-equiv="X-UA-Compatible" content="IE=edge" /> 
于 2013-05-07T11:03:37.903 回答
1

将 Microsoft.mshtml 添加到您的项目引用中。您不需要更改 XAML 中的任何滚动属性,因为在使用 mshtml 时,它们不是控制 webbrowser 的属性。在 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)
}
于 2016-05-26T18:19:41.050 回答
0

I've made my WebBrowser control wider than the visible area by 16 pixels which is the width of the scrollbar.

This will only work if your web browser control touches the far right of your app. The web browser control will not allow other XAML elements on top of it, but you can make it overflow the edge of your app.

I've done this in a Loaded event handler for the window:

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

I found injecting JavaScript into the page seemed to break some pages and the scrollbar would only disappear once the page had completed loading.

于 2013-08-21T14:41:37.113 回答
0

我用这个简单的一行来直接定义文档的正文:

wb.Document.Body.scroll = "no"
于 2019-03-08T20:23:58.423 回答
0

在标签上分配了值的溢出属性解决了这个问题。hiddenbody

如果您的body标签有 CSS 规则集,请在其中添加以下行:

overflow: hidden

否则,将以下行添加到您的具体<body>标签减速:

style="overflow:hidden"
于 2016-02-19T18:21:51.373 回答
0

这与你们遇到的问题不太一样,但是我的搜索把我带到了这里,所以我希望这对某人有所帮助。我试图使用 WPF WebBrowser 组件嵌入 PDF 文档。原来是 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从他对这个问题的回答中提供的解决方案。)

于 2018-12-25T01:32:51.400 回答
0

抱歉有点晚了,但我终于可以禁用滚动条了。@Devdude 的提示是关键。

要点是设置overflow = hidden,但是如何在 WPF 中做到这一点?我使用DependencyObject以便可以绑定:随时启用和禁用。

首先,您需要添加对mshtml. 在您的项目中,添加引用 add Microsoft.mshtml。然后在你的.cs文件中添加:

using mshtml;

依赖对象

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将被隐藏。

于 2017-01-13T05:33:15.690 回答