WPF TextBlock元素和Label控件有什么区别?
以下两个片段都可以生成相同的用户界面。 那么为什么有2个控件?
Snippet1
<TextBlock>Name:</TextBlock> <TextBox Name="nameTextBox" />
Snippet2
<Label>Name:</Label> <TextBox Name="nameTextBox" />
( 嗯,我会自己回答…认为这是我今天从WPF编程中学到的有用的东西 )
WPF文本块inheritance自FrameworkElement,而不是像标签控件一样从System.Windows.Control派生。 这意味着Textblock更加轻便。 使用文本块的缺点是不支持Access / Accerelator Keys,并且没有其他控件作为目标的链接。
当你想自己显示文本使用TextBlock 。 好处是显示文本的一个轻的,高性能的方式。
当您想要将文本与另一个控件(如TextBox)相关联时,请使用Label控件 。 访问键和对目标控制的引用的好处。
标签有一个重要的焦点处理责任。它的目的是让您放置一个带有访问键的标题。 它有一个目标属性,它表示访问键的目标。 喜欢这个…
<Label Target="{Binding ElementName=nameTextBox}">_Name:</Label> <TextBox x:Name="nameTextBox" />
在没有Target属性的情况下,Label控件没有任何用处。 如果您按下表示“无法处理请求”的访问键,您将听到一声蜂鸣声
TextBlocks和Labels混淆的两个最大的原因是Windows Forms和常识。
-
当你想在Windows窗体的表单上打一小段文字时,你使用了一个Label,所以它遵循(不正确),你会用WPF Label做同样的事情。
-
常识会导致你相信一个标签是轻量级的,而一个TextBlock不是,当相反是真的。
请注意,您可以将一个TextBlock放入一个Label中。
有了TextBlock
我们可以很容易地使用TextWrapping
支持多行支持。
在这种情况下使用Label
,例如显示validation消息,需要使用比TextBlock
更简单的<AccessKey>
标签。
另一方面,使用TextBlock
不允许我们设置BorderBrush
属性。
所以,对我来说,这两个控件应该组合成一个文本全function控件。
标签需要各种数据input,如string,数字等… TextBlock,顾名思义,只接受一个文本string。
对于需要最小文本支持的情况(如控件的标签),Label可以用作TextBlock的替代方法。 使用Label可以是有利的,因为它需要更less的资源(更轻的重量),然后TextBlock。