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.

ScottCate
la source
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

Noaki
la source
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>
Paul Alexander
la source
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 #.

Stéphane Halimi
la source
1
Réponse en double à celle de Paul Alexander.
vapcguy
7

<LineBreak/>

http://www.longhorncorner.com/UploadFile/mahesh/XamlLineBreak06092005152257PM/XamlLineBreak.aspx

jcollum
la source
3
Scott Je ne comprends pas votre commentaire.
jcollum
1
Le problème est que <LineBreak /> ne fonctionne pas sous Windows XP. Cela peut également avoir quelque chose à voir avec la version .NET installée. Il n'y a pas d'exceptions et aucune erreur autre que les éléments visuels ne s'affiche correctement.
Charles
5

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

<StackPanel>
    <TextBlock Text="Line1" />
    <TextBlock Text="Line2" />
</StackPanel>
Cameron MacFarland
la source
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

user2063329
la source
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>
radu florescu
la source
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.

homme nouveau
la source
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

user1551704
la source
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>
Christoffer Eriksson
la source
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.

MelloG
la source
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();
    }
}
Dan
la source
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.)

Jodrell
la source
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"
Blechdose
la source