WPF WebBrowser - 如何缩放内容?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WPF WebBrowser - 如何缩放内容?相关的知识,希望对你有一定的参考价值。
尝试在WPF(C#/ XAML,.NET 4.0)WebBrowser应用程序中测试基本浏览器概念。到目前为止,唯一的问题是以编程方式缩放。有没有人有这方面的经验?
MSDN没有列出任何内容:http://msdn.microsoft.com/en-us/library/system.windows.controls.webbrowser.aspx此外,我尝试了各种各样的东西,如RenderTransform选项无济于事。这是不可能的或没有记录。我希望后者。请注意,WinForm解决方案是不可接受的。
提前感谢任何帮助,Beems
也许你可以像这样执行一个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);
我使用了这个答案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控件。另请注意,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覆盖中。
你可以看到这个:
http://chriscavanagh.wordpress.com/2010/10/04/a-real-net-4-0-webbrowser/
以上是关于WPF WebBrowser - 如何缩放内容?的主要内容,如果未能解决你的问题,请参考以下文章
WPF:如何在弹出窗口中自动调整 WebBrowser 的大小?
如何通过 MVVM 在 WPF WebBrowser 控件上使用 Javascript