ตามการพัฒนาแอปพลิเคชัน Windows ด้วย Microsoft .NET 4 70-511 Training Kit
อะไรคือความแตกต่างระหว่างการLabelควบคุมและTextBlockการควบคุมเนื่องจากทั้งสองเป็นตัวควบคุมเนื้อหาและเพียงแค่แสดงข้อความ
ตามการพัฒนาแอปพลิเคชัน Windows ด้วย Microsoft .NET 4 70-511 Training Kit
อะไรคือความแตกต่างระหว่างการLabelควบคุมและTextBlockการควบคุมเนื่องจากทั้งสองเป็นตัวควบคุมเนื้อหาและเพียงแค่แสดงข้อความ
คำตอบ:
แม้ว่าจะTextBlockอาศัยอยู่ในเนมสเปซ System.Windows.Controls แต่ก็ไม่ใช่ตัวควบคุม FrameworkElementมันเกิดโดยตรงจาก ฉลากบนมืออื่น ๆ ContentControlที่เกิดขึ้นจาก ซึ่งหมายความว่าLabelสามารถ:
Templateคุณสมบัติ)Contentคุณสมบัติ)DataTemplateกับเนื้อหา (ผ่านContentTemplateคุณสมบัติ)ทำทุกอย่างที่ContentControlทำได้ที่FrameworkElementไม่สามารถทำได้
Label ข้อความจะเป็นสีเทาเมื่อปิดใช้งานLabel รองรับคีย์การเข้าถึงLabel หนักกว่ามาก TextBlockอ่านเพิ่มเติมที่น่าสนใจด้านล่าง
ป้ายกำกับมักรองรับเอาต์พุตข้อความบรรทัดเดียวในขณะที่ TextBlock มีไว้สำหรับการแสดงข้อความหลายบรรทัด
ตัวอย่างเช่นใน wpf TextBlock มีคุณสมบัติTextWrappingที่เปิดใช้งานการป้อนข้อมูลแบบหลายบรรทัด ฉลากไม่มีสิ่งนี้
Labelเป็นContentControlซึ่งหมายความว่าคุณสามารถตั้งค่าอะไรเป็นเนื้อหาสำหรับมัน อะไรอย่างรวมทั้งสตริง, ตัวเลข, วันที่, การควบคุมอื่น ๆ , ภาพ, รูปร่าง, ฯลฯสามารถจัดการเท่านั้นTextBlockstrings
แม้ว่าทั้ง TextBlock และ Label จะใช้เพื่อแสดงข้อความ แต่ก็มีความแตกต่างกันมากภายใต้หน้าปก
=> เลเบลสืบทอดมาจากContentControlซึ่งเป็นคลาสพื้นฐานที่เปิดใช้งานการแสดง UI เกือบทั้งหมดเท่าที่จะเป็นไปได้
=> ในทางกลับกันTextBlockสืบทอดโดยตรงจากFrameworkElementดังนั้นจึงพลาดพฤติกรรมที่มักเกิดกับองค์ประกอบทั้งหมดที่สืบทอดมาจาก Control ลำดับชั้นการสืบทอดแบบตื้นของ TextBlock ทำให้การควบคุมมีน้ำหนักเบากว่า Label และเหมาะกว่าสำหรับสถานการณ์ที่เรียบง่ายและไม่โต้ตอบ
PS: อย่างไรก็ตามหากคุณต้องการให้คีย์การเข้าถึงทำงานหรือต้องการการออกแบบที่ยืดหยุ่นหรือกราฟิกมากขึ้นคุณจะต้องใช้ Label
คุณสมบัติที่น่ารำคาญที่สุดTextBlockคือพฤติกรรมการค้นหาสไตล์โดยนัยซึ่งถูกกำหนดขอบเขตให้ใกล้เคียงที่สุดDataTemplateเท่านั้น นี่เป็นลักษณะการทำงานเริ่มต้นสำหรับControlองค์ประกอบที่ไม่ใช่xaml
<StackPanel Orientation="Vertical">
<StackPanel.Resources>
<Style TargetType="TextBlock">
<Setter Property="Foreground" Value="Red"/>
</Style>
<Style TargetType="Label">
<Setter Property="Foreground" Value="Red"/>
</Style>
</StackPanel.Resources>
<ContentControl Content="Test">
<ContentControl.ContentTemplate>
<DataTemplate>
<TextBlock Text="{Binding}"/>
</DataTemplate>
</ContentControl.ContentTemplate>
</ContentControl>
<ContentControl Content="Test">
<ContentControl.ContentTemplate>
<DataTemplate>
<Label Content="{Binding}"/>
</DataTemplate>
</ContentControl.ContentTemplate>
</ContentControl>
</StackPanel>
ให้ผลลัพธ์ของ: