Comment puis-je ajouter un saut de ligne au texte lorsqu'il est défini comme attribut, c'est-à-dire:
<TextBlock Text="Stuff on line1 \n Stuff on line2" />
Le décomposer en format éclaté n'est pas une option pour ma situation particulière. Ce dont j'ai besoin, c'est d'un moyen d'imiter les éléments suivants:
<TextBlock>
<TextBlock.Text>
Stuff on line1 <LineBreak/>
Stuff on line2
</TextBlock.Text>
<TextBlock/>
Peut-être que vous pouvez utiliser l'attribut xml: space = "preserve" pour préserver les espaces dans le XAML source
la source
xml:space="preserve"
l'on conservera également les espaces de retrait, qui sont généralement présents dans XAML. Ainsi, une explicite<LineBreak />
comme suggéré ci-dessus semble être une solution plus propre.Lorsque vous avez besoin de le faire dans une chaîne (par exemple: dans vos ressources) , vous devez utiliser
xml:space="preserve"
et les codes de esperluette:Ou des nouvelles lignes littérales dans le texte:
Avertissement: si vous écrivez du code comme dans le deuxième exemple, vous avez inséré soit une nouvelle ligne, soit un retour chariot et une nouvelle ligne, selon les fins de ligne utilisées par votre système d'exploitation et / ou l'éditeur de texte. Par exemple, si vous écrivez cela et le validez dans git à partir d'un système Linux, tout peut sembler correct - mais si quelqu'un le clone vers Windows, git convertira vos fins de ligne en
\r\n
et en fonction de la destination de votre chaîne ... vous pourrait briser le monde.Soyez conscient de cela lorsque vous préservez des espaces. Si vous écrivez quelque chose comme ça:
Vous avez en fait ajouté quatre sauts de ligne, peut-être quatre retours chariot, et éventuellement un espace blanc à la fin qui est invisible ...
la source
xml:space="preserve"
attribut àResourceDictionary
trop, de sorte que vous n'avez pas besoin de l'appliquer à chaque chaîne de ressource.<System:String x:Key="TwoLiner" xml:space="preserve">First line Second line</System:String>
(avec un saut de ligne entre la première ligne et la deuxième ligne)xml:space="preserve"
Vous devez simplement supprimer
<TextBlock.Text>
et simplement ajouter votre contenu comme suit:la source
Notez que pour ce faire, vous devez le faire dans l'attribut Text, vous ne pouvez pas utiliser le contenu comme
la source
Peut-être que quelqu'un préfère
avec
xmlns:s="clr-namespace:System;assembly=mscorlib"
.la source
Pour ceux qui ont essayé toutes les réponses à cette question et se grattent toujours la tête pour savoir pourquoi aucun d'entre eux ne fonctionne pour vous, vous avez peut-être rencontré une forme du problème que j'ai rencontré.
Ma
TextBlock.Text
propriété était à l'intérieur d'unToolTipService.ToolTip
élément et elle était liée à une propriété d'un objet dont les données étaient extraites d'une procédure stockée SQL. À présent, les données de cette propriété particulière dans la procédure stockée étaient extraites d'une fonction SQL.Comme rien n'avait fonctionné pour moi, j'ai abandonné ma recherche et créé la classe de convertisseur ci-dessous:
J'ai fini par devoir utiliser la
Enivornment.NewLine
méthode de la réponse de @ dparker . J'ai demandé au convertisseur de rechercher toute représentation textuelle possible d'une nouvelle ligne et de la remplacer parEnvironment.NewLine
.Ça a marché!
Cependant, j'étais toujours perplexe quant à la raison pour laquelle aucune des autres méthodes ne fonctionnait avec des propriétés de databound.
J'ai laissé un commentaire sur la réponse acceptée de @ BobKing :
Il a répondu par:
Une ampoule s'est éteinte!
Je suis entré dans ma fonction SQL, remplacé mes représentations textuelles de sauts de ligne par ...
... retiré le convertisseur de ma
TextBlock.Text
reliure, et juste comme ça ... ça a marché!la source
J'ai trouvé cela utile, mais j'ai rencontré quelques erreurs lors de l'ajout à une balise "Content = ..." dans XAML.
J'avais plusieurs lignes dans le contenu et j'ai découvert plus tard que le contenu conservait des espaces blancs même si je ne l'avais pas spécifié. donc pour contourner cela et l'avoir "ignorer" l'espace blanc, j'ai implémenté comme ça.
J'espère que ceci aide quelqu'un d'autre.
(La sortie est composée de trois lignes de texte avec une ligne vide entre chacune.)
la source
Je me rends compte que c'est sur une question plus ancienne mais je voulais juste ajouter que
fonctionne également si vous le faites via du code.
la source
ce n'est pas qu'il est important de savoir, mais ce que vous spécifiez entre les balises TextBlock est appelé contenu en ligne et va dans la propriété TextBlock.Inlines qui est un InlineCollection et contient des éléments de type Inline. Les sous-classes d'Inline sont Run et LineBreak, entre autres. voir TextBlock.Inlines
la source
Ne fonctionne pas non plus avec
Pas grand-chose, juste besoin d'utiliser
au lieu.
la source
la source
Code derrière la solution
la source