0

WebViewコンテンツが広すぎてスクロールバーなしで表示できない場合、自動的にズームアウトしようとしています。

でラップWebViewし、実際の Web ページの幅 (JavaScript で計算) で割った ScrollViewers プロパティに基づいてScrollBarを設定しました。ZoomFactorViewPortWidth

ほぼ動作していますが、ScrollViewer をズームアウトした後、Web ページの右側の一部が表示されません。ズームアウトしていないときに表示されなかった部分が欠落部分に対応しているように見えます。ズームアウトしても Web ページが再描画されていないようです。

これが私のコードです:

.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 の内容が よりも広い場合、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 に答える