Xamarin Forms webview 内容第一次没有显示
Xamarin Forms webview content not showing first time
我正在使用 WebView
Xamarin Forms 1.4.2
我遇到的问题似乎是一个有约束力的问题。但我不确定为什么会这样。
在我的 OnAppearing()
事件中,我从 SQLite 本地数据库中获取数据并将其填充到 WebView 中。
webview 的内容在第一次加载页面时未显示。
我在WebView下有一个ListView
。在列表视图中选择任何项目时,webview 的内容就会显示出来。
有人遇到过这种情况吗?有解决办法吗?
我将我的 webview 直接绑定到 HTML 字符串:
webview.Source = new HtmlWebViewSource
{
Html = @"<html>
<head>
<meta name='viewport' content='width=device-width; height=device-height; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;'/>
</head>
<body height='100%'>"
+ htmlstring
+ @"</body>
</html>"
};
这是因为你的台词
<meta name='viewport' content='width=device-width; height=device-height; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;'/>
更正它,或者暂时删除它并在删除后检查。
我试过下面的例子,它对我有用。
根据您在 OnAppearing
中的操作,您可能必须使用 Xamarin.Forms.Device.BeginInvokeOnMainThread(()=>{...});
包装更新。我在下面的示例中包含了它,并注释掉了它:-
XAML:-
<StackLayout>
<WebView x:Name="webView1" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand"/>
<Button x:Name="cmdLoadTestHtml1" Text="Load Test Html 1" Clicked="cmdLoadTestHtml1_Clicked"/>
</StackLayout>
代码隐藏:-
protected override void OnAppearing()
{
base.OnAppearing();
//
LoadTestHtml("OnAppearing....");
//
// Alternatively try this:-
//Xamarin.Forms.Device.BeginInvokeOnMainThread(() =>
// {
// LoadTestHtml("OnAppearing.");
// });
}
void cmdLoadTestHtml1_Clicked(object sender, EventArgs e)
{
LoadTestHtml("Button clicked");
}
void LoadTestHtml(string pstrSomeInnerContentToDisplay)
{
webView1.Source = new HtmlWebViewSource
{
Html = @"<html>
<head>
<meta name='viewport' content='width=device-width; height=device-height; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;'/>
</head>
<body height='100%'>"
+ pstrSomeInnerContentToDisplay
+ @"</body>
</html>"
};
}
我正在使用 WebView
Xamarin Forms 1.4.2
我遇到的问题似乎是一个有约束力的问题。但我不确定为什么会这样。
在我的 OnAppearing()
事件中,我从 SQLite 本地数据库中获取数据并将其填充到 WebView 中。
webview 的内容在第一次加载页面时未显示。
我在WebView下有一个ListView
。在列表视图中选择任何项目时,webview 的内容就会显示出来。
有人遇到过这种情况吗?有解决办法吗?
我将我的 webview 直接绑定到 HTML 字符串:
webview.Source = new HtmlWebViewSource
{
Html = @"<html>
<head>
<meta name='viewport' content='width=device-width; height=device-height; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;'/>
</head>
<body height='100%'>"
+ htmlstring
+ @"</body>
</html>"
};
这是因为你的台词
<meta name='viewport' content='width=device-width; height=device-height; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;'/>
更正它,或者暂时删除它并在删除后检查。
我试过下面的例子,它对我有用。
根据您在 OnAppearing
中的操作,您可能必须使用 Xamarin.Forms.Device.BeginInvokeOnMainThread(()=>{...});
包装更新。我在下面的示例中包含了它,并注释掉了它:-
XAML:-
<StackLayout>
<WebView x:Name="webView1" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand"/>
<Button x:Name="cmdLoadTestHtml1" Text="Load Test Html 1" Clicked="cmdLoadTestHtml1_Clicked"/>
</StackLayout>
代码隐藏:-
protected override void OnAppearing()
{
base.OnAppearing();
//
LoadTestHtml("OnAppearing....");
//
// Alternatively try this:-
//Xamarin.Forms.Device.BeginInvokeOnMainThread(() =>
// {
// LoadTestHtml("OnAppearing.");
// });
}
void cmdLoadTestHtml1_Clicked(object sender, EventArgs e)
{
LoadTestHtml("Button clicked");
}
void LoadTestHtml(string pstrSomeInnerContentToDisplay)
{
webView1.Source = new HtmlWebViewSource
{
Html = @"<html>
<head>
<meta name='viewport' content='width=device-width; height=device-height; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;'/>
</head>
<body height='100%'>"
+ pstrSomeInnerContentToDisplay
+ @"</body>
</html>"
};
}