C# 字符串资源中的WPF换行符
在我的WPF应用程序中,我引用了集中字典资源中的字符串。如何在这些字符串中设置换行符 我尝试了C# 字符串资源中的WPF换行符,c#,wpf,string,C#,Wpf,String,在我的WPF应用程序中,我引用了集中字典资源中的字符串。如何在这些字符串中设置换行符 我尝试了“line1\nline2”、“line1\\nline2”和“line1 ;line2”,但都不起作用 我应该提到的是,我还在这些字符串({0},…)中包含令牌,之后在运行时使用string.format(resource,args) <sys:String>line1 line2</sys:String> 例如: 第1行第2行 尝试将xml:spa
“line1\nline2”、“line1\\nline2”和“line1
;line2”
,但都不起作用
我应该提到的是,我还在这些字符串({0},…)中包含令牌,之后在运行时使用string.format(resource,args)
<sys:String>line1 line2</sys:String>
例如:
第1行第2行
尝试将xml:space=“preserve”
添加到您的资源中并使用
line1和#13line2
工作解决方案:在VisualStudio的dictionary resource窗口中按住shift键并按enter键似乎可以工作 如果没有任何效果,肯定的解决方案是使用转换器
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();
}
}
公共类NewLineConverter:IValueConverter
{
公共对象转换(对象值、类型targetType、对象参数、CultureInfo区域性)
{
var s=string.Empty;
if(value.IsNotNull())
{
s=value.ToString();
如果(s.Contains(“\\r\\n”))
s=s.Replace(“\\r\\n”,Environment.NewLine);
如果(s.包含(“\\n”))
s=s.Replace(“\\n”,Environment.NewLine);
如果(s.包含(
;
;)
s=s.Replace(
;
;”,Environment.NewLine);
如果(s.包含(
;)
s=s.Replace(
;”,Environment.NewLine);
如果(s.包含(
;)
s=s.Replace(
;”,Environment.NewLine);
如果(s.包含(
;
;)
s=s.Replace(
;
;”,Environment.NewLine);
如果(s.包含(
;)
s=s.Replace(
;”,Environment.NewLine);
如果(s.包含(
;)
s=s.Replace(
;”,Environment.NewLine);
如果(s.包含(“
”)
s=s.Replace(“
”,Environment.NewLine);
如果(s)包含(“”)
s=s.Replace(“,Environment.NewLine);
}
返回s;
}
公共对象转换回(对象值、类型targetType、对象参数、CultureInfo区域性)
{
抛出新的NotImplementedException();
}
}
如果要使用resx文件的文本编辑器,按
Shift+Enter
对于你想要的每一行新词,如其他答案所述
如果您使用的是其他来源的文本,并且您正在resx中复制/粘贴文本,则Visual Studio将以与现有格式相同的格式粘贴文本,其中将包括换行符。我没有代表发表评论,因此我将添加到IVAAAN123的答案中,该答案对我来说很好(使用分号),如果在文本中添加任何换行符(为了使其更具可读性,请确保XML中没有制表符,以便新行从页面边缘开始,而不是在页面中添加制表符),否则“XML:space=“preserve”将在每行的开头包含空格:
<system:String x:Key="KeyName" xml:space="preserve">
First line of text.
Second line of text.
</system:String>
第一行文字
;
第二行文字。
…将显示每行前面的所有空格。它还将显示两个额外的换行符:第一行之前和之后
因为文本中也使用了物理换行符。删除空白和额外的换行符,它就会起作用。如果需要换行符A,为什么不将字符串拆分为两个不同的字符串?您应该将
xml:space=“preserve”
添加到资源字典或单个资源中。xml:space=“preserve”在我的测试中打断它。还要注意你忘记了分号。是的,你忘记了分号。它应该是
;注意xml:space=“preserve”
是十六进制文字所必需的。xml:space=“preserve”
在我测试它时打断了它。奇怪。我正在使用Application.Current.FindResource()获取字符串资源
并将其传递给MessageBox.Show()
,以显示多行错误消息。如果没有preserve
,它只会聚集成一行。(“尝试十六进制文字[…]和#13;”看起来非常十进制,但不是非常文本。
<sys:String x:Key="MyString" xml:space="preserve">line1
line2</sys:String>
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();
}
}
<system:String x:Key="KeyName" xml:space="preserve">
First line of text.
Second line of text.
</system:String>