web-dev-qa-db-fra.com

Comment insérer du texte dans une étiquette à l'aide de WPF?

J'ai un TextBox et une étiquette. Après avoir cliqué sur un bouton, j'exécute le code suivant:

 label1.Content = textbox1.Text; 

Ma question est la suivante: comment puis-je activer l'habillage du texte de l'étiquette? Il y a peut-être trop de texte à afficher sur une ligne, et je souhaite que le texte soit automatiquement renvoyé à plusieurs lignes, le cas échéant.

232
jeremychan

Le contrôle Label ne prend pas directement en charge le retour à la ligne dans WPF. Vous devriez utiliser un TextBlock à la place. (Bien sûr, vous pouvez placer le TextBlock à l'intérieur d'un contrôle Label, si vous le souhaitez.)

Exemple de 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>
358
Cody Gray

Souvent, vous ne pouvez pas remplacer un Label par un TextBlock si vous souhaitez utiliser la propriété Target (qui active le contrôle ciblé lorsque vous utilisez le clavier, par exemple ALT + C dans l'exemple de code ci-dessous), comme c'est tout un Label offre réellement sur un TextBlock.

Cependant, un Label utilise un TextBlock pour restituer le texte (si une chaîne est placée dans la propriété Content, ce qui est généralement le cas); par conséquent, vous pouvez ajouter un style pour TextBlock à l'intérieur de Label comme suit:

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

De cette façon, vous gardez les fonctionnalités d'un Label tout en pouvant envelopper le texte.

104
PaulJ

J'ai utilisé le code suivant.

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

Vous pouvez mettre un TextBlock dans l’étiquette:

<Label> 
  <TextBlock Text="Long Text . . . ." TextWrapping="Wrap" /> 
</Label> 
32
Adrian Fâciu

Pour insérer du texte dans le contrôle d'étiquette, modifiez le modèle d'étiquette comme suit:

<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>
13
Rajesh R. Naik

Au lieu d'utiliser une classe Label, je recommanderais d'utiliser un TextBlock . Cela vous permet de définir le TextWrapping de manière appropriée.

Vous pouvez toujours faire:

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

Cependant, si tout ce "label" est destiné à afficher du texte, utilisez plutôt un TextBlock.

10
Reed Copsey

Nous devons mettre une sorte de contrôle qui peut envelopper le texte comme textblock/textbox

 <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>
4
Kylo Ren
 <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
Khalid

J'ai utilisé cela pour récupérer des données de la base de données MySql:

AccessText a = new AccessText();    
a.Text=reader[1].ToString();       // MySql reader
a.Width = 70;
a.TextWrapping = TextWrapping.WrapWithOverflow;
labels[i].Content = a;
2
DiogoA.

essayez d'utiliser ceci

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