2008-09-12 2 views
97

시각적으로 다음 코드 조각 모두 동일한 UI를 생성합니다. 그런데 왜이 컨트롤 ..
는 Snippet1WPF TextBlock 요소와 Label 컨트롤의 차이점은 무엇입니까?

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

Snippet2있다

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

(그럼 난이 거 대답은 나 자신입니다 ...이 내가 배운 유용한 재미있는 이야기입니다 생각했다 오늘부터 Programming WPF)

+3

@Rachel 왜이 질문은 3 년 후에 쓰여진 것과 중복 된 것으로 표시됩니까? (특히 이것은 더 많은 상향 및 더 좋은 답변이 있음) _? –

답변

108

'요청을 처리 할 수 ​​없습니다'를 나타내는 액세스 키를 누르면 당신은 경고음을 듣게 될 것입니다. 즉, Textblock은 훨씬 가볍습니다. 텍스트 블록 사용의 단점은 Access/Accerelator Keys에 대한 지원이 없으며 다른 컨트롤에 대한 대상으로 연결되지 않습니다.

텍스트를 표시하려는 경우 TextBlock을 사용하십시오. 이점은 텍스트를 표시하는 가볍고 효과적인 방법입니다.

당신은 Label 컨트롤을 사용하여 텍스트 상자와 같은 다른 컨트롤 텍스트를 연결할 때. 이점은 액세스 키와 대상 컨트롤에 대한 참조입니다.

+13

@Kugel : 링크 된 페이지에서'Label'에 대한 참조가 없기 때문에'TextBlock'이'Label'보다 느리다는 정당성을 알 수 없습니다. 정교하게 주시겠습니까? 'Label'이 렌더링을 위해'TextBlock'을 사용한다면, http://joshsmithonwpf.wordpress.com/2007/07/04/differences-between-label-and-textblock/이 제시하는 것처럼,'TextBlock'을 느리게 만드는 것은 무엇입니까? – Mashmagar

19

레이블은 중요합니다 포커스 처리 책임입니다. 그 목적은 액세스 키가있는 캡션을 배치 할 수있게하는 것입니다. 대상이이고 액세스 키의 대상을 나타냅니다. 이렇게 ...

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

대상 속성이 없으면 Label 컨트롤은 아무런 도움이되지 않습니다. 당신은 WPF TextBlock의이 FrameworkElement 대신 레이블 컨트롤처럼 System.Windows.Control에서 파생에서 상속

+0

TextBox가있는 TextBox를 대상으로하는 Label을 가져 오는 방법이 있습니까? –

+0

@ArsenMkrt - 다른 TextBox를 포함하는 Textbox입니까? 고유 한 elementName이 있으면 작동해야합니다. – Gishu

+0

@ Gishu가 없다는 의미입니다. 위의 예에서 TextBox를 대상으로 레이블을 찾아 시각적 트리를 열거 할 수있는 유일한 방법은 무엇입니까? –

-8

레이블은 컨트롤의 레이블과 같이 최소한의 텍스트 지원이 필요한 상황에서는 TextBlock 대신 사용할 수 있습니다. Label을 사용하면 TextBlock보다 리소스 (경량)가 훨씬 적기 때문에 이점이 있습니다.

+7

올바르지 않습니다. TextBlock은 두 가지 중 더 간단합니다 (가벼운). FrameworkElement에서 파생됩니다. 최상위 응답을 참조하십시오. – Gishu

2

TextWrapping을 사용하면 으로 멀티 라인 지원을 쉽게 할 수 있습니다. 이 경우, Label을 사용하면, 예를 들면, Label을 사용하면된다. 유효성 확인 메시지를 표시하려면 태그를 사용해야하며 이는 TextBlock보다 덜 간단합니다.

한편, TextBlock을 사용하면 BorderBrush 속성을 설정할 수 없습니다.

나에게있어 두 컨트롤은 텍스트 전체 기능 컨트롤로 결합되어야합니다.

+0

TextBlock이 컨트롤이 아니라는 점을 제외하면이 두 가지를 결합하는 것에는 큰 이유가 있습니다. – Joey

3

TextBlocks 및 Labels에 대한 혼란의 가장 큰 두 가지 이유는 Windows Forms와 상식입니다.당신이 WPF 라벨과 같은 일을 할 것이라고

  1. 당신이 윈도우 폼에서 폼에 텍스트의 작은 비트를 때리고 싶어

    , 당신은 라벨을 사용, 그래서 (잘못) 다음과 같습니다.

  2. 상식은 Label이 가볍고 TextBlock이 맞지 않는다고 생각하게 만듭니다.

레이블 안에 TextBlock을 넣을 수 있습니다.

2

Label은 String, Number 등과 같은 모든 종류의 데이터 입력을받습니다. 이름에서 알 수 있듯이 TextBlock은 텍스트 문자열 만 허용합니다.

관련 문제