繁体   English   中英

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

[英]How can I insert a newline into a TextBlock without XAML?

在代码中Label中创建了 WPF TextBlock (在我的情况下无法使用 XAML),如下所示:

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

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

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

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

  • 答案应该绝对不包含 XAML
  • 答案应该假设原始对象是使用 C# 代码而不是XAML 创建的。
  • 答案不应涉及 WPF 属性的绑定 没有使用绑定。 正在设置“TextBlock”object 的“Text”属性。 必须此处插入换行符。

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

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

你有几个选择:

使用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?"));

只是另一个小笔记。 我遇到了类似的问题,并从资源文件中获取了字符串。 我注意到 .NET 将字符串“\r\n”传递为“\\r\\n”。 当我通过用正常的反斜杠替换双反斜杠来纠正这一点时,一切都按预期工作。

您可以将字符串值存储在“Resources.resw”中,并直接在代码中获取它们。 在 VS 资源编辑器本身中,无法将空行添加到字符串值。 为此,只需在任何文本编辑器中编辑值,添加所需数量的空行,然后“复制 - > 粘贴”到 Visual Studio 资源编辑器的列。

例如:带有 2 个换行符的“Farewell”值: Goodbye\n\n保存更改? - 在文本编辑器中看起来像这样(实际上,需要复制到 VS):

再见

保存更改?

在此处输入图像描述

要获取 C# 代码中资源的字符串值,请根据您的应用程序调用以下行中的 1 行(UWP 或 WinUI3)。

UWP 代码:

Windows.ApplicationModel.Resources.ResourceLoader.GetForCurrentView().GetString("Farewell");

WinUI3代码:

new ResourceLoader().GetString("Farewell");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM