如何把一个新的行到一个WPF TextBlock控件?

我从XML文件中提取文本,我想插入一些由textblock渲染解释为新行的新行。

我试过了:

<data>Foo bar baz \n baz bar</data> 

但数据仍然显示没有新的行。 我通过C#的.Text属性设置<data>的内容。

我需要在XML中放置什么才能在GUI中显示新行?

我已经尝试过这样的手动设置XAML中的文本:

 <TextBlock Margin="0 15 0 0" Width="600"> There 
 is a new line. </TextBlock> 

虽然编码的字符没有出现在GUI中,但它并没有给我一个新的线。

您可以尝试在数据中添加新行:

 <data>Foo bar baz baz bar</data> 

如果这不起作用,你可能需要手动parsingstring。

如果你需要直接的XAML,那么很简单:

 <TextBlock> Lorem <LineBreak/> Ipsum </TextBlock> 

你也可以使用绑定

 <TextBlock Text="{Binding MyText}"/> 

并像这样设置MyText:

 Public string MyText { get{return string.Format("My Text \n Your Text");} } 

你必须使用

  < SomeObject xml:space="preserve" > once upon a time ... this line will be below the first one < /SomeObject> 

或者如果你喜欢:

  <SomeObject xml:space="preserve" /> once upon a time... &#10; this line below < / SomeObject> 

注意:如果你们两个都使用&10,并且你在文本的下一行,你会有两个空行。

这里的细节: http : //msdn.microsoft.com/en-us/library/ms788746.aspx

即使这是一个老问题,我刚刚遇到了问题,并解决了不同于给定的答案。 也许这可能对别人有帮助。

我注意到,即使我的XML文件如下所示:

 <tag> <subTag>content with newline.\r\nto display</subTag> </tag> 

当它被读入我的C#代码string有双反斜杠。

 \\r\\n 

为了解决这个问题,我写了一个ValueConverter去除额外的反斜杠。

 public class XmlStringConverter : IValueConverter { public object Convert( object value, Type targetType, object parameter, CultureInfo culture) { string valueAsString = value as string; if (string.IsNullOrEmpty(valueAsString)) { return value; } valueAsString = valueAsString.Replace("\\r\\n", "\r\n"); return valueAsString; } public object ConvertBack( object value, Type targetType, object parameter, CultureInfo culture) { throw new NotImplementedException(); } } 

为了完整性:您也可以这样做:

  <TextBlock Text="Line1&#x0a;Line 2"/> 

如果一切都失败了,你也可以使用

 "My text needs a line break here" + System.Environment.NewLine + " This should be a new line" 
 <TextBlock Margin="4" TextWrapping="Wrap" FontFamily="Verdana" FontSize="12"> <Run TextDecorations="StrikeThrough"> Run cannot contain inline</Run> <Span FontSize="16"> Span can contain Run or Span or whatever <LineBreak /> <Bold FontSize="22" FontFamily="Times New Roman" >Bold can contains <Italic>Italic</Italic></Bold></Span> </TextBlock>