如何把一个新的行到一个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... 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
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>