คำตอบสั้น ๆ
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
ปุ่มทั้งหมดครอบคลุมทั่วทั้งความกว้างของรูปแบบตั้งแต่เราปรับเปลี่ยน
ที่นี่คุณจะพบภาพหน้าจอความละเอียดสูงที่เกี่ยวข้อง