業務需求:原生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"。 完美解決
缺點:內容不能被選中,單純展示用