0

当内容太宽而无法在没有滚动条的情况下显示时,我试图让我的WebView自动缩小。

我已经将我的 包裹WebView在 中ScrollBar,并ZoomFactor根据 ScrollViewersViewPortWidth属性除以实际网页宽度(通过 JavaScript 计算)来设置。

它几乎可以工作,但是在 ScrollViewer 缩小后,网页右侧的一部分不显示 - 看起来缺少的部分对应于未缩小时不可见的部分。这几乎就像网页在缩小时没有被重绘一样。

这是我的代码:

.xaml

<Grid>
    <ScrollViewer Name="WebScrollViewer">
        <WebView x:Name="ContentView" 
                 NavigationFailed="contentView_NavigationFailed" 
                 DOMContentLoaded="contentView_LoadCompleted" 
                 HorizontalAlignment="Left"
                 VerticalAlignment="Top" />
    </ScrollViewer>
</Grid>

。CS

 private void contentView_LoadCompleted(WebView sender, WebViewDOMContentLoadedEventArgs args) 
{
    // ask the content its width
    var widthString = ContentView.InvokeScript("eval", new[] { "document.body.scrollWidth.toString()" });
    int width;

    if (!int.TryParse(widthString, out width))
        throw new Exception(string.Format("failure/width:{0}", widthString));

    // ask the content its height
    var heightString = ContentView.InvokeScript("eval", new[] { "document.body.scrollHeight.toString()" });
    int height;
    if (!int.TryParse(heightString, out height))
        throw new Exception(string.Format("failure/height:{0}", heightString));

    if (WebScrollViewer.ViewportWidth < width)
    {

        // resize the webview to the content
        ContentView.Width = width;
        ContentView.Height = height;

        var zoomFactor = WebScrollViewer.ViewportWidth / width;

        WebScrollViewer.ZoomToFactor((float)zoomFactor);
        WebScrollViewer.InvalidateScrollInfo();

    }

}

我已经坚持了一段时间,并尝试了上述各种变体,都遇到了同样的问题。

我错过了一些明显的东西吗?还是有更好的方法来实现我想要做的事情?

4

1 回答 1

0

我想我终于把它整理好了。HorizontalScrollBarVisibilityScrollViewer默认值为Disabled。我猜当你不能水平滚动并且 ScrollViewer 的内容比 ScrollViewer 更宽时ViewPort,他们认为没有必要渲染无法查看的内容。

因此,最终修复很容易,只需修改 .xaml

<Grid>
    <ScrollViewer Name="WebScrollViewer" HorizontalScrollBarVisibility="Visible">
        <WebView x:Name="ContentView" 
                 NavigationFailed="contentView_NavigationFailed" 
                 DOMContentLoaded="contentView_LoadCompleted" 
                 HorizontalAlignment="Left"
                 VerticalAlignment="Top" />
    </ScrollViewer>
</Grid>
于 2013-11-15T00:56:05.790 回答