CefSharp WPF:如何隐藏滚动条并修改ChromiumWebBrowser背景
问题描述
我在WPF测试应用中使用CefSharp查看本地PDF文件,已通过在文件路径后追加#toolbar=0移除了PDF工具栏,现在需要实现两个需求:
- 修改ChromiumWebBrowser的背景色
- 隐藏PDF的滚动条
界面截图:
XAML代码
<Grid > <Grid Margin="10"> <cef:ChromiumWebBrowser Name="pdfBrowser" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"></cef:ChromiumWebBrowser> </Grid> </Grid>
后台代码
public MainWindow() { InitializeComponent(); pdfBrowser.Address = @"C:\Users\User\Desktop\USA-Pickleball-Official-Rulebook-2024-v1.pdf#toolbar=0"; }
解决方案
一、修改ChromiumWebBrowser背景色
有两种可靠方式实现背景色统一:
1. 直接设置控件背景
在XAML中给ChromiumWebBrowser添加Background属性,直接指定背景色,覆盖控件加载前的空白区域:
<cef:ChromiumWebBrowser Name="pdfBrowser" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Background="#F0F0F0"> <!-- 替换为你需要的颜色值 --> </cef:ChromiumWebBrowser>
2. 注入CSS同步PDF容器背景
如果PDF加载后容器背景与控件背景不一致,可在PDF加载完成后注入CSS,强制统一背景:
在后台代码中订阅FrameLoadEnd事件,执行样式注入:
public MainWindow() { InitializeComponent(); pdfBrowser.FrameLoadEnd += PdfBrowser_FrameLoadEnd; pdfBrowser.Address = @"C:\Users\User\Desktop\USA-Pickleball-Official-Rulebook-2024-v1.pdf#toolbar=0"; } private async void PdfBrowser_FrameLoadEnd(object sender, FrameLoadEndEventArgs e) { if(e.Frame.IsMain) { var css = @" body, .pdfViewerContainer { background-color: #F0F0F0 !important; }"; await pdfBrowser.GetMainFrame().ExecuteJavaScriptAsync($"var style = document.createElement('style'); style.textContent = `{css}`; document.head.appendChild(style);"); } }
二、隐藏滚动条
推荐两种方式结合使用,确保兼容性:
1. URL参数尝试(快速但兼容性有限)
在PDF路径后追加&scrollbar=0,部分Chromium内置PDF查看器支持该参数:
pdfBrowser.Address = @"C:\Users\User\Desktop\USA-Pickleball-Official-Rulebook-2024-v1.pdf#toolbar=0&scrollbar=0";
2. CSS注入强制隐藏(稳定兼容)
通过注入CSS强制隐藏页面滚动条,这是最可靠的方式,可和背景色注入合并:
private async void PdfBrowser_FrameLoadEnd(object sender, FrameLoadEndEventArgs e) { if(e.Frame.IsMain) { var css = @" body, html { overflow: hidden !important; /* 隐藏滚动条 */ } body, .pdfViewerContainer { background-color: #F0F0F0 !important; /* 同步背景色 */ }"; await pdfBrowser.GetMainFrame().ExecuteJavaScriptAsync($"var style = document.createElement('style'); style.textContent = `{css}`; document.head.appendChild(style);"); } }
额外提示
- 本地路径需添加
@符号避免转义错误,你的代码中已修正为@"C:\Users\..." - 建议使用最新稳定版CefSharp,避免旧版本的API兼容性问题
内容的提问来源于stack exchange,提问作者SirTalllPaul
相关产品推荐
相关产品推荐

