คำตอบสั้น ๆ
Start, Center, EndและFillกำหนดมุมมองของการจัดตำแหน่งภายในพื้นที่ของตน
Expandกำหนดว่าจะใช้พื้นที่มากขึ้นถ้ามี
ทฤษฎี
โครงสร้างLayoutOptionsควบคุมพฤติกรรมที่แตกต่างกันสองอย่าง:
การจัดแนว: มุมมองจัดแนวภายในมุมมองพาเรนต์อย่างไร
Start: สำหรับการจัดแนวตั้งมุมมองจะถูกย้ายไปด้านบน สำหรับการจัดตำแหน่งแนวนอนโดยปกติแล้วจะอยู่ทางด้านซ้ายมือ (แต่โปรดทราบว่าในอุปกรณ์ที่มีการตั้งค่าภาษาจากขวาไปซ้ายนี่เป็นอีกทางหนึ่งเช่นจัดชิดขวา)
Center: มุมมองอยู่กึ่งกลาง
End: โดยปกติมุมมองจะจัดชิดด้านล่างหรือขวา (แน่นอนว่าภาษาจากขวาไปซ้ายจัดชิดซ้าย)
Fill: การจัดตำแหน่งนี้จะแตกต่างกันเล็กน้อย มุมมองจะขยายไปทั่วขนาดเต็มของมุมมองพาเรนต์
อย่างไรก็ตามหากผู้ปกครองไม่ใหญ่กว่าลูกของคุณคุณจะไม่สังเกตเห็นความแตกต่างระหว่างการจัดแนวเหล่านั้น การจัดตำแหน่งจะทำเฉพาะมุมมองพาเรนต์เท่านั้นที่มีพื้นที่เพิ่มเติม
การขยายตัว: องค์ประกอบจะใช้พื้นที่มากขึ้นหรือไม่ถ้ามี
- คำต่อท้าย
Expand: หากมุมมองพาเรนต์มีขนาดใหญ่กว่าขนาดรวมของเด็กทั้งหมดเช่นพื้นที่เพิ่มเติมจะมีอยู่พื้นที่นั้นจะถูกจัดสัดส่วนตามมุมมองของเด็กด้วยส่วนต่อท้ายนั้น เด็กเหล่านั้นจะ "ครอบครอง" พื้นที่ของพวกเขา แต่ไม่จำเป็นต้อง "เติม" มัน เราจะดูพฤติกรรมนี้ในตัวอย่างด้านล่าง
- ไม่มีคำต่อท้าย: เด็กที่ไม่มี
Expandคำต่อท้ายจะไม่ได้รับพื้นที่เพิ่มเติมแม้ว่าจะมีพื้นที่ว่างเพิ่มขึ้นก็ตาม
อีกครั้งถ้ามุมมองพาเรนต์ไม่ใหญ่กว่าลูกของมันส่วนต่อท้ายการขยายก็ไม่ได้สร้างความแตกต่างเช่นกัน
ตัวอย่าง
ลองมาดูตัวอย่างต่อไปนี้เพื่อดูความแตกต่างระหว่างตัวเลือกเค้าโครงทั้งแปด
แอพประกอบด้วยสีเทาเข้ม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แน่น (ไม่ใช่Fillเพจ) ตัวเลือกเลย์เอาต์แนวตั้งของแต่ละรายการButtonนั้นเล็กน้อย
- ตัวเลือกเลย์เอาต์แนวตั้งนั้นสำคัญหาก
stackLayoutมีขนาดใหญ่ขึ้น (เช่นผ่านFillการจัดตำแหน่ง) และปุ่มแต่ละปุ่มจะมีExpandคำต่อท้าย
- พื้นที่เพิ่มเติมถูกแบ่งสัดส่วนอย่างชัดเจนในทุกปุ่มด้วย
Expandคำต่อท้าย เมื่อต้องการดูสิ่งนี้ชัดเจนยิ่งขึ้นเราได้เพิ่มเส้นแนวนอนสีเหลืองระหว่างปุ่มสองปุ่มที่อยู่ใกล้เคียง
- ปุ่มที่มีพื้นที่มากกว่าความสูงที่ร้องขอไม่จำเป็นต้อง "เติม" ในกรณีนี้พฤติกรรมที่แท้จริงจะถูกควบคุมโดยการจัดตำแหน่งของพวกเขา เช่นมีการจัดแนวทั้งด้านบนกึ่งกลางหรือปุ่มของพื้นที่หรือเติมให้สมบูรณ์
VerticalOptionsปุ่มทั้งหมดครอบคลุมทั่วทั้งความกว้างของรูปแบบตั้งแต่เราปรับเปลี่ยน

ที่นี่คุณจะพบภาพหน้าจอความละเอียดสูงที่เกี่ยวข้อง