在视觉上,以下两个代码片段产生相同的用户界面。那么为什么会有2个控件呢?
代码片段1
<TextBlock>Name:</TextBlock>
<TextBox Name="nameTextBox" />
片段2
<Label>Name:</Label>
<TextBox Name="nameTextBox" />
(我来回答这个问题...今天我从Programming WPF 学到了一个有用的技巧!)
在视觉上,以下两个代码片段产生相同的用户界面。那么为什么会有2个控件呢?
代码片段1
<TextBlock>Name:</TextBlock>
<TextBox Name="nameTextBox" />
片段2
<Label>Name:</Label>
<TextBox Name="nameTextBox" />
(我来回答这个问题...今天我从Programming WPF 学到了一个有用的技巧!)
WPF文本块(Textblock)继承自FrameworkElement而不是像标签(Label)控件一样派生自System.Windows.Controls。这意味着文本块更加轻量级。使用文本块的缺点是不支持访问/加速键,也没有针对其他控件的链接。
当您仅想显示文本时,请使用TextBlock。该方式轻便高效地显示文本。
当您需要将文本与另一个控件(例如TextBox)关联时,请使用Label控件。其优点是具有访问键和对目标控件的引用。
标签有重要的焦点处理职责。它的目的是允许您放置一个带有访问键的标题。它具有一个Target属性,表示访问键的目标。像这样...
<Label Target="{Binding ElementName=nameTextBox}">_Name:</Label>
<TextBox x:Name="nameTextBox" />
Label接受各种数据输入,例如字符串、数字等等...... 而TextBlock,顾名思义,只接受文本字符串。
使用TextBlock
,我们可以轻松实现多行支持 - 使用TextWrapping
。
在这种情况下,例如显示验证消息时,使用Label
需要使用<AccessKey>
标记,这比TextBlock
不太直观。
另一方面,使用TextBlock
无法设置BorderBrush
属性。
因此,对我来说,应该将这两个控件合并成一个文本全功能控件。
标签可以用作 TextBlock 的替代品,适用于需要最少文本支持的情况,例如控件的标签。使用标签可能更有优势,因为它比 TextBlock 需要更少的资源(更轻量级)。