从视觉上看,以下两个片段都产生了相同的 UI。那么为什么有 2 个控件..
Snippet1
<TextBlock>Name:</TextBlock>
<TextBox Name="nameTextBox" />
片段2
<Label>Name:</Label>
<TextBox Name="nameTextBox" />
(好吧,我自己来回答这个问题......认为这是我今天从Programming WPF学到的有用的花絮)
从视觉上看,以下两个片段都产生了相同的 UI。那么为什么有 2 个控件..
Snippet1
<TextBlock>Name:</TextBlock>
<TextBox Name="nameTextBox" />
片段2
<Label>Name:</Label>
<TextBox Name="nameTextBox" />
(好吧,我自己来回答这个问题......认为这是我今天从Programming WPF学到的有用的花絮)
WPF 文本块继承自FrameworkElement ,而不是像标签控件那样从System.Windows.Control派生。这意味着 Textblock 更轻量级。使用文本块的缺点是不支持访问/加速键,并且没有链接到其他控件作为目标。
当您想单独显示文本时,请使用 TextBlock。好处是显示文本的一种轻便、高效的方式。
当您想将文本与另一个控件(如 TextBox)相关联时,请使用 Label 控件。好处是访问密钥和对目标控制的引用。
Label 有一个重要的焦点处理责任。它的目的是允许您使用访问键放置标题。它有一个Target属性,表示访问密钥的目标。像这样...
<Label Target="{Binding ElementName=nameTextBox}">_Name:</Label>
<TextBox x:Name="nameTextBox" />
在没有 Target 属性的情况下,Label 控件没有任何用处。如果您按下指示“无法处理请求”的访问键,您只会听到哔声
关于 TextBlocks 和 Labels 混淆的两个最大原因是 Windows 窗体和常识。
当您想在 Windows 窗体中的表单上添加少量文本时,您使用了标签,因此(错误地)您将使用 WPF 标签执行相同的操作。
常识会让您相信 Label 是轻量级的,而 TextBlock 不是,而事实恰恰相反。
请注意,您可以将 TextBlock 放在标签内。
TextBlock
我猜我们可以很容易地获得多线支持 -使用TextWrapping
.
在这种情况下使用Label
,例如显示验证消息,需要使用<AccessKey>
标签,这比TextBlock
.
另一方面,使用TextBlock
不允许我们设置BorderBrush
属性。
所以,对我来说,这两个控件应该组合成一个文本全功能控件。
Label 接受各种数据输入,如字符串、数字等。TextBlock,顾名思义,只接受文本字符串。
对于需要最少文本支持的情况(例如控件的标签),标签可用作 TextBlock 的替代品。使用 Label 可能是有利的,因为它比 TextBlock 需要更少的资源(更轻的重量)。