禁用WPF WebBrowser滚动条

问题描述 投票:12回答:10

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

XAML:

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

谢谢。

wpf xaml
10个回答
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了


0
投票

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

wb.Document.Body.scroll = "no"

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";
}

4
投票

在你的HTML ....

 html{overflow:hidden;}

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

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

2
投票

scroll="no"添加到html body标签为我工作,而其他建议没有。


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)
}

0
投票

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

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

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

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

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


0
投票

overflow标签上分配hidden值的body属性解决了这个问题。

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

overflow: hidden

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

style="overflow:hidden"

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


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从他对this问题的回答中获得这个解决方案。)

© www.soinside.com 2019 - 2024. All rights reserved.