【问题标题】:Disable WPF WebBrowser scrollbar禁用 WPF WebBrowser 滚动条
【发布时间】:2012-10-07 11:22:03
【问题描述】:

我正在尝试隐藏网络浏览器滚动条,但它仍然可见。

XAML:

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

谢谢。

【问题讨论】:

    标签: wpf xaml


    【解决方案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了

    【讨论】:

    • @befstrat 的解决方案不起作用,我不得不用字符串 script = "document.documentElement.style.overflow ='hidden'" 更改脚本
    【解决方案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";
    }
    

    【讨论】:

    • 滚动条还在。
    • 是哪个滚动条?内部 html 滚动条或 WebBrowser 之一?我编译了这段代码并加载了一个没有可见滚动条的网页。
    • 它是一个禁用的垂直滚动条。
    • @Sisyphe:我可以知道我需要添加什么引用才能访问 mshtml 吗?谢谢
    • 该解决方案对我来说很好,您要显示哪个页面?会不会是页面有滚动条?
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      在你的 html 中 ....

       html{overflow:hidden;}
      

      应该可以解决 或者你可以使用meta标签来指定ie渲染模式

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

      【讨论】:

      • 设置 html 样式似乎是这里最简洁的答案......不过 WPF 网络浏览器让我头疼。
      【解决方案5】:

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

      【讨论】:

        【解决方案6】:

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

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

        我已经在窗口的 Loaded 事件处理程序中完成了这项工作:

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

        我发现在页面中注入 JavaScript 似乎会破坏某些页面,并且滚动条只会在页面完成加载后才会消失。

        【讨论】:

        • 这只有在用户不调整窗口大小时才有效。如果大小发生变化,您必须不断更新。
        【解决方案7】:

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

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

        overflow: hidden
        

        否则,将以下行添加到您的具体&lt;body&gt; 标记减速:

        style="overflow:hidden"
        

        【讨论】:

          【解决方案8】:

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

          主要是设置overflow = hidden,但是在WPF中怎么做呢?我使用了DependencyObject,以便可以绑定:随时启用和禁用。

          首先您需要添加对mshtml 的引用。在您的项目中,添加引用添加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 将被隐藏。

          【讨论】:

            【解决方案9】:

            这与大家遇到的问题不太一样,但是我的搜索将我带到了这里,所以我希望这对某人有所帮助。我试图使用 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问题的回答中提供的解决方案。)

            【讨论】:

              【解决方案10】:

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

              wb.Document.Body.scroll = "no"
              

              【讨论】:

                猜你喜欢
                • 2013-03-16
                • 2013-10-14
                • 2010-12-27
                • 1970-01-01
                • 1970-01-01
                • 2012-11-03
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多