我正在从XML文件中提取文本,我想插入一些由textblock渲染为新行的新行。
我试过了:
<data>Foo bar baz \n baz bar</data>
但数据仍然显示没有新行。我通过C#。
通过<data>
属性设置.Text
的内容
我需要在XML中添加什么才能在GUI中呈现新行?
我尝试过这样的手动设置XAML中的文本:
<TextBlock Margin="0 15 0 0" Width="600">
There
is a new line.
</TextBlock>
虽然编码字符没有出现在GUI中,但它也没有给我一个新的行。
答案 0 :(得分:156)
您可以尝试在数据中添加新行:
<data>Foo bar baz
baz bar</data>
如果这不起作用,您可能需要手动解析字符串。
如果您需要直接的XAML,那么很容易:
<TextBlock>
Lorem <LineBreak/>
Ipsum
</TextBlock>
答案 1 :(得分:49)
为了完整性:您也可以这样做:
<TextBlock Text="Line1
Line 2"/>
答案 2 :(得分:19)
您也可以使用绑定
<TextBlock Text="{Binding MyText}"/>
并将MyText设置为:
Public string MyText
{
get{return string.Format("My Text \n Your Text");}
}
答案 3 :(得分:18)
你必须使用
< 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>
注意:如果你们都使用&amp; 10并且你转到文本的下一行,那么你将有两行空行。
这里有详细信息: http://msdn.microsoft.com/en-us/library/ms788746.aspx
答案 4 :(得分:11)
即使这是一个老问题,我也只是遇到了问题并且从给定的答案中解决了它。也许它对其他人有帮助。
我注意到即使我的XML文件看起来像:
<tag>
<subTag>content with newline.\r\nto display</subTag>
</tag>
当它被读入我的C#代码时,字符串有双反斜杠。
\\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();
}
}
答案 5 :(得分:9)
如果其他所有方法都失败了,您也可以使用
"My text needs a line break here" + System.Environment.NewLine + " This should be a new line"
答案 6 :(得分:8)
<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>
答案 7 :(得分:1)
使用System.Environment.NewLine是唯一对我有用的解决方案。 当我尝试\ r \ n时,它只是在文本框中重复了实际的\ r \ n。
答案 8 :(得分:0)
您必须确保文本块启用了此选项:
AcceptsReturn="True"
答案 9 :(得分:0)
像这样在RichTextBox“ rtb”中插入“换行符”或“段落符”:
var range = new TextRange(rtb.SelectionStart, rtb.Selection.End);
range.Start.Paragraph.ContentStart.InsertLineBreak();
range.Start.Paragraph.ContentStart.InsertParagraphBreak();
获取NewLine项的唯一方法是,首先插入带有“ \ r \ n”项的文本,然后再应用更多适用于Selection和/或TextRange对象的代码。这样可以确保将\ par项转换为\ line项,按需要保存,并且在重新打开* .Rtf文件时仍然正确。经过艰苦的努力,到目前为止,这是我发现的。我的三个代码行需要被更多的代码(带有循环)包围,以设置TextPointer项目(.Start .End .ContentStart .ContentEnd)应该放在“换行和换行”的位置,这是我成功完成的目的。>
答案 10 :(得分:0)
StringBuilder somestext = new StringBuilder();
somestext.AppendLine("this is some text on line 1");
somestext.AppendLine(TB_Tag_Linebreak);
somestext.AppendLine("this is some more text on line 2");
return somestext.ToString();