2012-10-17 86 views
10

我想隱藏瀏覽器滾動條,但它仍然可見。禁用WPF WebBrowser滾動條

XAML:

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

謝謝。

回答

7

不理想,但它的工作原理:

添加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"; 
} 
+0

這個工作適合你嗎? – Sisyphe

+0

不,它不起作用。 – Alvin

+0

什麼不適合你? – Sisyphe

18

這個工作對我來說:

<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

@befstrat的解決方案不工作的形式,我不得不改變腳本 string script =「document.documentElement.style.overflow ='hidden'」 – Ratman

4

在您的HTML ....

html{overflow:hidden;} 

應該解決它 或者您可以使用meta標記來指定即渲染模式

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

設置html樣式似乎是最清晰的答案在這裏...儘管WPF網頁瀏覽器讓我感到頭疼。 –

0

我做了我的WebBrowser控件比可見區域寬16像素這是滾動條的寬度。

只有當您的網絡瀏覽器控件觸及您的應用程序的最右側時,纔會生效。 Web瀏覽器控件將不允許其他XAML元素在其上,但是可以使其溢出應用程序的邊緣。

我在窗口中的Loaded事件處理做到了這一點:

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

我發現注入的JavaScript到頁面中,似乎使一些網頁,一旦頁面已經完成加載滾動條只會消失。

+0

這隻有在用戶不調整窗口大小時纔有效。如果大小發生變化,您必須不斷更新。 –

0

overflow屬性賦予hiddenbody標記解決了此問題。

如果你有一個CSS規則,爲您的body標籤,將下面的行添加到它:

overflow: hidden 

否則,將下面的行添加到您的具體<body>標籤減速:

style="overflow:hidden" 
1

將Microsoft.mshtml添加到您的項目引用。您不需要更改XAML中的任何滾動屬性,因爲它們不是使用mshtml時控制Web瀏覽器的那個滾動屬性。在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

對不起有點晚,但我終於可以禁用滾動條了。關鍵是@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

1

scroll="no"添加到html body標籤爲我工作,而其他建議沒有。