WPF WebBrowser控制放大/缩小支持?

Ada*_*ane 7 wpf zoom webbrowser-control

对于WPF WebBrowser控件,有没有办法复制Internet Explorer的缩放功能?

换句话说,Internet Explorer的菜单视图>缩放> 75%,使网页的比例为75%.有没有办法让一个嵌入在WPF应用程序中的Web浏览器控件做同样的事情?

我看过这篇文章: WPF WebBrowser - 如何缩放内容?

但它似乎只是缩放页面而不是页面内容.

小智 6

public partial class TestWindow: UserControl
{
    public TestWindow()
    {
        InitializeComponent();

        browser.LoadCompleted += new LoadCompletedEventHandler(browser_LoadCompleted);
    }

    private void browser_LoadCompleted(object sender, NavigationEventArgs e)
    {
        try
        {

            FieldInfo webBrowserInfo = browser.GetType().GetField("_axIWebBrowser2", BindingFlags.Instance | BindingFlags.NonPublic);

            object comWebBrowser = null;
            object zoomPercent = 120;
            if (webBrowserInfo != null)
                comWebBrowser = webBrowserInfo.GetValue(browser);
            if (comWebBrowser != null)
            {
                InternetExplorer ie = (InternetExplorer)comWebBrowser;
                ie.ExecWB(SHDocVw.OLECMDID.OLECMDID_OPTICAL_ZOOM, SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER, ref zoomPercent, IntPtr.Zero);
            }
        }
        catch (Exception ex)
        {
        }
    }


    public void SetBrowser(string url)
    {
        browser.Navigate(url,null,null,null);

    }

    internal void Destroy()
    {
        try
        {
            if (browser.Parent != null)
            {
                ((Grid)browser.Parent).Children.Remove(browser);
                browser.Navigate("about:blank");
                browser.Dispose();
                browser = null;
            }
        }
        catch { }

    }

}
Run Code Online (Sandbox Code Playgroud)

  • 这个节省了我:)你需要添加你需要添加一个名为Microsoft Internet Controls的COM组件的引用. (2认同)

ale*_*xei 2

这不是一个确切的答案,因为它适用于 WinForms 控件,但如果您决定在 WindowsFormsHost 而不是 WPF 控件中使用它,则可能会很有用,因为 WPF 控件公开的内容太少而无用。

您可以通过 ActiveX 实例上的 ExecWB 使用 OLE 命令:OLECMDID_ZOOM用于文本大小和OLECMDID_OPTICAL_ZOOM光学缩放。例如,

object pvaIn = 200; // A VT_I4 percentage ranging from 10% to 1000%
var browserInst = ((SHDocVw.IWebBrowser2)(browserContol.ActiveXInstance));
browserInst.ExecWB(SHDocVw.OLECMDID.OLECMDID_OPTICAL_ZOOM,
                   SHDocVw.OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER,
                   ref pvaIn, IntPtr.Zero);
Run Code Online (Sandbox Code Playgroud)

一些注意事项:

  • 需要对 Interop.SHDocVw 程序集的引用
  • 该命令仅在文档加载后才会成功
  • pvaIn 的范围可以通过以下方式检索OLECMDID_GETZOOMRANGE
  • 参考命令列表位于MSDN上
  • 我经历过这种奇怪的行为,似乎只发生在非 96 dpi 上。启动时,渲染的文本大小与 OLECMDID_ZOOM 状态中存储的文本大小不对应。设置该值(为任何值)并没有修复差异:渲染的大小仍然是[存储的大小+ 2]。当光学变焦设置为 100% 时,文本大小的差异消失了(缩放到 100% 后文本大小明显缩小)。这在 IE 中并没有发生,也许这只是我的环境中的一个奇怪的工件 - 但仅供参考。