缩放WPF-WebBrowser控件内容

时间:2017-01-26 10:19:40

标签: c# wpf webbrowser-control

我想在wpf WebBrowser控件中显示一个网站。但是内容大小很大,因此您可以在此处看到滚动条:

enter image description here

我想在此窗口中显示整个网站,而不调整其大小。我想在页面内放大,看起来像这样:

enter image description here

我想阻止使用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(",", ".") + ";");
}

2 个答案:

答案 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"/>

当然the other stackoverflow post's code适用于缩放。

答案 1 :(得分:0)

webBrowser.LoadCompleted += Web_LoadCompleted;

private void Web_LoadCompleted (object sender, NavigationEventArgs e)
{
    // Place your code here
}