2012-10-17 53 views
10

WebBrowserスクロールバーを非表示にしようとしていますが、まだ表示されています。WPF WebBrowserスクロールバーを無効にする

XAML:

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

ありがとうございました。

答えて

7

ない理想的な、それは動作します:

は、プロジェクトの参照にMicrosoft.mshtmlを追加します。

<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のソリューションは動作しません。 文字列スクリプト= "document.documentElement.style.overflow = 'hidden'"を使ってスクリプトを変更する必要がありました – Ratman

4
を必要としないこの方法で次にこれにあなたのXAMLを変更

あなたのhtml ....

html{overflow:hidden;} 

それは それを解決する必要があります。または、IeはモードIは、スクロールバーの幅である16個のピクセル表示領域よりも広い私のWebBrowserコントロールを作った

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

htmlスタイルを設定することは、 WPFのWebブラウザは私に頭痛を与えている。 –

0

をレンダリング指定するmetaタグを使用することができます。

これは、ブラウザのコントロールがアプリの右端に接触している場合にのみ機能します。 Webブラウザコントロールでは、他のXAML要素をその上に置くことはできませんが、アプリの端にオーバーフローさせることができます。

私はウィンドウのLoadedイベントハンドラでこれをやった:

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

私はページにJavaScriptを注入したが、いくつかのページを破るように見えたし、ページの読み込みが完了した後、スクロールバーは消えてしまいます。

+0

これは、ユーザーがウィンドウのサイズを変更しない場合にのみ機能します。サイズが変更された場合、これを常に更新する必要があります。 –

0

hiddenbodyタグで割り当てられたプロパティoverflowがこの問題を解決します。

あなたはCSSルールセットのごbodyタグのを持っている場合は、それに次の行を追加します

overflow: hidden 

そうでない場合は、あなたの具体的な<body>タグ減速に次の行を追加します

style="overflow:hidden" 
1

Microsoft.mshtmlをプロジェクト参照に追加します。 mshtmlが使用されているときは、Webブラウザを制御していないので、XAMLのスクロールプロパティを変更する必要はありません。

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

申し訳ありませんが少し遅れて、私は最終的には、スクロールバーを無効にすることができる午前:LoadCompleted機能では次の操作を行います。 @Devdudeのヒントが鍵でした。

主なポイントはoverflow = hiddenを設定することですが、WPFでそれを行う方法は? DependencyObjectを使用してバインドできるようにしました。必要に応じて有効と無効を切り替えることができます。

まず、mshtmlへの参照を追加する必要があります。プロジェクトで、参照を追加するMicrosoft.mshtmlを追加します。次に、あなたの.csファイルの追加:

:実際に WebBrowserドキュメントの読み込みが完了した後にのみ起こるオーバーフローを、無効にする作業を行う

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拡張は、

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

htmlのbodyタグにscroll="no"を追加すると、私のために働いたが、他の提案はここにはなかった。

関連する問題