Отключить панель прокрутки WPF WebBrowser
Я пытаюсь скрыть панель прокрутки веб-браузера, но она все еще видна.
XAML:
<WebBrowser Name="wb" Width="700" Height="600"
OverridesDefaultStyle="False"
ScrollViewer.CanContentScroll="False"
ScrollViewer.HorizontalScrollBarVisibility="Hidden"
ScrollViewer.VerticalScrollBarVisibility="Hidden" />
Спасибо.
Ответы
Ответ 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
Ответ 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";
}
Ответ 3
в вашем html....
html{overflow:hidden;}
он должен решить это
или вы можете использовать метатег, чтобы указать режим рендеринга Ie
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
Ответ 4
Добавьте Microsoft.mshtml ссылки на проект. Вам не нужно изменять какие-либо свойства прокрутки в XAML, поскольку они не управляют веб-браузером при использовании mshtml. В функции 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)
}
Ответ 5
Добавление scroll="no"
в тег html body
работало для меня, в то время как других предложений здесь не было.
Ответ 6
Я сделал свой элемент управления WebBrowser более широким, чем видимая область, на 16 пикселей, что является шириной полосы прокрутки.
Это будет работать, только если ваш контроль веб-браузера коснется самого правого приложения. Элемент управления веб-браузером не позволит другим элементам XAML поверх него, но вы можете перегрузить край вашего приложения.
Я сделал это в обработчике событий Loaded для окна:
private void AppLoaded(object sender, RoutedEventArgs routedEventArgs)
{
WebBrowserView.Width = WebBrowserView.ActualWidth + 16;
}
Я обнаружил, что инъекция JavaScript на страницу, казалось, сломала некоторые страницы, и полоса прокрутки исчезла только после завершения загрузки страницы.
Ответ 7
Свойство overflow, присвоенное значению hidden
в теге body
, решает эту проблему.
Если у вас есть набор правил css для вашего тега body
, добавьте в него следующую строку:
overflow: hidden
В противном случае добавьте следующую строку к вашему конкретному замедлению тега <body>
:
style="overflow:hidden"
Ответ 8
Простите немного поздно, но я, наконец, могу отключить полосу прокрутки. Подсказка от @Devdude была ключом.
Главное - установить overflow = hidden
, но как это сделать в WPF? Я использовал DependencyObject
, чтобы я мог связывать: включать и отключать, когда захочу.
Прежде всего вам нужно добавить ссылку на mshtml
. В своем проекте добавьте ссылку add 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
будет скрыт на этот раз.