İçerik için bir StackLayout kullanarak bir giriş sayfam var (kullanıcı adı, parola, giriş düğmesi). Kullanıcı giriş düğmesine bastıktan sonra, mevcut StackLayout içeriğinin üstünde, sayfanın mutlak merkezinde ayarlanmış bir "yükleme" bloğu istiyorum. Bazı can sıkıcı nedenlerden dolayı, bu kolay değildir. Yapılması basit, ortak bir şey gibi görünüyor - bu nasıl yapılır?Xamarin.Forms - bir öğeyi sayfada kesinlikle nasıl ortalarsınız?
5
A
cevap
11
Doğru bir etiket kullandınız: 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
}
}
};
Veya 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>
Sonuç:
en üstteki katman bir AbsoluteLayout yapmadan bunu yapmanın bir yolu var mı? B/c şimdi orada istediğim ana içeriği etkiler. Örneğin, AbsoluteLayout içindeki ana içerik bir StackLayout ise, VerticalOptions ve HorizontalOptions öğesini Layout.Center olarak ayarlayarak ortalayamıyorum (b/c bu özelliklerin herhangi bir etkisi olmayacaktır; düzen sınırlarını ayarlamanız gerekir) yığın düzenini mutlak mizanpaja eklerken mizanpaj bayrakları). – jbyrd
Seni doğru anladığımdan emin değilim. Bir çocuğu AbsoluteLayout'ta ortalamak istiyorsanız, "sınırlar" ve "bayraklar" parametrelerini sağlayarak bunu yapabilirsiniz: https://gist.github.com/lassana/effb87970c54f2097c0f –