WPF WebBrowser - 如何缩放内容?

时间:2011-02-25 20:51:12

标签: wpf xaml .net-4.0 expression-blend

尝试在WPF(C#/ XAML,.NET 4.0)WebBrowser应用程序中测试基本浏览器概念。到目前为止,唯一的问题是以编程方式缩放。有没有人有这方面的经验?

MSDN没有列出任何内容:http://msdn.microsoft.com/en-us/library/system.windows.controls.webbrowser.aspx 另外,我尝试过各种各样的东西,比如RenderTransform选项无济于事。这是不可能的或没有记录。我希望后者。请注意,WinForm解决方案是不可接受的。

提前感谢您的帮助, Beems

3 个答案:

答案 0 :(得分:8)

也许你可以执行这样的javascript。

document.body.style.zoom = 1.5;

在WPF中,我们可以操作文档。我为您创建了一个扩展方法,因此您可以设置缩放:

// www.tonysistemas.com.br
public static partial class MyExtensions
{
    public static void SetZoom(this System.Windows.Controls.WebBrowser WebBrowser1, double Zoom)
    {
        // For this code to work: add the Microsoft.mshtml .NET reference      
        mshtml.IHTMLDocument2 doc = WebBrowser1.Document as mshtml.IHTMLDocument2;
        doc.parentWindow.execScript("document.body.style.zoom=" + Zoom.ToString().Replace(",", ".") + ";");
    }
}

用法:

WebBrowser1.SetZoom(0.5);

答案 1 :(得分:1)

我使用了这个答案https://stackoverflow.com/a/7326179/17822中的点点滴滴来帮助解决缩放问题。这里的关键是ExecWB方法。 Windows桌面上的缩放与WebBrowser控件上的缩放不是1-1。你将不得不玩它。等式的伪代码如下所示:

zoomLevel = (winDesktopZoom - 100) + _winDesktopZoom + 10

请注意,您需要一个对SHDocVw.dll的引用,该引用可以在x64机器的C:\ Windows \ SysWOW64和x86机器的C:\ Windows \ System32中找到。

这不是很好,但它是我发现的唯一的东西,没有升级到http://awesomium.com,实际上将IE默认缩放设置(默认为Windows桌面缩放)与WebBrowser Control匹配。另请注意,Windows桌面缩放仅适用于Vista,Win 7以及可能的2k8以及控制面板 - >显示,但我没有检查Vista或2k8。它不适用于XP(任何服务包)。

要获得Windows桌面缩放(由于某些原因,这确实适用于XP)我做了:

var presentSource = PresentationSource.FromVisual(this);

if (presentSource != null && presentSource.CompositionTarget != null 
    && presentSource.CompositionTarget.TransformToDevice != null)
{
    _zoomPercentage = Convert.ToInt32(100 * presentSource.CompositionTarget.TransformToDevice.M11);
}

此逻辑位于该XAML窗口的OnSourceInitialized覆盖中。

答案 2 :(得分:0)