当文本被设置为属性时,我如何添加换行符:
<TextBlock Text="Stuff on line1 \n Stuff on line2" />
把它分解成分解格式不适合我的特殊情况。我需要的是一些方法来模仿以下:
<TextBlock>
<TextBlock.Text>
Stuff on line1 <LineBreak/>
Stuff on line2
</TextBlock.Text>
<TextBlock/>
当文本被设置为属性时,我如何添加换行符:
<TextBlock Text="Stuff on line1 \n Stuff on line2" />
把它分解成分解格式不适合我的特殊情况。我需要的是一些方法来模仿以下:
<TextBlock>
<TextBlock.Text>
Stuff on line1 <LineBreak/>
Stuff on line2
</TextBlock.Text>
<TextBlock/>
当前回答
也许你可以使用属性xml:space="preserve"来保存源XAML中的空白
<TextBlock xml:space="preserve">
Stuff on line 1
Stuff on line 2
</TextBlock>
其他回答
我知道这是一个老问题,但我只是想补充一下
环境。换行符
如果通过代码来做这个也可以。
我发现这很有帮助,但在XAML中将其添加到“Content=…”标记时遇到了一些错误。
我在内容中有多行,后来发现内容保留了空白,尽管我没有指定这一点。所以为了解决这个问题,让它“忽略”空白,我实现了这样的功能。
<ToolTip Width="200" Style="{StaticResource ToolTip}"
Content="'Text Line 1'


'Text Line 2'


'Text Line 3'"/>
希望这能帮助到其他人。
(输出有三个文本行,每行之间有一个空行。)
<TextBox
Name="myTextBox"
TextWrapping="Wrap"
AcceptsReturn="True"
VerticalScrollBarVisibility="Visible" />
当你需要在字符串中(例如:在你的资源中),你需要使用xml:space="preserve"和&字符代码:
<System:String x:Key="TwoLiner" xml:space="preserve">First line Second line</System:String>
或者文本中的换行符:
<System:String x:Key="TwoLiner" xml:space="preserve">First line
Second line</System:String>
警告:如果您编写类似于第二个示例的代码,则您已经插入了换行符,或者回车符和换行符,这取决于您的操作系统和/或文本编辑器使用的行结束符。例如,如果你在linux系统中写了这个代码并提交给git,一切看起来都很好——但如果有人将它克隆到Windows系统中,git会将你的行尾转换为\r\n,这取决于你的字符串是用于…你可能会打破这个世界。
在保留空白时要注意这一点。如果你这样写:
<System:String x:Key="TwoLiner" xml:space="preserve">
First line
Second line
</System:String>
你实际上添加了4个换行符,可能是4个回车符,以及潜在的不可见的尾随空白……
对于那些已经尝试了这个问题的所有答案,但仍在挠头为什么它们都不适合你的人来说,你可能遇到了我遇到的某种形式的问题。
我的TextBlock。Text属性位于ToolTipService内部。元素,它绑定到一个对象的属性,该对象的数据正在从SQL存储过程中提取。现在,存储过程中这个特定属性的数据正在从一个SQL函数中提取。
因为没有什么对我有用,我放弃了我的搜索,并创建了下面的转换器类:
public class NewLineConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var s = string.Empty;
if (value.IsNotNull())
{
s = value.ToString();
if (s.Contains("\\r\\n"))
s = s.Replace("\\r\\n", Environment.NewLine);
if (s.Contains("\\n"))
s = s.Replace("\\n", Environment.NewLine);
if (s.Contains("

"))
s = s.Replace("

", Environment.NewLine);
if (s.Contains("
"))
s = s.Replace("
", Environment.NewLine);
if (s.Contains("
"))
s = s.Replace("
", Environment.NewLine);
if (s.Contains(" "))
s = s.Replace(" ", Environment.NewLine);
if (s.Contains(" "))
s = s.Replace(" ", Environment.NewLine);
if (s.Contains(" "))
s = s.Replace(" ", Environment.NewLine);
if (s.Contains("<br />"))
s = s.Replace("<br />", Environment.NewLine);
if (s.Contains("<LineBreak />"))
s = s.Replace("<LineBreak />", Environment.NewLine);
}
return s;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
最后我不得不使用环境。NewLine方法来自@dparker的答案。我指示转换器寻找任何可能的换行符文本表示,并将其替换为Environment.NewLine。
这个工作!
然而,我仍然感到困惑,为什么没有其他方法适用于绑定属性。
我在@BobKing接受的答案下留言:
@BobKing -这似乎在ToolTipService中不起作用。绑定到从SQL sproc中嵌入换行符的字段时的工具提示。
他回答说:
@CodeMaverick如果你绑定到嵌入新行文本,它们可能应该是真正的char 10值(或13),而不是XML哨兵。这仅适用于在XAML文件中写入文字新行。
一个灯泡坏了!
我进入我的SQL函数,将换行符的文本表示替换为…
CHAR( 13 ) + CHAR( 10 )
... 从我的TextBlock删除转换器。文本绑定,就像这样……它工作!