在我的WPF应用程序中,我引用了集中式字典资源中的字符串。如何在这些字符串中添加换行符?
我尝试了"line1\nline2", "line1\\nline2" and "line1
line2"
,但没有人正在使用。
我应该提一下,我还在这些字符串中包含标记({0},...),然后在运行时使用string.format(resource,args)。
答案 0 :(得分:12)
工作解决方案:在Visual Studio的词典资源窗口中切换+输入似乎可行。
答案 1 :(得分:4)
尝试将xml:space="preserve"
添加到您的资源并使用&#13
<sys:String x:Key="MyString" xml:space="preserve">line1
line2</sys:String>
答案 2 :(得分:3)
尝试十六进制文字:
<sys:String>line1 line2</sys:String>
但请注意,如果您实际编码Inline
,则可以使用:
<LineBreak />
E.g:
<TextBlock>
<TextBlock.Text>
line1 <LineBreak /> line2
</TextBlock.Text>
</TextBlock>
答案 3 :(得分:1)
如果没有问题,保证解决方案将使用转换器。
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();
}
}
答案 4 :(得分:1)
我没有要评论的代表,所以我将添加到 IVAAAN123 的答案中,这对我来说很好用(使用分号),但是,如果您在文本中添加任何换行符(以使其更可读,请确保 XML 中没有制表符,因此新行从页面边缘开始,而不是制表符进入页面,否则 'xml:space="preserve"' 将在每行开头包含空格:
<system:String x:Key="KeyName" xml:space="preserve">
First line of text.
Second line of text.
</system:String>
...将显示每行前面的所有空格。它还会显示两个额外的换行符:就在第一行之前和之后 因为还使用了文本中的物理换行符。删除空格和额外的换行符,它就可以工作了。