Bloc de texte WPF, saut de ligne dans l'attribut Texte


94

Existe-t-il un moyen de \nfaire une rupture de ligne dans un TextBlock?

<TextBlock Text="line1\nLine2" />

Ou y a-t-il un meilleur moyen de forcer un saut de ligne médiane, à l'intérieur de l' Textattribut?

<LineBreak />

Cela ne fonctionne pas pour moi, cela doit être la valeur de l' Textattribut, car la chaîne de texte est définie à partir d'une source extérieure.

Je connais LineBreakmais ce n'est pas la réponse que je recherche.


2
en xaml, vous devez utiliser des caractères de contrôle <TextBlock Name = "txtBlock" Text = "Line1 & # 10; Line2" />, si vous voulez utiliser le caractère \ n cela ne fonctionne qu'à partir du code derrière txtBlock.Text = "line1 \ nline2 ";
JJ_Coder4Hire

&#dix; fonctionne très bien en xaml. Merci JJ_Coder4Hire!
Kay Lee

Réponses:


114

Je sais que cela ressuscite une vieille question, mais j'ai eu le même problème. La solution pour moi était d'utiliser des sauts de ligne codés en HTML ( &amp;#10;).

Line1&amp;#10;Line2

Ressemble à

Ligne1
Ligne2

Pour plus de caractères codés HTML, consultez w3schools


18
@Knasterbax si le texte est spécifié comme contenu entre <TextBlock>et </TextBlock>alors oui, vous en aurez besoin <LineBreak/>. &#10;fonctionne à l'intérieur de l' Textattribut:<TextBlock Text="..." />
Roman Starkov

6
"&#dix;" travaillé pour moi. Je n'avais pas besoin du "& amp;" comme mentionné cependant. Cette méthode fonctionnera également lors de la définition du texte comme suit: <Setter Property = "Text" Value = "Line 1 & # 10; & # 10; Line 2" />
EdwardM

123

Essaye ça:

<TextBlock>
    line1
    <LineBreak />
    line2
</TextBlock>

1
Je n'ai pas essayé cela directement, mais par le haut de ma tête, vous pouvez essayer xml: space = "preserve" puis incorporer directement le saut de ligne dans la propriété Text.
Paul Alexander

3
La capitalisation est importante. C'est <LineBreak />.
M. Dudley

10

Le moyen le plus simple est

<TextBlock> blabla <LineBreak /> coucou <LineBreak /> coucou 2 </TextBlock>

Donc, vous écrivez simplement du code XAML, et le <LineBreak />a exactement la même signification
en HTML ou "\ n" en C #.


1
Réponse en double à celle de Paul Alexander.
vapcguy


5

Que diriez-vous de couper la ligne en deux balises?

<StackPanel>
    <TextBlock Text="Line1" />
    <TextBlock Text="Line2" />
</StackPanel>

5

<LineBreak /> ne fonctionnera pas s'il se trouve dans une collection telle que Grid ou StackPanel. Dans de tels cas, les éléments suivants fonctionneraient comme indiqué:

LineBreak dans une collection


J'ai essayé ceci comme contenu pour un RadioButton. Tout semblait bien fonctionner jusqu'à ce que j'exécute le programme sur Windows 7. Sous Windows 7, le bouton était centré verticalement entre les deux lignes. Windows 10 aligne le bouton en haut par défaut. Alors que Windows 10 honorerait la propriété VerticalContentAlignment, Windows 7 l'ignore. J'ai dû utiliser la solution LineBreak.
mrfelis

5

La bonne façon de l'utiliser peut être la suivante:

<TextBlock>  
    <Span>text1</Span>  
    <LineBreak/>  
    <Span>text2</Span>  
</TextBlock>

3

Si vous liez le texte de TextBlock, aucune des autres réponses ne fonctionne. Ajoutez simplement '\ n' au texte de liaison à l'endroit où vous souhaitez interrompre.


2
  <HyperlinkButton 
        Content="Apply and restart this pplication!&#10;&#13;Note that modifying these settings requires the application to be restarted."   />

CRLF façon simple = !&#10;&#13;

!&#10;&#13; - Travaillez sur tous les contrôles wpf, xaml, silverlight comme TextBlock, HyperlinkText et plus


1
(corrigez votre autre réponse et

2

Cela fonctionne également très bien:

<TextBlock>
    <Run Text="My nice text"/>
    <LineBreak/>
    <LineBreak/>
    <Run Text="After some linebreaks, I'm back!"/>
</TextBlock>

1

utilisez simplement le contrôle AccessText. vous pouvez l'utiliser comme une étiquette et vous avez la propriété TextWrapping = "WrapWithOverflow"

par exemple.

Le mien est comme ça et ça marche bien. De plus, vous ne rencontrez aucun problème pour modifier le texte de manière dynamique.


1

Je suis en retard à la fête mais ... c'est plus ou moins comme ça que je l'ai fait, (attention, mes ItemSources sont des chaînes simples, non formatées, et je n'ai pas eu besoin de convertir quoi que ce soit)

public class SpaceToLineBreakConverter : IValueConverter
{   
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {            
        return (!String.IsNullOrEmpty(value as string)) 
        ? new Regex(@"\s").Replace(value as string, "\n") 
        : value;            
    }

    public object ConvertBack(object value, Type targetType, object parameter,System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

0

J'avais un problème similaire et je voulais lier une chaîne de balisage xaml à un TextBlock. Essentiellement, stocker le balisage déclaratif dans un TextBlock dans une chaîne pour une utilisation ultérieure.

Voici comment j'ai fait : j'ai sous-classé le TextBlock pour rendre InlineCollection pouvant être lié et écrit un convertisseur entre la chaîne et un InlineCollection (ou en fait une liste générique d'Inlines.)


0

cela &amp;#10;n'a pas fonctionné pour moi, lorsque j'ai utilisé la reliure. Mais cela fonctionne:

$"first line {Environment.NewLine} second line"
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.