如何在屏幕中间显示ActivityIndi​​cator?

vis*_*arg 2 activity-indicator xamarin xamarin.forms

我创建了一个活动指示器并将其添加到StackLayout,当我使其运行时,在模拟器中它显示在右上角的Android 4.4和iOS中没有显示,在Android 6手机中,它没有显示.

var indicator = new ActivityIndicator()
            {
                Color = Color.Blue,
            };
            indicator.SetBinding(ActivityIndicator.IsVisibleProperty, "IsBusy", BindingMode.OneWay);
            indicator.SetBinding(ActivityIndicator.IsRunningProperty, "IsBusy", BindingMode.OneWay);
AbsoluteLayout.SetLayoutFlags(indicator, AbsoluteLayoutFlags.PositionProportional);
            AbsoluteLayout.SetLayoutBounds(indicator, new Rectangle(0.5, 0.5, AbsoluteLayout.AutoSize, AbsoluteLayout.AutoSize));
mainLayout.Children.Add(indicator);
Run Code Online (Sandbox Code Playgroud)

我想将活动指示器显示在屏幕中央,因为操作需要一些时间才能完成.

Kei*_*ome 8

您在状态栏中看到的指示符是IsBusy基页类的属性的默认行为.您的代码无法工作的原因是您尝试将您的可见性绑定ActivityIndicator到该属性 - 但您没有指定绑定源.如果您查看调试器的应用程序输出日志,那么您可能会看到类型为'Object'时未找到"Property'IsBusy'的消息."

要修复它,您只需要将每个绑定的绑定上下文指向表单.尝试一下:

public partial class App : Application
{
    public App ()
    {
        var mainLayout = new AbsoluteLayout ();
        MainPage = new ContentPage {
            Content = mainLayout
        };

        var containerPage = Application.Current.MainPage;

        var indicator = new ActivityIndicator() {
            Color = Color.Blue,
        };
        indicator.SetBinding(VisualElement.IsVisibleProperty, new Binding("IsBusy", BindingMode.OneWay, source: containerPage));
        indicator.SetBinding(ActivityIndicator.IsRunningProperty, new Binding("IsBusy", BindingMode.OneWay, source: containerPage));
        AbsoluteLayout.SetLayoutFlags(indicator, AbsoluteLayoutFlags.PositionProportional);
        AbsoluteLayout.SetLayoutBounds(indicator, new Rectangle(0.5, 0.5, AbsoluteLayout.AutoSize, AbsoluteLayout.AutoSize));
        mainLayout.Children.Add(indicator);

        containerPage.IsBusy = true;
    }
}
Run Code Online (Sandbox Code Playgroud)