禁用WPF WebBrowser滚动条

时间:2012-10-17 08:37:48

标签: wpf xaml

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

XAML:

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

谢谢。

10 个答案:

答案 0 :(得分:19)

这对我有用:

<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

答案 1 :(得分: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";
}

答案 2 :(得分:4)

在你的HTML中

....

 html{overflow:hidden;}

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

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

答案 3 :(得分:2)

scroll="no"添加到html body标记对我有用,而其他建议没有。

答案 4 :(得分: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)
}

答案 5 :(得分:0)

我的WebBrowser控件比可见区域宽16个像素,这是滚动条的宽度。

仅当您的网络浏览器控件触及应用的最右侧时,此功能才有效。 Web浏览器控件不允许其上的其他XAML元素,但您可以使其溢出应用程序的边缘。

我在窗口的Loaded事件处理程序中完成了这个:

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

我发现在页面中注入JavaScript似乎打破了一些页面,滚动条只会在页面完成加载后消失。

答案 6 :(得分:0)

hidden标记上分配了body值的overflow属性解决了此问题。

如果您为body标记设置了css规则集,请在其中添加以下行:

overflow: hidden

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

style="overflow:hidden"

答案 7 :(得分:0)

抱歉有点晚了,但我终于可以禁用滚动条了。来自@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扩展,实际上是为了禁用溢出,只有在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这次都会被隐藏。

答案 8 :(得分:0)

这不是你们所有人都遇到的问题,但是我的搜索将我带到了这里,希望对您有所帮助。我试图使用WPF WebBrowser组件嵌入PDF文档。原来是PDF查看器(从浏览器调用)创建了滚动条!

要解决此问题,请在对PD文件的调用中添加参数。在我的XML中: 来源=“ http://address/file.pdf#toolbar=0&navpanes=0&scrollbar=0”

在其后面的代码中,其格式应为:http://address/file.pdf#toolbar=0&navpanes=0&scrollbar=0

(感谢leeand00提供了他对this问题的回答所提供的解决方案。)

答案 9 :(得分:0)

我用这简单的一行直接定义了文档的主体:

wb.Document.Body.scroll = "no"