WPF - 设置Web浏览器滚动条的宽度

时间:2016-07-27 10:18:15

标签: c# wpf winforms

我正在尝试更改WebBrowser控件滚动条的宽度。

我尝试按照this回答更改ScrollViewer这样的内容:

<WebBrowser Grid.Row="0" Grid.RowSpan="5" Grid.Column="0" Height="1993" Margin="3,3,0,3">
    <ScrollViewer>
        <ScrollViewer.Resources>
            <sys:Double x:Key="{x:Static SystemParameters.VerticalScrollBarWidthKey}">100</sys:Double>
        </ScrollViewer.Resources>
    </ScrollViewer>
</WebBrowser>

但我收到The type 'WebBrowser' does not support direct content错误。

我知道WebBrowser的{​​{1}}只是WPF的封套,所以我猜这就是我收到此错误的原因。

我不想使用WinForm's或其他浏览器等外部组件。

是否可以使用原生CefSharp

谢谢

1 个答案:

答案 0 :(得分:0)

WPF WebBrowser控件实际上将本机WebBrowser ActiveX控件包装在其中。这并没有真正改变答案,但很高兴知道。

正如Reza Aghaei已经评论过的那样,滚动条不是WPF控件,不能像WPF应用程序中的其他滚动条那样进行修改。但是,我不认为您可以使用CSS更改IE滚动条的宽度,因为样式仅限于着色:

scrollbar-base-color: #C0C0C0;
scrollbar-base-color: #C0C0C0;
scrollbar-3dlight-color: #C0C0C0;
scrollbar-highlight-color: #C0C0C0;
/* etc */

有两种可能性浮现在脑海中。您可以使用其中一个jQuery滚动条库来自定义滚动条,或者使用原生WPF ScrollBar代替。

使用jQuery滚动条会强制您在用户访问的每个页面上注入javascript,当网站已经使用自定义jQuery滚动条时,它可能会变得非常脏。这可能值得研究,但我怀疑它在实践中是否会运作良好。

以下是我要尝试的内容

  1. 通过将overflow:hidden样式赋予每个页面的正文来隐藏滚动条。您还可以在WebBrowser控件中托管Windows窗体WindowsFormsHost,这样您就可以访问ScrollBarsEnabled属性(遗憾的是,WPF控件上没有该属性)。
  2. ScrollBar控件旁边添加WPF WebBrowser并按照您希望的方式设置样式。实际上,这可能是UserControl,以确保未来的可重用性。
  3. 将WPF ScrollBar的最大值设置为HTML页面的ScrollHeight。
  4. 订阅WPF ScrollBar的滚动事件。将滚动事件发送到HTML页面。您还需要以另一种方式执行此操作,以使WPF ScrollBar与使用触摸,鼠标滚轮或键盘按钮发生的滚动同步。
  5. 我现在不在电脑上,所以无法帮助数字3和4,但它肯定是可能的。再次,你可以遇到使用一些自定义滚动(jQuery)的页面,但希望这可以让你开始。