Xamarin 窗体 - 将光标更改为等待光标



在大多数桌面应用程序中,如果您正在等待某些内容,鼠标光标将变为等待光标。显然,手机有点不同。但是,在 UWP 领域,我们希望在发生异步操作时将鼠标光标更改为等待光标。

有没有办法在标准 Xamarin 窗体中执行此操作?或者,使用第三方库?

希望是在手机上,会有其他一些视觉指示器表明某些事情正在发生。 即键盘颜色变化或类似的东西。

如果没有,我猜我将不得不为每个平台实现一些依赖注入的代码。有什么提示吗?

不是你UWP问题的答案,但这是你在电话上处理事情的方式:

您可以在整个页面上添加一个Grid,并将其设置为灰色和半透明,以便页面的其余部分"变灰"。然后在Grid中间添加一个ActivityIndicator,以指示正在加载某些内容。将GridIsVisible设置为指示正在加载/发生的某事的布尔值。

这是我在我的一个页面上得到的:

<Grid BackgroundColor="##60000000"
        IsVisible="{Binding IsLoading}">
    <Grid VerticalOptions="CenterAndExpand">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width=".5*" />
            <ColumnDefinition Width="9*" />
            <ColumnDefinition Width=".5*" />
        </Grid.ColumnDefinitions>
        <Frame Grid.Column="1"
                HorizontalOptions="Center"
                VerticalOptions="Center"
                Padding="0"
                HasShadow="True"
                OutlineColor="#e6e6e6">
            <Grid BackgroundColor="White"
                    RowSpacing="0"
                    ColumnSpacing="0">
                <StackLayout>
                    <ActivityIndicator IsRunning="true"
                                        Margin="10"
                                        HorizontalOptions="Center"
                                        VerticalOptions="Center" />
                    <Label Text="{i18n:Translate Text=loading_contacts}"
                            Margin="20,0,20,10"
                            HorizontalOptions="Center"
                            VerticalOptions="Center"/>
                </StackLayout>     
            </Grid>
        </Frame>
    </Grid>
</Grid>

Mine与Dennis的答案类似,但有更多的重用。

我在 App.xaml 中创建了一个控件模板

   <ControlTemplate x:Key="ActivityIndicatorTemplate">
        <Grid>
            <ContentPresenter />
            <StackLayout Style="{StaticResource BlockingPanel}"
                         IsVisible="{TemplateBinding BindingContext.IsBusy}">
                <ActivityIndicator Style="{StaticResource ActivityIndicatorStyle}"
                                   IsVisible="{TemplateBinding BindingContext.IsBusy}"
                                   IsRunning="{TemplateBinding BindingContext.IsBusy}" />
            </StackLayout>
        </Grid>
    </ControlTemplate>

以下是样式

    <Style x:Key="BlockingPanel" TargetType="StackLayout">
        <Setter Property="BackgroundColor" Value="{StaticResource BlockingColor}" />
        <Setter Property="HorizontalOptions" Value="FillAndExpand" />
        <Setter Property="VerticalOptions" Value="FillAndExpand" />
    </Style>
    <Style x:Key="ActivityIndicatorStyle" TargetType="ActivityIndicator">
        <Setter Property="Color" Value="White" />
        <Setter Property="HorizontalOptions" Value="CenterAndExpand" />
        <Setter Property="VerticalOptions" Value="CenterAndExpand" />
    </Style>
   <Color x:Key="BlockingColor">
        <x:Arguments>
            <x:Double>0</x:Double>
            <x:Double>0</x:Double>
            <x:Double>0</x:Double>
            <x:Double>0.75</x:Double>
        </x:Arguments>
    </Color>

然后你可以在这样的任何页面上使用它

<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="Incident.Pages.LoginPage"
             ControlTemplate="{StaticResource ActivityIndicatorTemplate}"
             Title="Login">
...
</ContentPage>

最新更新