ตามการพัฒนาแอปพลิเคชัน 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
ซึ่งหมายความว่าคุณสามารถตั้งค่าอะไรเป็นเนื้อหาสำหรับมัน อะไรอย่างรวมทั้งสตริง, ตัวเลข, วันที่, การควบคุมอื่น ๆ , ภาพ, รูปร่าง, ฯลฯสามารถจัดการเท่านั้นTextBlock
strings
แม้ว่าทั้ง 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>
ให้ผลลัพธ์ของ: