标签和文本块之间的区别

发布于 2024-10-24 03:12:04 字数 234 浏览 3 评论 0原文

根据 使用 Microsoft .NET 4 进行 Windows 应用程序开发 70 -511 培训套件

Label 控件和 TextBlock 控件之间有什么区别,因为它们都是内容控件并且仅显示文本?

According to the Windows Applications Development with Microsoft .NET 4 70-511 Training Kit

What is the difference between the Label control and TextBlock control since both are content controls and just displaying text?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

谜兔 2024-10-31 03:12:04

TextBlock 不是控件

尽管 TextBlock 位于 System.Windows.Controls 命名空间中,但它不是控件。它直接派生自FrameworkElement。另一方面,Label 派生自 ContentControl。这意味着 Label 可以:

  1. 获得自定义控件模板(通过 Template 属性)。
  2. 显示字符串以外的数据(通过 Content 属性)。
  3. DataTemplate 应用于其内容(通过 ContentTemplate 属性)。
  4. 执行 ContentControl 可以执行 FrameworkElement 无法执行的其他操作。

    • 标签文本在禁用时呈灰色
    • 标签支持访问键
    • LabelTextBlock 重得多

来源

下面有一些更有趣的读物

TextBlock is not a control

Even though TextBlock lives in the System.Windows.Controls namespace, it is not a control. It derives directly from FrameworkElement. Label, on the other hand, derives from ContentControl. This means that Label can:

  1. Be given a custom control template (via the Template property).
  2. Display data other than just a string (via the Content property).
  3. Apply a DataTemplate to its content (via the ContentTemplate property).
  4. Do whatever else a ContentControl can do that a FrameworkElement cannot.

    • Label text is grayed out when disabled
    • Label supports access keys
    • Label is much heavier than TextBlock

Source

Some more interesting reads below

饮惑 2024-10-31 03:12:04

标签通常支持单行文本输出,而 TextBlock 用于多行文本显示。

例如,在wpf中,TextBlock有一个属性TextWrapping,它可以启用多行输入;标签上没有这个。

Labels usually support single line text output while the TextBlock is intended for multiline text display.

For example in wpf TextBlock has a property TextWrapping which enables multiline input; Label does not have this.

┾廆蒐ゝ 2024-10-31 03:12:04

LabelContentControl 这意味着您可以将任何内容设置为它的内容。绝对是任何东西,包括字符串、数字、日期、其他控件、图像、形状等。TextBlock 只能处理字符串

Label is ContentControl which means that you can set anything as a content for it. Absolutely anything including strings, numbers, dates, other controls, images, shapes, etc. TextBlock can handle only strings.

丶视觉 2024-10-31 03:12:04

尽管 TextBlock 和 Label 都用于显示文本,但它们在本质上有很大不同。

=> Label 继承自 ContentControl,一个基类,
可以显示几乎任何可以想象到的用户界面。

=>另一方面,TextBlock 直接从 FrameworkElement 继承,因此错过了从 Control 继承的所有元素所共有的行为。
TextBlock 的浅继承层次结构使控件比 Label 更轻,更适合更简单的非交互式场景。

PS:但是,如果您希望访问键起作用或者想要更灵活或图形化的设计,则需要使用Label。

Although TextBlock and Label are both used to display text, they are quite different under the covers.

=> Label inherits from ContentControl, a base class that
enables the display of almost any UI imaginable.

=> TextBlock, on the other hand, inherits directly from FrameworkElement, thus missing out on the behavior that is common to all elements inheriting from Control.
The shallow inheritance hierarchy of TextBlock makes the control lighter weight than Label and better suited for simpler, noninteractive scenarios.

PS: However, if you want access keys to work or want a more flexible or graphical design, you’ll need to use Label.

鸠魁 2024-10-31 03:12:04

也许 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>

产生的结果为:

在此处输入图像描述

您可以阅读更多相关信息此处

Probably the most annoying feature of TextBlock is the implicit style lookup behavior, which is scoped to only to the closest DataTemplate. This is a default behavior for non Control xaml elements.

<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>

Yields a result of:

enter image description here

You can read more about it here.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文