xaml - Newline in string attribute

ID : 10428

viewed : 28

Tags : xamlxaml

Top 5 Answer for xaml - Newline in string attribute

vote vote

93

<TextBlock Text="Stuff on line1&#x0a;Stuff on line 2"/> 

You can use any hexadecimally encoded value to represent a literal. In this case, I used the line feed (char 10). If you want to do "classic" vbCrLf, then you can use &#x0d;&#x0a;

By the way, note the syntax: It's the ampersand, a pound, the letter x, then the hex value of the character you want, and then finally a semi-colon.

ALSO: For completeness, you can bind to a text that already has the line feeds embedded in it like a constant in your code behind, or a variable constructed at runtime.

vote vote

84

May be you can use the attribute xml:space="preserve" for preserving whitespace in the source XAML

<TextBlock xml:space="preserve"> Stuff on line 1 Stuff on line 2 </TextBlock> 
vote vote

79

When you need to do it in a string (eg: in your resources) you need to use xml:space="preserve" and the ampersand character codes:

<System:String x:Key="TwoLiner" xml:space="preserve">First line&#10;Second line</System:String> 

Or literal newlines in the text:

<System:String x:Key="TwoLiner" xml:space="preserve">First line  Second line</System:String> 

Warning: if you write code like the second example, you have inserted either a newline, or a carriage return and newline, depending on the line endings your operating system and/or text editor use. For instance, if you write that and commit it to git from a linux systems, everything may seem fine -- but if someone clones it to Windows, git will convert your line endings to \r\n and depending on what your string is for ... you might break the world.

Just be aware of that when you're preserving whitespace. If you write something like this:

<System:String x:Key="TwoLiner" xml:space="preserve"> First line  Second line  </System:String> 

You've actually added four line breaks, possibly four carriage-returns, and potentially trailing white space that's invisible...

vote vote

60

You need just removing <TextBlock.Text> and simply adding your content as following:

    <Grid Margin="20">         <TextBlock TextWrapping="Wrap" TextAlignment="Justify" FontSize="17">         <Bold FontFamily="Segoe UI Light" FontSize="70">I.R. Iran</Bold><LineBreak/>         <Span FontSize="35">I</Span>ran or Persia, officially the <Italic>Islamic Republic of Iran</Italic>,          is a country in Western Asia. The country is bordered on the          north by Armenia, Azerbaijan and Turkmenistan, with Kazakhstan and Russia          to the north across the Caspian Sea.<LineBreak/>         <Span FontSize="10">For more information about Iran see <Hyperlink NavigateUri="http://en.WikiPedia.org/wiki/Iran">WikiPedia</Hyperlink></Span>             <LineBreak/>             <LineBreak/>             <Span FontSize="12">                 <Span>Is this page helpful?</Span>                 <Button Content="No"/>                 <Button Content="Yes"/>             </Span>     </TextBlock>     </Grid> 

enter image description here

vote vote

53

Note that to do this you need to do it in the Text attribute you cannot use the content like

<TextBlock>Stuff on line1&#x0a;Stuff on line 2</TextBlock> 

Top 3 video Explaining xaml - Newline in string attribute

Related QUESTION?