2008-09-12 34 views
97

以下兩種片段都可以生成相同的用戶界面。那麼,爲什麼會有2個控制..
Snippet1WPF TextBlock元素和Label控件有什麼區別?

<TextBlock>Name:</TextBlock> 
<TextBox Name="nameTextBox" /> 

Snippet2

<Label>Name:</Label> 
<TextBox Name="nameTextBox" /> 

好吧,我會回答這個自己......認爲這是一個有益的珍聞我學到今天從Programming WPF

+3

@Rachel爲什麼這個問題被標記爲3年後寫的_(尤其是考慮到這個問題有更多的讚揚和更好的答案)_? – 2015-06-16 03:03:40

回答

108

的WPF文本塊從FrameworkElement的,而不是從System.Windows.Control派生類的標籤控件繼承的訪問鍵。這意味着Textblock更輕量。使用文本塊的缺點是不支持Access/Accerelator鍵,並且沒有鏈接到其他控件作爲目標。

如果您想單獨顯示文本,請使用TextBlock。好處是顯示文本的一種輕鬆,高效的方式。

當你想與像一個TextBox另一個控制文本使用的Label控件關聯。好處是訪問鍵和對目標控制的引用。

19

標籤有一個重要的重點處理責任。它的目的是讓您放置一個帶有訪問鍵的標題。它有一個目標屬性,它指示訪問密鑰的目標。像這樣...

<Label Target="{Binding ElementName=nameTextBox}">_Name:</Label> 
<TextBox x:Name="nameTextBox" /> 

在沒有Target屬性的情況下,Label控件沒有任何用處。你只聽到一聲蜂鳴聲,如果你按指示「無法處理請求」

+0

有沒有什麼辦法可以獲得定位到帶有TextBox的TextBox的Label? – 2012-04-04 10:31:13

+0

@ArsenMkrt - 你的意思是包含另一個文本框的文本框?如果它有一個唯一的elementName,它應該工作。 – Gishu 2012-04-04 11:47:14

+0

否@Gishu,我的意思是在上面的示例中找到定位到TextBox的Label的唯一方法,以枚舉可視化樹? – 2012-04-04 11:53:51

-8

對於需要最小文本支持的情況(如控件的標籤),標籤可用作TextBlock的替代方案。使用Label可以是有利的,因爲它需要更少的資源(更輕的重量),然後是TextBlock。

2

隨着TextBlock我們可以很容易地得到多線支持我猜 - 使用TextWrapping

在這種情況下使用Label,例如,顯示驗證消息,需要使用<AccessKey>標籤,這比TextBlock更簡單。

另一方面,使用TextBlock不允許我們設置BorderBrush屬性。

因此,對我來說,這兩個控件應該組合成一個文本全功能控件。

3

有關TextBlocks和標籤混淆的兩個最大原因是Windows窗體和常識。

  1. 當你想一巴掌文本的一個小一點在Windows窗體窗體上,您使用的標籤,因此它遵循(錯誤地),你會做同樣的事情用一個WPF標籤。

  2. 常識會讓你相信一個標籤是輕量級的,而一個TextBlock不是,當情況正好相反時。

請注意,您可以將TextBlock放入標籤內。

2

標籤需要各種類型的數據輸入,如字符串,數字等...... TextBlock,顧名思義,只接受一個文本字符串。

相關問題