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

all*_*tic 3 c# wpf

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

Label l = new Label();
TextBlock tb = new TextBlock();
l.Content = tb;
Run Code Online (Sandbox Code Playgroud)

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

tb.Text = "Hello\nWould you please just work?";
Run Code Online (Sandbox Code Playgroud)

我已经尝试了各种换行组合的多种编码(HTML编码,ASCII编码等)(回车,换行,回车加换行,换行加回车,双换行,双回车等等... ad nauseum).

  • 答案应该绝对不包含XAML.
  • 答案应该假设原始对象是使用C#代码而不是 XAML创建的.
  • 答案不应该引用WPF属性的绑定.没有使用绑定.正在设置 "TextBlock"对象的"Text"属性.必须在那里插入换行符.

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

另外,如果是更容易被做到这一点Label直接,而不是TextBlock在一个Label,那也不错-我可以使用.我只需要一个带有自动纯文本换行的控件.

met*_*bed 14

你有几个选择:

使用该Environment.NewLine属性:

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

或者,手动将Runs和LineBreaks 添加到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?"));
Run Code Online (Sandbox Code Playgroud)