如何在没有XAML的情况下将换行符插入TextBlock?

时间:2014-06-10 00:14:27

标签: c# wpf

我在代码中TextBlock 内创建了一个WPF Label (在我的情况下不可能是XAML),如下所示:

Label l = new Label();
TextBlock tb = new TextBlock();
l.Content = tb;

然后我遇到需要设置包含新行的.Text TextBlock属性的情况,例如:

tb.Text = "Hello\nWould you please just work?";

我尝试了各种换行组合的多种编码(HTML编码,ASCII编码等)(回车,换行,回车加换行,换行加回车,双换行,双回车等等)广告nauseum)。

  • 答案应该包含绝对没有XAML
  • 答案应该假设原始对象是使用C#代码创建的,不是 XAML。
  • 答案不应该引用WPF属性的绑定。没有使用绑定。 “TextBlock”对象的“Text”属性为 set 。新行必须插入

如果这是不可能的,请告诉我如何以编程方式添加换行符,方法是将任意输入String中的每个换行符动态替换为LineBreak对象(或者使其工作所需的任何内容) 。输入String将具有我无法预先预测的任意(可读文本)内容,因为文本本身是动态的(用户定义的);源字符串将具有换行符(也称为LF,又名\n)但我可以轻松地将其替换为所需的内容。

此外,如果直接使用Label而不是TextBlock中的Label更容易做到这一点,那也很好 - 我可以使用它。我只需要一个带有自动纯文本换行的控件。

2 个答案:

答案 0 :(得分:12)

您有几个选择:

使用Environment.NewLine属性:

TextBlock tb = new TextBlock();
tb.Text = "Hello" + Environment.NewLine + "Would you please just work?";

或者,手动将RunLineBreak添加到TextBlock

TextBlock tb = new TextBlock();
tb.Inlines.Add(new Run("Hello"));
tb.Inlines.Add(new LineBreak());
tb.Inlines.Add(new Run("Would you please just work?"));

答案 1 :(得分:1)

只是另一个小记。我遇到了类似的问题并从资源文件中获取了字符串。我注意到的是.NET提供了字符串" \ r \ n" as" \\ r \\ n"。当我用正常的反斜杠替换双反斜杠时,一切按预期工作。