C++,C# UWP中用ScrollViewer代替WebView的滚动条(可更改样式)

    在UWP软件开发过程中,我们可能会用WebView来显示一些信息,但是又遇到一个问题,WebView的自带滚动条在PC中太大太丑,但是在我们更改了ScrollBar的样式后,发现WebView中的滚动条依旧是原来的样子。。。

    我的思路是在WebView外套一个ScrollViewer,然后调用JS返回页面高度,然后将其赋值给webview的Height参数。因为在webview的高度大于等于页面高度时,就不会出现滚动条。

下面则是我的解决方案,推荐写在WebView的NavigationCompleted事件里。

C++

static auto jsArray = ref new Platform::Collections::Vector<Platform::String^>;

jsArray->Append("document.documentElement.scrollHeight.toString();");//添加参数

static Windows::Foundation::Collections::IIterable<Platform::String^>^ myWebScript = jsArrary;

//注意这里的IIterable<T>^不支持lambda,而且得用Vector<T>^来初始化

//还有这些参数是static的原因是因为在下面需要在 线程 中访问它们

concurrency::create_task(webview->InvokeScriptAsync("eval", jsArray)).then([this](Platform::String^ webHeight)

{

    webview->Height = wtoi(webHeight->Data());//将Platform::String转换为int并赋值给webview的Height参数

}, concurrency::task_continuation_context::use_current());//在UI线程执行

C#

webview.Height = Convert.ToInt32(await webview.InvokeScriptAsync("eval", "document.documentElement.scrollHeight.toString();"));

Xaml

<ScrollViewer>

    <WebView Name="webview"/>

</ScrollViewer>

顺便说一下,ScrollBar的美化,可以在模板里把上下两个按钮删除,把中间的Rectangle设置RadiusX、RadiusY,大概5到7左右自己把控。最后上一张效果图(WebView在右边)


目前发现一个问题就是在触摸设备中你的触摸焦点还是会在WebView上,但是在触摸设备中的滚动条是不会挡内容的所以我相出以下解决方案,

在启动时判断通过Windows.System.Profile.AnalyticsInfo.VersionInfo.DeviceFamily来判断你的应用运行在PC或Mobile设备上来决定是否要更改WebView高度,但是一旦我们遇到了可触控的平板、笔记本之类的,这招就不是很管用了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值