WPF를 사용하여 레이블의 텍스트를 어떻게 줄 바꿈 할 수 있습니까?


251

나는이 TextBox와 레이블. 버튼을 클릭 한 후 다음 코드를 실행합니다.

 label1.Content = textbox1.Text; 

내 질문은 레이블의 텍스트 줄 바꿈을 어떻게 활성화합니까? 한 줄에 표시 할 텍스트가 너무 많을 경우 여러 줄로 자동 줄 바꿈하고 싶습니다.

답변:


390

Label컨트롤은 직접 WPF에서 텍스트 배치를 지원하지 않습니다. TextBlock대신 사용해야합니다 . (물론 원하는 경우 컨트롤 TextBlock 내부 에 배치 할 수 있습니다 Label.)

샘플 코드 :

<TextBlock TextWrapping="WrapWithOverflow">
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec adipiscing
    nulla quis libero egestas lobortis. Duis blandit imperdiet ornare. Nulla
    ac arcu ut purus placerat congue. Integer pretium fermentum gravida.
</TextBlock>

30
... IsReadOnly="true"라벨을 모방하도록 설정 :)
JulianM

7
이것은 괜찮지 만 Label의 Target 속성 기능을 사용하려는 경우에는 적합하지 않습니다. 공평하게 말하면 TextBlock보다 Label을 사용하는 유일한 이유 일 것 입니다. 이 질문에 대한 답변을 제공하여 라벨에 포장하는 방법 (아래)
PaulJ

24
JulianM-그들은 이미 읽기 전용 stackoverflow.com/questions/5073244/making-textblock-readonly ? 아마 그들은 2011 년에
없었을 것입니다

12
@JulianM 당신은 혼동 TextBlockTextBox? - TextBlock의 읽기 전용 된 WPF는 "아발론"라는 코드는 이후.
BrainSlugs83

양식의 Padding="5"다른 Label컨트롤 의 패딩과 일치 하도록 설정해야했습니다 . 아래 Rajesh의 답변을 참조하십시오.
밥 카우프만

105

종종 당신은을 대체 할 수 Label로모그래퍼 : TextBlock당신이 원하는대로 사용할 수있는 Target(세트가에 초점 재산 대상으로 그 모든이의로, 아래의 샘플 코드에서 키보드 예를 들어, ALT + C를 사용하는 경우 제어) Label정말 이상 제공 TextBlock.

그러나 a LabelTextBlock텍스트를 렌더링 하기 위해 a 를 사용합니다 (문자열이 Content속성에 배치 된 경우 ). 따라서 TextBlock다음 Label과 같이 내부 스타일을 추가 할 수 있습니다 .

<Label              
    Content="_Content Text:"
    Target="{Binding ElementName=MyTargetControl}">
    <Label.Resources>
        <Style TargetType="TextBlock">
            <Setter Property="TextWrapping" Value="Wrap" />
        </Style>
    </Label.Resources>
 </Label>
 <CheckBox x:Name = "MyTargetControl" />

이렇게 Label하면 텍스트를 줄 바꿈하면서 기능을 유지할 수 있습니다.


3
이것이 실제로 작동합니까? 내가 본 것에서 WPF가 추가 한 텍스트 블록이 논리 트리에 존재하지 않으며 리소스를 선택하지 않습니다.
Gusdor

2
그렇습니다. 효과가 있습니다. 답변을 게시하기 전에 테스트했습니다. 대상 요소는 논리 트리에 없지만 여기에서 중요한 트리입니다.
PaulJ

11
이것은 몇 살이지만 VS 2015에서는 작동하지 않는 것 같습니다. 작동하는 것처럼 보이는 것은 <Label> <TextBlock TextWrapping = "Wrap"Text = "Whatever"/> </ Label> 레이블에 TextBlock을 사용하는 것입니다.
David

93

다음 코드를 사용했습니다.

    <Label>
        <Label.Content>
            <AccessText TextWrapping="Wrap" Text="xxxxx"/>
        </Label.Content>
    </Label>

4
이것이 저에게 가장 효과적이었습니다. 간단하고 다른 컨트롤을 사용하거나 많은 코드를 추가 할 필요가 없습니다.
Yisela

3
@jeremychan, 나는 이것을 대답으로 표시 할 것입니다. 나는 아래로 스크롤 하여이 답변을 보니 기쁘다.
Mehrad

나는 위로 투표를 되돌립니다. 나는 이것을 사용하려고 시도했지만 내 "HorizontalAlignment ="Center ""를 우회했습니다. TextBlock의를 사용하여 달리하지 ... 한
잭 프로스트

4
레이블 태그 내의 내용은 자동으로 내용이므로 Label.Content 부분은 필요하지 않습니다. 그럼에도 불구하고 TextBlock을 사용하는 모든 솔루션이 이와 관련하여 실패하는 액세스 키를 제공하는 기능을 유지하므로 탁월한 대답입니다.
Rob G

35

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

<Label> 
  <TextBlock Text="Long Text . . . ." TextWrapping="Wrap" /> 
</Label> 

4
TextBlock에 추가 스타일을 만들지 않고도 Label 스타일을이 텍스트 블록에 적용 할 수 있기 때문에이 방법이 마음에 듭니다.
Sogger

15

레이블 컨트롤에서 텍스트를 줄 바꿈하려면 다음과 같이 레이블의 템플릿을 변경하십시오.

<Style x:Key="ErrorBoxStyle" TargetType="{x:Type Label}">
        <Setter Property="BorderBrush" Value="#FFF08A73"/>
        <Setter Property="BorderThickness" Value="1"/>
        <Setter Property="Foreground" Value="Red"/>
        <Setter Property="Background" Value="#FFFFE3DF"/>
        <Setter Property="FontWeight" Value="Bold"/>
        <Setter Property="Padding" Value="5"/>
        <Setter Property="HorizontalContentAlignment" Value="Left"/>
        <Setter Property="VerticalContentAlignment" Value="Top"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Label}">
                    <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true" CornerRadius="5" HorizontalAlignment="Stretch">

                        <TextBlock TextWrapping="Wrap" Text="{TemplateBinding Content}"/>
                    </Border>

                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

부록 : 텍스트 줄 바꿈 또는 기타 TextBlock 관련 속성을 추가해야하는 경우 다음 레시피와 혼합 할 수 있습니다. stackoverflow.com/questions/3970285/…
Yury Schkatula

12

Label 클래스를 사용하는 대신 TextBlock을 사용하는 것이 좋습니다 . 이를 통해 TextWrapping을 적절하게 설정할 수 있습니다 .

당신은 항상 할 수 있습니다 :

 label1.Content = new TextBlock() { Text = textBox1.Text, TextWrapping = TextWrapping.Wrap };

그러나이 "라벨"이 모두 텍스트를 표시하는 것이라면 TextBlock대신 사용하십시오 .


동적 레이블 내용을 채우는 데이 방법을 사용했습니다. 가장 쉽고 깨끗한 방법 인 것 같습니다. Label label1 = new Label() { Content = new TextBlock() { Text = caption, TextWrapping = TextWrapping.Wrap }, FontWeight = FontWeights.Normal };
line1을

4

우리는 텍스트 블록 / 텍스트 상자와 같은 텍스트를 줄 바꿈 할 수있는 일종의 컨트롤을 넣어야합니다.

 <Label Width="120" Height="100" >
        <TextBlock TextWrapping="Wrap">
            this is a very long text inside a textblock and this needs to be on multiline.
        </TextBlock>
    </Label>

2

이것을 사용해보십시오

lblresult.Content = lblresult.Content + "prime are :" + j + "\n";

2
 <Label x:Name="datetimeofmsg" 
           HorizontalAlignment="Left" Margin="4.286,55,0,0" 
           VerticalAlignment="Top" Background="{x:Null}" 
           FontWeight="Bold" Width="61.714" Height="20" Foreground="White">
        <Label.Content>
            <AccessText TextWrapping="Wrap"/>
        </Label.Content>
    </Label>

2

이것을 사용하여 MySql 데이터베이스에서 데이터를 검색했습니다.

AccessText a = new AccessText();    
a.Text=reader[1].ToString();       // MySql reader
a.Width = 70;
a.TextWrapping = TextWrapping.WrapWithOverflow;
labels[i].Content = a;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.