【问题标题】:ActivityIndicator with Webview Control Xamarin Forms not working带有 Webview Control Xamarin Forms 的 ActivityIndi​​cator 不起作用
【发布时间】:2017-10-13 15:37:04
【问题描述】:

我有以下代码,但它不能正常工作。

 <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>

cs文件代码是

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

问题是标签“正在加载...”没有隐藏,并且活动指示器没有显示在屏幕上。

【问题讨论】:

  • 你使用的是INotifyPropertyChanged接口吗?
  • 是的,我已经实现了
  • 如果您使用绑定上下文视图模型,那么您需要在视图模型中声明您的 isBusy 变量并在 xaml.cs 中设置 Viewmodel.isBusy 但您也可以通过简单的方式查看我的答案。

标签: c# xamarin.forms


【解决方案1】:

如下更改您的代码并尝试希望对您有所帮助:

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

【讨论】:

  • 谢谢...它工作正常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-20
  • 2017-08-28
  • 2019-06-25
  • 2019-07-24
  • 2018-02-14
相关资源
最近更新 更多