带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; 
    } 

的问题是,标签“正在加载中...”没有隐瞒,和活动指示灯不显示在屏幕上。

+0

是使用INotifyPropertyChanged接口? –

+0

是的,我已经实施 –

+0

,如果你使用绑定上下文viewmodel,那么你需要在你的viewmodel中声明你的isBusy变量并在xaml.cs中设置Viewmodel.isBusy,但你也可以做简单的方法来查看我的答案。 –

如下更改您的代码,并尝试希望它的帮助:

<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

谢谢你...它工作得很好。 –