อะไรคือความแตกต่างระหว่างVisibility.Collapsed
และVisibility.Hidden
ใน WPF
อะไรคือความแตกต่างระหว่างVisibility.Collapsed
และVisibility.Hidden
ใน WPF
คำตอบ:
ความแตกต่างคือVisibility.Hidden
ซ่อนตัวควบคุม แต่สงวนพื้นที่ที่ครอบครองในโครงร่าง ดังนั้นมันจึงแสดงช่องว่างแทนการควบคุม
Visibilty.Collapsed
ไม่ทำให้การควบคุมและไม่จองช่องว่าง พื้นที่ที่ตัวควบคุมจะใช้คือ 'ยุบ' ดังนั้นชื่อ
ข้อความที่แน่นอนจาก MSDN:
ยุบ : อย่าแสดงองค์ประกอบและอย่าจองพื้นที่ไว้ในเลย์เอาต์
ซ่อน : อย่าแสดงองค์ประกอบ แต่สำรองพื้นที่สำหรับองค์ประกอบในโครงร่าง
มองเห็นได้ : แสดงองค์ประกอบ
ดู: http://msdn.microsoft.com/en-us/library/system.windows.visibility.aspx
ทัศนวิสัย: Hidden Vs Collapsed
พิจารณารหัสซึ่งแสดงให้เห็นว่าต่อไปนี้three Labels
และมีสองLabel
visibility
เป็นCollapsed
:
<StackPanel Orientation="Horizontal" VerticalAlignment="Top" HorizontalAlignment="Center">
<StackPanel.Resources>
<Style TargetType="Label">
<Setter Property="Height" Value="30" />
<Setter Property="Margin" Value="0"/>
<Setter Property="BorderBrush" Value="Black"/>
<Setter Property="BorderThickness" Value="1" />
</Style>
</StackPanel.Resources>
<Label Width="50" Content="First"/>
<Label Width="50" Content="Second" Visibility="Collapsed"/>
<Label Width="50" Content="Third"/>
</StackPanel>
เอาท์พุทยุบ:
ตอนนี้เปลี่ยนที่สองไปLabel
visibility
Hiddden
<Label Width="50" Content="Second" Visibility="Hidden"/>
ซ่อนผลลัพธ์:
ง่ายเหมือนที่
แม้ว่าจะเป็นด้ายเก่าสำหรับผู้ที่ยังคงมองหาความแตกต่าง:
นอกเหนือจากเลย์เอาต์ (ช่องว่าง) ที่ใช้ในซ่อนและไม่ได้อยู่ในยุบแล้วยังมีข้อแตกต่างอื่นอีก
หากเรามีตัวควบคุมแบบกำหนดเองภายในตัวควบคุมหลัก 'แบบยุบ' ในครั้งต่อไปที่เราตั้งค่าเป็นมองเห็นได้มันจะ "โหลด" ตัวควบคุมแบบกำหนดเองทั้งหมด มันจะไม่โหลดล่วงหน้าเมื่อหน้าต่างเริ่มต้นขึ้น
สำหรับ 'ซ่อน' มันจะโหลดการควบคุมที่กำหนดเองทั้งหมด + การควบคุมหลักที่เราตั้งเป็นซ่อนเมื่อเริ่ม "หน้าต่าง"