Coder Perfect

How can I use WPF to wrap text in a label?

Problem

I’ve got a TextBox and a Label on my page. I run the following code after clicking a button:

 label1.Content = textbox1.Text; 

My issue is: how can I make the label’s text wrap? If there is too much text to fit on one line, I want it to automatically wrap to additional lines.

Asked by jeremychan

Solution #1

In WPF, the Label control does not support text wrapping natively. Instead, you should use a TextBlock. (Of course, if you want, you can put the TextBlock within a Label control.)

Sample code:

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

Answered by Cody Gray

Solution #2

When utilizing the Target property (which sets focus to the targeted control when using the keyboard, e.g. ALT+C in the sample code below), you can’t always substitute a Label with a TextBlock because that’s all a Label truly offers above a TextBlock.

A Label, on the other hand, uses a TextBlock to render text (if a string is placed in the Content property, which it usually is); so, you can apply a TextBlock style to the Label as follows:

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

You receive the capability of a Label while also being able to enclose the text in this way.

Answered by PaulJ

Solution #3

The following is the code I used.

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

Answered by bbdaffy

Solution #4

Inside the label, you can place a TextBlock:

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

Answered by Adrian Fâciu

Solution #5

Change the label control’s template as follows to wrap text in the label control:

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

Answered by Rajesh R. Naik

Post is based on https://stackoverflow.com/questions/5013067/how-can-i-wrap-text-in-a-label-using-wpf