带Webview控件的活动指示器Xamarin表单不起作用
问题描述:
我有以下代码,但它无法正常工作。带Webview控件的活动指示器Xamarin表单不起作用
<AbsoluteLayout HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" >
<StackLayout VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand" AbsoluteLayout.LayoutFlags="All"
AbsoluteLayout.LayoutBounds="0,0,1,1">
<ScrollView VerticalOptions="FillAndExpand">
<StackLayout VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand" x:Name="webViewLayout">
<WebView x:Name="webcontentcontrol" Source="{Binding WebViewSource}" VerticalOptions="FillAndExpand" HorizontalOptions="Fill"></WebView>
</StackLayout>
</ScrollView>
</StackLayout>
<StackLayout IsVisible="{Binding IsBusy}"
AbsoluteLayout.LayoutFlags="PositionProportional"
AbsoluteLayout.LayoutBounds="0.5,0.5,-1,-1">
<ActivityIndicator IsRunning="{Binding IsBusy}" Style="{StaticResource ActivityIndicatorStyle}"/>
<Label Text="Loading..." IsVisible="{Binding IsBusy}" HorizontalOptions="Center" Style="{StaticResource ActivityIndicatorLabelStyle}"/>
</StackLayout>
</AbsoluteLayout>
铯文件代码是
public AnnouncementPage()
{
InitializeComponent();
BindWebViewControl();
}
protected override void OnAppearing()
{
webViewLayout.IsVisible = false;
IsBusy= true;
}
private async void BindWebViewControl()
{
var result = await _dataService.GetAnnouncement();
webcontentcontrol.Source = result.Data.First().WebViewSource;
IsBusy = false;
webViewLayout.IsVisible = true;
}
的问题是,标签“正在加载中...”没有隐瞒,和活动指示灯不显示在屏幕上。
答
如下更改您的代码,并尝试希望它的帮助:
<AbsoluteLayout HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand" >
<StackLayout x:Name="stkWebview" VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand" AbsoluteLayout.LayoutFlags="All"
AbsoluteLayout.LayoutBounds="0,0,1,1">
<ScrollView VerticalOptions="FillAndExpand">
<StackLayout VerticalOptions="FillAndExpand" HorizontalOptions="FillAndExpand" x:Name="webViewLayout">
<WebView x:Name="webcontentcontrol" Source="{Binding WebViewSource}" VerticalOptions="FillAndExpand" HorizontalOptions="Fill"></WebView>
</StackLayout>
</ScrollView>
</StackLayout>
<StackLayout x:Name="stkLoading"
AbsoluteLayout.LayoutFlags="PositionProportional"
AbsoluteLayout.LayoutBounds="0.5,0.5,-1,-1">
<ActivityIndicator IsRunning="true" Style="{StaticResource ActivityIndicatorStyle}"/>
<Label Text="Loading..." HorizontalOptions="Center" Style="{StaticResource ActivityIndicatorLabelStyle}"/>
</StackLayout>
</AbsoluteLayout>
后面的代码看起来象下面这样:
public AnnouncementPage()
{
InitializeComponent();
BindWebViewControl();
}
protected override void OnAppearing()
{
stkWebview.IsVisible = false;
stkLoading.IsVisible = true;
}
private async void BindWebViewControl()
{
var result = await _dataService.GetAnnouncement();
webcontentcontrol.Source = result.Data.First().WebViewSource;
stkWebview.IsVisible = true;
stkLoading.IsVisible = false;
}
+0
谢谢你...它工作得很好。 –
是使用INotifyPropertyChanged接口? –
是的,我已经实施 –
,如果你使用绑定上下文viewmodel,那么你需要在你的viewmodel中声明你的isBusy变量并在xaml.cs中设置Viewmodel.isBusy,但你也可以做简单的方法来查看我的答案。 –