Sự khác biệt giữa Nhãn và TextBlock


132

Theo Phát triển ứng dụng Windows với Bộ đào tạo Microsoft .NET 4 70-511

Sự khác biệt giữa Labelđiều khiển và TextBlockđiều khiển vì cả hai đều là điều khiển nội dung và chỉ hiển thị văn bản?


1
Trong Silverlight, điều khiển Nhãn sẽ tự thay đổi sau khi xác thực (văn bản có màu đỏ). Nhưng WPF thì khác.
cơn lốc

Câu trả lời:


214

TextBlock không phải là điều khiển

Mặc dù TextBlocksống trong không gian tên System.Windows.Controls, nó không phải là một điều khiển. Nó xuất phát trực tiếp từ FrameworkElement. Nhãn, mặt khác, xuất phát từ ContentControl. Điều này có nghĩa là Labelcó thể:

  1. Được cung cấp một mẫu kiểm soát tùy chỉnh (thông qua Templatetài sản).
  2. Hiển thị dữ liệu khác ngoài một chuỗi (thông qua thuộc Contenttính).
  3. Áp dụng một DataTemplatecho nội dung của nó (thông qua ContentTemplatetài sản).
  4. Làm bất cứ điều gì khác a ContentControlcó thể làm điều đó FrameworkElementkhông thể.

    • Label văn bản có màu xám khi bị vô hiệu hóa
    • Label hỗ trợ các phím truy cập
    • Label nặng hơn nhiều TextBlock

Nguồn

Một số bài đọc thú vị dưới đây


1
Về điểm thứ hai của bạn: có thể liên kết DateTime với TextBlock.
lẻRaven

26

Các nhãn thường hỗ trợ đầu ra văn bản một dòng trong khi TextBlock dành cho hiển thị văn bản nhiều dòng.

Ví dụ, trong wpf TextBlock có một thuộc tính TextWrappingcho phép đầu vào đa dòng; Nhãn không có cái này.


4
Nhãn có thuộc tính Nội dung tùy ý. Đó có thể là một chuỗi, nhưng nó cũng có thể là một TextBlock (hoặc bất kỳ điều khiển nào khác), do đó, Nhãn có thể là đa dòng bằng cách sử dụng TextBlock làm nội dung.
Jim Balter

26

LabelContentControlcó nghĩa là bạn có thể đặt bất cứ điều gì như một nội dung cho nó. Hoàn toàn bất cứ điều gì bao gồm chuỗi, số, ngày, điều khiển khác, hình ảnh, hình dạng, vv chỉ TextBlockcó thể xử lý strings.


3
"các điều khiển khác" bao gồm TextBlock, do đó, một Nhãn có thể chứa văn bản được bọc.
Jim Balter

9

Mặc dù TextBlock và Nhãn đều được sử dụng để hiển thị văn bản, nhưng chúng khá khác nhau dưới bìa.

=> Nhãn kế thừa từ ContentControl , một lớp cơ sở cho phép hiển thị hầu hết mọi giao diện người dùng có thể tưởng tượng được.

=> TextBlock , mặt khác, kế thừa trực tiếp từ FrameworkEuity , do đó bỏ lỡ hành vi phổ biến đối với tất cả các thành phần kế thừa từ Control. Hệ thống phân cấp kế thừa nông của TextBlock giúp điều khiển có trọng lượng nhẹ hơn Nhãn và phù hợp hơn với các kịch bản đơn giản hơn, không tương tác.

PS: Tuy nhiên, nếu bạn muốn các phím truy cập hoạt động hoặc muốn thiết kế đồ họa hoặc linh hoạt hơn, bạn sẽ cần sử dụng Nhãn.


0

Có lẽ tính năng khó chịu nhất TextBlocklà hành vi tra cứu kiểu ngầm định, chỉ nằm trong phạm vi gần nhất DataTemplate. Đây là một hành vi mặc định cho các Controlyếu tố không 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>

Mang lại kết quả của:

nhập mô tả hình ảnh ở đây

Bạn có thể đọc thêm về nó ở đây .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.