web-dev-qa-db-fra.com

WPF Textblock, saut de ligne dans l'attribut Text

Existe-t-il un moyen d’ajouter \n un saut de ligne dans une TextBlock?

<TextBlock Text="line1\nLine2" />

Ou existe-t-il un meilleur moyen de forcer une coupure de la ligne médiane, dans l'attribut Text?

<LineBreak />

Cela ne fonctionne pas pour moi, il doit correspondre à la valeur de l'attribut Text, car la chaîne de texte est définie à partir d'une source externe.

Je connais LineBreak mais ce n'est pas la réponse que je cherche.

79
ScottCate

Je sais que c'est une question ancienne, mais j'ai eu le même problème. La solution pour moi consistait à utiliser des sauts de ligne codés HTML (&amp;#10;).

Line1&amp;#10;Line2

Ressemble à

Ligne 1
Ligne 2

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

108
Noaki

Essaye ça:

<TextBlock>
    line1
    <LineBreak />
    line2
</TextBlock>
113
Paul Alexander

Le plus simple est

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

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

10
Stephane Halimi
6
jcollum

Pourquoi ne pas diviser la ligne en deux balises?

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

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

LineBreak inside a collection

3
user2063329

La façon correcte de l’utiliser peut être la suivante:

<TextBlock>  
    <Span>text1</Span>  
    <LineBreak/>  
    <Span>text2</Span>  
</TextBlock>
3
radu florescu

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

2
newman

Je suis en retard pour la fête, mais… C'est plus ou moins la façon dont je l'ai fait (attention, mes sources d'élément 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();
    }
}
1
Dan
  <HyperlinkButton 
        Content="Apply and restart this pplication!&#10;&#13;Note that modifying these settings requires the application to be restarted."   />

CRLF simple = !&#10;&#13; 

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

1
user1551704

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 fonctionne bien. De plus, vous ne rencontrez aucun problème pour changer le texte de façon dinamique.

1
MelloG

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

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

0
Jodrell

Cela fonctionne aussi très bien:

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