【问题标题】:How do I get HTML content to scale along with its containing WebBrowser control in WPF?如何让 HTML 内容与 WPF 中包含的 WebBrowser 控件一起缩放?
【发布时间】:2018-06-08 14:42:05
【问题描述】:

如果我缩放 WebBrowser 控件(例如使用 Viewbox),它的内容不会随之缩放。这是一个示例:

<Viewbox>
    <StackPanel Background="LightBlue">
        <Label Content="XAML xaml"/>
        <WebBrowser Source="C:\MyPath\Test.html" />
    </StackPanel>
</Viewbox>

我有一个加载和显示数百个本地 HTML 文件的 WPF 应用程序。但是,HTML 在 3840x2160 显示器上显得非常小,因为我的 Viewbox 无法像拉伸其他所有内容一样拉伸 HTML 内容。然而,我注意到我可以通过触摸手势或鼠标滚轮来缩放 WebBrowser 内容。

解决此问题的最佳方法是什么?我能想到几种探索途径。

  1. 让 WebBrowser 内容以某种方式随控件缩放。
  2. 以编程方式缩放 WebBrowser 文档以匹配 Viewbox 缩放。
  3. 寻找另一种在 WPF 中显示 HTML 内容的方法。
  4. 将 HTML 转换为 XAML。

Microsoft 提出了一个似乎与此问题相关的suggestion,我尝试按照另一个问题的答案中所述实施它:https://stackoverflow.com/a/40657760/2122672

但这对我来说真的没有意义。它似乎与禁用上下文菜单有关,而不是缩放 HTML。

【问题讨论】:

    标签: html .net wpf xaml webbrowser-control


    【解决方案1】:

    我使用了一种扩展方法来缩放,然后确保滚动条位于顶部。它需要一些不寻常的引用:用于缩放的 Microsoft Internet Controls 和用于滚动的 Microsoft.mshtml。

    public static void SetZoom(this System.Windows.Controls.WebBrowser wb, int zoom)
    {
        try
        {
            FieldInfo webBrowserInfo = wb.GetType().GetField("_axIWebBrowser2", BindingFlags.Instance | BindingFlags.NonPublic);
    
            object comWebBrowser = null;
            object zoomPercent = zoom;
    
            if (webBrowserInfo != null)
                comWebBrowser = webBrowserInfo.GetValue(wb);
            if (comWebBrowser != null)
            {
                InternetExplorer ie = (InternetExplorer)comWebBrowser;
                ie.ExecWB(OLECMDID.OLECMDID_OPTICAL_ZOOM, OLECMDEXECOPT.OLECMDEXECOPT_DONTPROMPTUSER, ref zoomPercent, IntPtr.Zero);
    
                if (wb.Document is mshtml.HTMLDocument htmlDoc)
                {
                    htmlDoc.parentWindow.scrollTo(0, 0);
                }
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-06-11
      • 1970-01-01
      • 2020-03-24
      • 2011-09-16
      • 1970-01-01
      • 2016-11-25
      相关资源
      最近更新 更多