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

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

 label1.Content = textbox1.Text; 

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



답변

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>


답변

종종 당신은을 대체 할 수 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하면 텍스트를 줄 바꿈하면서 기능을 유지할 수 있습니다.


답변

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

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


답변

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

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


답변

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

<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>


답변

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

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

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

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


답변

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

 <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>