2008-09-12 45 views
97

Trực quan cả hai đoạn mã sau đều tạo cùng một giao diện người dùng. Vì vậy, tại sao có 2 điều khiển ..
Snippet1Sự khác biệt giữa yếu tố WPF TextBlock và Kiểm soát nhãn là gì?

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

Snippet2

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

(Vâng I am gonna câu trả lời này bản thân mình ... nghĩ đây là một miếng ngon hữu ích tôi đã học hôm nay từ Programming WPF)

+3

@Rachel Tại sao câu hỏi này được đánh dấu là bản sao của câu được viết 3 năm sau đó _ (đặc biệt khi câu trả lời này có nhiều câu trả lời và câu trả lời hay hơn) _? –

Trả lời

108

Các WPF TextBlock thừa hưởng từ FrameworkElement thay vì bắt nguồn từ System.Windows.Control như Label Control. Điều này có nghĩa là Textblock nhẹ hơn nhiều. Nhược điểm của việc sử dụng một textblock là không hỗ trợ cho Access/Accerelator Keys và không có liên kết đến các điều khiển khác như mục tiêu.

Khi bạn muốn tự hiển thị văn bản, hãy sử dụng TextBlock. Lợi ích là một cách hiệu quả, nhẹ nhàng để hiển thị văn bản.

Khi bạn muốn liên kết văn bản với một điều khiển khác như Hộp văn bản, hãy sử dụng điều khiển Nhãn. Lợi ích là các khóa truy cập và tham chiếu đến điều khiển đích.

+13

@Kugel: Tôi không thấy tham chiếu đến 'Nhãn' trong trang được liên kết, vì vậy tôi không thể thấy cách biện minh cho' TextBlock' chậm hơn 'Label'. Bạn có thể vui lòng xây dựng? Nếu 'Label' sử dụng' TextBlock' để hiển thị, như là http://joshsmithonwpf.wordpress.com/2007/07/04/differences-between-label-and-textblock/ gợi ý, điều gì làm cho một 'TextBlock' chậm hơn? – Mashmagar

19

Nhãn có giá trị quan trọng tập trung xử lý trách nhiệm. Mục đích của chúng tôi là cho phép bạn đặt chú thích bằng khóa truy cập. Nó có thuộc tính Mục tiêu, cho biết mục tiêu của khóa truy cập. Như thế này ...

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

Trong trường hợp không có thuộc tính Mục tiêu, điều khiển nhãn không hữu ích. Bạn sẽ chỉ nghe thấy một tiếng bíp nếu bạn bấm phím truy cập cho thấy 'không thể xử lý yêu cầu'

+0

Có cách nào để có được Nhãn nhắm mục tiêu đến TextBox có TextBox không? –

+0

@ArsenMkrt - bạn có nghĩa là một Textbox chứa một TextBox khác không? Nếu nó có một elementName duy nhất, nó sẽ hoạt động. – Gishu

+0

Không @Gishu, ý tôi là cách duy nhất để tìm Nhãn được nhắm mục tiêu đến TextBox trong ví dụ trên của bạn, để liệt kê cây hình ảnh? –

-8

Nhãn có thể được sử dụng thay thế cho TextBlock đối với các trường hợp cần hỗ trợ văn bản tối thiểu chẳng hạn như nhãn cho điều khiển. Sử dụng Label có thể thuận lợi vì nó đòi hỏi ít tài nguyên hơn (trọng lượng nhẹ hơn) sau đó là một TextBlock.

+7

Điều này không đúng. TextBlock là đơn giản (nhẹ) trong số hai. Nó xuất phát từ FrameworkElement .. Xem câu trả lời được đánh giá hàng đầu. – Gishu

2

Với TextBlock chúng tôi có thể dễ dàng có hỗ trợ đa dòng tôi đoán - bằng cách sử dụng TextWrapping.

Sử dụng Label trong các trường hợp như vậy, ví dụ: hiển thị thông báo xác thực, cần sử dụng các thẻ <AccessKey>, ít chuyển tiếp thẳng hơn TextBlock.

Mặt khác, sử dụng TextBlock không cho phép chúng tôi đặt thuộc tính BorderBrush.

Vì vậy, với tôi, hai điều khiển phải được kết hợp thành điều khiển toàn văn bản.

+0

Ngoại trừ TextBlock không phải là một điều khiển, do đó có một lý do khá lớn để kết hợp chúng. – Joey

3

Hai lý do lớn nhất cho sự nhầm lẫn về TextBlocks và Nhãn là Windows Forms và thông thường.

  1. Khi bạn muốn tát một chút văn bản trên biểu mẫu trong Windows Forms, bạn đã sử dụng nhãn, sau đó (không chính xác) bạn sẽ làm điều tương tự với Nhãn WPF.

  2. Cảm giác thông thường sẽ dẫn bạn tin rằng Nhãn có trọng lượng nhẹ và không có TextBlock, điều ngược lại là đúng.

Lưu ý rằng bạn có thể đặt một TextBlock bên trong Nhãn.

2

Nhãn lấy tất cả các loại dữ liệu đầu vào như Chuỗi, Số vv ... TextBlock, như tên cho thấy, chỉ chấp nhận chuỗi văn bản.

Các vấn đề liên quan