c# - Xamarin.Forms - 如何使页面上的元素绝对居中?

标签 c# xamarin.forms loading center absolutelayout

我有一个使用 StackLayout 来显示内容(用户名、密码、登录按钮)的登录页面。用户单击登录按钮后,我希望在页面的绝对中心、现有 StackLayout 内容的顶部设置一个“加载” block 。由于某些恼人的原因,这并不简单。这似乎是一件简单、常见的事情 - 这是如何完成的?

最佳答案

您使用了正确的标签:AbsoluteLayout .


var loadingView = new StackLayout
{
    Padding = 6,
    Orientation = StackOrientation.Horizontal,
    BackgroundColor = Color.Gray,
    Children =
    {
        new ActivityIndicator
        {
            Color = Color.White,
            IsRunning = true,
            VerticalOptions = LayoutOptions.Center,
            WidthRequest = 20,
            HeightRequest = 20
        },
        new Label 
        {
            TextColor = Color.White,
            Text = "Loading...",
            VerticalOptions = LayoutOptions.Center
        }
    }
};

var layout = new AbsoluteLayout
{
    Padding = 0,
    HorizontalOptions = LayoutOptions.FillAndExpand,
    VerticalOptions = LayoutOptions.FillAndExpand,
    Children =
    {
        {
            new BoxView {Color = Color.Green}, 
            new Rectangle(0, 0, 1, 1), 
            AbsoluteLayoutFlags.All
        },
        {
            loadingView, 
            new Rectangle(0.5, 0.5, -1, -1), 
            AbsoluteLayoutFlags.PositionProportional
        }
    }
};

或 XAML:

<?xml version="1.0" encoding="UTF-8"?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml" x:Class="ArtiSO.LoadingPage">
    <ContentPage.Content>
        <AbsoluteLayout Padding="0" HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
            <BoxView Color="Lime" AbsoluteLayout.LayoutBounds="0, 0, 1, 1" AbsoluteLayout.LayoutFlags="All" />
            <StackLayout Padding="6" Orientation="Horizontal" BackgroundColor="Gray" AbsoluteLayout.LayoutBounds="0.5, 0.5, -1, -1" AbsoluteLayout.LayoutFlags="PositionProportional">
                <ActivityIndicator Color="White" IsRunning="true" VerticalOptions="Center" WidthRequest="20" HeightRequest="20" />
                <Label TextColor="White" Text="Loading..." VerticalOptions="Center" />
            </StackLayout>
        </AbsoluteLayout>
    </ContentPage.Content>
</ContentPage>

结果:

Preview

关于c# - Xamarin.Forms - 如何使页面上的元素绝对居中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36182658/

相关文章:

c# - 正确填充多维数组

c# - Xamarin mediaPicker.TakePhotoAsync 使应用程序崩溃

jquery - 命令“show()”在 jquery 提交表单中不起作用?

C++ 在控制台加载栏时使用处理能力/时间

javascript - 动态加载的元素不在 HTML 源代码中

c# - ListViewItem IsSelected Binding - 适用于 WPF,但不适用于 WinRT

c# - (何时)是否需要调用 SHA1Managed.Initialize()?

c# - 报告定义无效

c# - DateTime.ToString(String, IFormatProvider) 不适用于 Xamarin.Forms 中的波斯语 CultureInfo "fa-IR"

c# - DisplayAlert 之前的事件指示器