我想在wpf WebBrowser控件中显示一个网站。但是内容大小很大,因此您可以在此处看到滚动条:
我想在此窗口中显示整个网站,而不调整其大小。我想在页面内放大,看起来像这样:
我想阻止使用JavaScript。这里显示的WPF方式WPF WebBrowser - How to Zoom Content?对我来说也不起作用。它总是说mshtml.IHTMLDocument2为null。
我也想阻止使用WindowsForms。我希望有一种“唯一的XAML” - 解决这个问题的方法。
这是我的代码:
<Window x:Class="BrowserApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<WebBrowser Source="https://www.google.de/"></WebBrowser>
</Grid>
</Window>
谢谢!
修改
这是我在Webbrowser1_Navigated-Method中的代码,其中HRESULT:0x80020101-Error发生。
private void Webbrowser1_Navigated(object sender, NavigationEventArgs e)
{
double Zoom = 0.5;
mshtml.IHTMLDocument2 doc = Webbrowser1.Document as mshtml.IHTMLDocument2;
doc.parentWindow.execScript("document.body.style.zoom=" + Zoom.ToString().Replace(",", ".") + ";");
}
答案 0 :(得分:0)
它总是说mshtml.IHTMLDocument2为空。
这与Web浏览器控件的线程模型有关。您在XAML或代码中设置的任何导航都将在您离开构造函数后才能完成。这意味着您必须在Navigated事件触发后或计时器触发后执行缩放代码。
我就是这样做的。
public MainWindow()
{
InitializeComponent();
Webbrowser1.Navigate("http://www.google.com"); //won't complete until you leave this code block
Webbrowser1.Navigated += Webbrowser1_Navigated;
}
private void Webbrowser1_Navigated(object sender, NavigationEventArgs e)
{
//do your zoom code here
}
}
在您的XAML中,您可以引用该事件,但您仍然需要执行缩放部分。
<WebBrowser Navigated="Webbrowser1_Navigated" Name="Webbrowser1"/>
答案 1 :(得分:0)
webBrowser.LoadCompleted += Web_LoadCompleted;
private void Web_LoadCompleted (object sender, NavigationEventArgs e)
{
// Place your code here
}