标签和TextBlock之间的区别

根据Windows应用程序开发与Microsoft.NET 4 70-511培训工具包

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

TextBlock不是一个控件

即使TextBlock居住在System.Windows.Controls命名空间,它不是一个控件。 它直接从FrameworkElement派生。 另一方面,标签派生自ContentControl 。 这意味着Label可以:

  1. 给定一个自定义控件模板(通过Template属性)。
  2. 显示除了string之外的数据(通过Content属性)。
  3. DataTemplate应用于其内容(通过ContentTemplate属性)。
  4. 做一个ContentControl可以做的任何事情,一个FrameworkElement不能。

    • 禁用时, Label文本呈灰色显示
    • Label支持访问键
    • LabelTextBlock重得多

资源

下面有一些更有趣的内容

LabelContentControl ,这意味着你可以设置任何东西作为它的内容。 绝对包括string,数字,date,其他控件,图像,形状等TextBlock只能处理strings

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

例如在WPF TextBlock有一个属性TextWrapping ,它启用多行input; 标签没有这个。

虽然TextBlock和Label都是用来显示文本的,但是它们在封面上是完全不同的。

=> 标签inheritance自ContentControl ,它是一个基类,可以显示几乎任何可以想象的UI。

另一方面, TextBlock直接从FrameworkElementinheritance,因此错过了从Controlinheritance的所有元素的通用行为。 TextBlock的浅inheritance层次使得控件比Label更轻,更适合于更简单的非交互式场景。

PS:但是,如果你想访问键工作或想要更灵活或graphicsdevise,你需要使用标签。