在 Xamarin.Forms 中,每个View都有两个属性HorizontalOptions和VerticalOptions. 两者都是类型LayoutOptions,并且可以具有以下值之一:
View
HorizontalOptions
VerticalOptions
LayoutOptions
LayoutOptions.Start
LayoutOptions.Center
LayoutOptions.End
LayoutOptions.Fill
LayoutOptions.StartAndExpand
LayoutOptions.CenterAndExpand
LayoutOptions.EndAndExpand
LayoutOptions.FillAndExpand
显然它控制视图在父视图上的对齐方式。但是每个选项的行为究竟如何?Fill和suffix 和有什么不一样Expand?
Fill
Expand
Start, Center,End并Fill定义视图 在其空间内的对齐方式 。
Start
Center
End
Expand定义 它是否占用更多空间 (如果可用)。
该结构LayoutOptions控制两种不同的行为:
对齐: 视图在父视图中如何对齐?
但是,如果父级不大于其子级,您将不会注意到这些对齐之间的任何差异。对齐只对有额外可用空间的父视图很重要。
扩展: 如果可用,元素会占用更多空间吗?
同样,如果父视图不大于其子视图,则扩展后缀也没有任何区别。
让我们看一下以下示例,以了解所有八个布局选项之间的区别。
该应用程序包含一个带有八个嵌套白色按钮的深灰色StackLayout按钮,每个按钮都标有其垂直布局选项。单击其中一个按钮时,它将其垂直布局选项分配给堆栈布局。这样我们可以很容易地测试视图与父级的交互,两者都有不同的布局选项。
StackLayout
(最后几行代码添加了额外的黄色框。我们稍后再讨论。)
public static class App { static readonly StackLayout stackLayout = new StackLayout { BackgroundColor = Color.Gray, VerticalOptions = LayoutOptions.Start, Spacing = 2, Padding = 2, }; public static Page GetMainPage() { AddButton("Start", LayoutOptions.Start); AddButton("Center", LayoutOptions.Center); AddButton("End", LayoutOptions.End); AddButton("Fill", LayoutOptions.Fill); AddButton("StartAndExpand", LayoutOptions.StartAndExpand); AddButton("CenterAndExpand", LayoutOptions.CenterAndExpand); AddButton("EndAndExpand", LayoutOptions.EndAndExpand); AddButton("FillAndExpand", LayoutOptions.FillAndExpand); return new NavigationPage(new ContentPage { Content = stackLayout, }); } static void AddButton(string text, LayoutOptions verticalOptions) { stackLayout.Children.Add(new Button { Text = text, BackgroundColor = Color.White, VerticalOptions = verticalOptions, HeightRequest = 20, Command = new Command(() => { stackLayout.VerticalOptions = verticalOptions; (stackLayout.ParentView as Page).Title = "StackLayout: " + text; }), }); stackLayout.Children.Add(new BoxView { HeightRequest = 1, Color = Color.Yellow, }); } }
以下屏幕截图显示了单击八个按钮中的每一个时的结果。我们提出以下意见:
stackLayout
Button
在这里您可以找到相应的高分辨率屏幕截图。