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.
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>
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.
J'ai utilisé le code suivant.
<Label>
<Label.Content>
<AccessText TextWrapping="Wrap" Text="xxxxx"/>
</Label.Content>
</Label>
Vous pouvez mettre un TextBlock dans l’étiquette:
<Label>
<TextBlock Text="Long Text . . . ." TextWrapping="Wrap" />
</Label>
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>
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
.
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>
<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>
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;
essayez d'utiliser ceci
lblresult.Content = lblresult.Content + "prime are :" + j + "\n";