WebView
コンテンツが広すぎてスクロールバーなしで表示できない場合、自動的にズームアウトしようとしています。
でラップWebView
し、実際の Web ページの幅 (JavaScript で計算) で割った ScrollViewers プロパティに基づいてScrollBar
を設定しました。ZoomFactor
ViewPortWidth
ほぼ動作していますが、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();
}
}
私はしばらくこれに固執しており、上記のあらゆる種類のバリエーションを試しましたが、すべて同じ問題がありました。
明らかな何かが欠けていますか?または、私がやろうとしていることを達成するためのより良い方法はありますか?