CefSharp ChromiumWebBrowser 自适应内容高度,并随页面滚动条滚动

业务需求:原生WPF页面 加WebBrowser布局,原页面已有滚动条,加了Browser后也有滚动条。

搜了无数Html转xaml的方案 打算用richTextBox实现。 搜到的库已经是十年前的framework框架了。

拆分业务需求:

  1.隐藏滚动条

  2.内容随外部wpf页面的滚动

  3.自适应内容高度

搜索到这篇文章给我启发:https://www.cnblogs.com/Lulus/p/7998210.html

于是想到用js禁用滚动条,并拿到内容的高度。 

        public MainWindow()
        {
            InitializeComponent();

            ChromiumWebBrowser.FrameLoadEnd += ChromiumWebBrowser_FrameLoadEnd;
        }


        private async void ChromiumWebBrowser_FrameLoadEnd(object sender, FrameLoadEndEventArgs e)
        {
            if (e.Frame.IsMain)
            {
                e.Browser.MainFrame.ExecuteJavaScriptAsync("document.body.style.overflow = 'hidden'");

                var documentHeight = (await e.Browser.MainFrame.EvaluateScriptAsPromiseAsync("return document.body.scrollHeight"))?.Result;

                if (documentHeight != null)
                {
                    Dispatcher.Invoke(() =>
                    {
                        ChromiumWebBrowser.Height = (int)documentHeight;
                    });
                }
            }
        }

  这样就剩下webBrowser随页面的滚动条滚动的问题了。。

  又是走了无数弯路,找虚拟树中的ScrollViewer ,找MouseWheel时间把它Raise出去,都失败了。

  最后想到只是展示用,我干脆让你穿透就好了 于是给ChromiumWebBrowser加上IsHitTestVisible="False"。 完美解决

缺点:内容不能被选中,单纯展示用

posted @ 2022-01-21 11:21  InDulGed  阅读(2057)  评论(0编辑  收藏  举报