WPF WebBrowser - 如何缩放内容?

5
尝试在WPF(C#/XAML,.NET 4.0)WebBrowser应用程序中测试基本浏览器概念。到目前为止,唯一的问题是程序化缩放。有人有这方面的经验吗? MSDN没有列出任何内容:http://msdn.microsoft.com/en-us/library/system.windows.controls.webbrowser.aspx此外,我尝试了各种方法,例如RenderTransform选项,但都无济于事。要么不可能,要么没有记录。我希望是后者。请注意,WinForm解决方案是不可接受的。 提前感谢您的帮助, Beems
3个回答

10

也许你可以像这样执行 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);

Tony,感谢您的回复。我需要在我的项目中添加什么?我遇到了以下错误:“找不到类型或命名空间名称'mshtml'(您是否缺少使用指令或程序集引用?” - Beems
1
为了使这段代码正常工作:请添加 Microsoft.mshtml .NET 引用。 - Tony
抱歉,它似乎无法识别为有效的命名空间。(“using Microsoft.mshtml.net”)。 - Beems
1
您需要右键单击项目引用并选择“添加引用”菜单。 - Tony
不要使用缩放,尝试使用变换来避免内容被推到右下角:doc.parentWindow.execScript($"document.body.style.transform='scale({Zoom})';"); - JGeerWM
显示剩余3条评论

1

我使用了这篇回答https://dev59.com/OVjUa4cB1Zd3GeqPQVa7#7326179中的一些内容来帮助解决缩放问题。关键在于ExecWB方法。Windows桌面上的缩放与WebBrowser控件上的缩放不是1对1的,你需要尝试调整。方程式的伪代码如下:

zoomLevel = (winDesktopZoom - 100) + _winDesktopZoom + 10

请注意,您需要引用SHDocVw.dll,该文件可以在C:\Windows\SysWOW64(x64机器)和C:\Windows\System32(x86机器)中找到。
这并不美观,但是除了升级到http://awesomium.com以外,我没有找到其他能够将IE默认缩放设置(默认为Windows桌面缩放)与WebBrowser控件实际匹配的方法。还要注意,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 覆盖函数中。



网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接