2012-10-17 11 views
10

Próbuję ukryć pasek przewijania przeglądarki, ale jest on nadal widoczny.Wyłącz pasek przewijania przeglądarki WebFrowser WPF

XAML:

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

Dziękuję.

Odpowiedz

7

Nie idealne, ale to działa:

Dodaj Microsoft.mshtml do odesłania projektu. Następnie zmienić XAML do tego:

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

iw tył kodzie:

private void wb_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e) 
{ 
    mshtml.IHTMLDocument2 dom = (mshtml.IHTMLDocument2)wb.Document; 
    dom.body.style.overflow = "hidden"; 
} 
+0

Czy ta praca była dla Ciebie? – Sisyphe

+0

Nie, to nie działa. – Alvin

+0

Co nie działało dla ciebie? – Sisyphe

18

Działa to dla mnie:

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

W ten sposób nie trzeba MSHTML

+1

Rozwiązanie @befstrat nie działa, musiałem zmienić skrypt za pomocą string script = "document.documentElement.style.overflow = 'hidden'" – Ratman

4

w swoim html ...

html{overflow:hidden;} 

powinno rozwiązać to lub użyć tagu meta, aby określić Ie uczynić tryb

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

Ustawienie stylu html wydaje się być najczystszym z odpowiedzi tutaj ... przeglądarka internetowa WPF daje mi jednak bóle głowy. –

0

Zrobiłem moja kontrola WebBrowser szerszy niż widoczny obszar o 16 pikseli, który jest szerokość paska przewijania.

Będzie to działać tylko wtedy, gdy kontrolka przeglądarki dotknie prawej strony aplikacji. Kontrola przeglądarki nie zezwala na umieszczanie innych elementów XAML, ale możesz sprawić, że przepełni to brzeg Twojej aplikacji.

Robiłem to w załadowanym obsługi zdarzeń za oknem:

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

znalazłem wstrzyknięcie kodu JavaScript do strony wydawało się złamać kilka stron i przewijania będzie tylko znikają po stronie skończył załadunek.

+0

Działa to tylko wtedy, gdy użytkownik nie zmieni rozmiaru okna. Będziesz musiał stale aktualizować to, jeśli zmieni się rozmiar. –

0

Właściwość o wartości hidden przypisana wartości hidden w znaczniku body rozwiązuje ten problem.

Jeśli masz regułę ustawiony css dla tagu body, dodaj następującą linię do niego:

overflow: hidden 

W przeciwnym razie, należy dodać następujący wiersz do betonu <body> tag opóźnienia:

style="overflow:hidden" 
1

Dodaj Microsoft.mshtml do referencji projektu. Nie musisz zmieniać żadnej z właściwości przewijania w XAML, ponieważ nie są one tymi, które kontrolują przeglądarkę, gdy używany jest mshtml. W funkcji LoadCompleted wykonaj następujące czynności:

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

Przepraszam za późno, ale w końcu mogę wyłączyć pasek przewijania. Wskazówka z @Devdude była kluczem.

Głównym celem jest ustawienie overflow = hidden, ale jak to zrobić w WPF? Użyłem DependencyObject, dzięki czemu mogę wiązać: włączać i wyłączać, kiedy tylko chcę.

Przede wszystkim należy dodać odniesienie do mshtml. W swoim projekcie dodaj odniesienie dodaj Microsoft.mshtml. Następnie w pliku .cs dodać:

using mshtml; 

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

The WebBrowser rozszerzenie, które faktycznie działa, aby wyłączyć przelewu, który zdarza się tylko po WebBrowser Dokument ładowania jest zakończony:

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

Do użycia w XAML

<WebBrowser ns:WebBrowserUtility.HideScrollBar="True"/> 

Uwaga: Upewnij się, że naciągasz WebBrowser, aby zobaczyć całą zawartość. Bez względu na to, tym razem scrollbar zostanie ukryty.

1

Dodanie scroll="no" do tagu html body zadziałało dla mnie, podczas gdy inne sugestie tutaj nie.

Powiązane problemy