C# 字符串资源中的WPF换行符

C# 字符串资源中的WPF换行符,c#,wpf,string,C#,Wpf,String,在我的WPF应用程序中,我引用了集中字典资源中的字符串。如何在这些字符串中设置换行符 我尝试了“line1\nline2”、“line1\\nline2”和“line1 ;line2”,但都不起作用 我应该提到的是,我还在这些字符串({0},…)中包含令牌,之后在运行时使用string.format(resource,args) <sys:String>line1&#13;line2</sys:String> 例如: 第1行第2行 尝试将xml:spa

在我的WPF应用程序中,我引用了集中字典资源中的字符串。如何在这些字符串中设置换行符

我尝试了
“line1\nline2”、“line1\\nline2”和“line1
;line2”
,但都不起作用

我应该提到的是,我还在这些字符串({0},…)中包含令牌,之后在运行时使用string.format(resource,args)

<sys:String>line1&#13;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("&#x0a;&#x0d;"))
                s = s.Replace("&#x0a;&#x0d;", Environment.NewLine);

            if (s.Contains("&#x0a;"))
                s = s.Replace("&#x0a;", Environment.NewLine);

            if (s.Contains("&#x0d;"))
                s = s.Replace("&#x0d;", Environment.NewLine);

            if (s.Contains("&#10;&#13;"))
                s = s.Replace("&#10;&#13;", Environment.NewLine);

            if (s.Contains("&#10;"))
                s = s.Replace("&#10;", Environment.NewLine);

            if (s.Contains("&#13;"))
                s = s.Replace("&#13;", 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.&#13;
    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&#13line2</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("&#x0a;&#x0d;"))
                s = s.Replace("&#x0a;&#x0d;", Environment.NewLine);

            if (s.Contains("&#x0a;"))
                s = s.Replace("&#x0a;", Environment.NewLine);

            if (s.Contains("&#x0d;"))
                s = s.Replace("&#x0d;", Environment.NewLine);

            if (s.Contains("&#10;&#13;"))
                s = s.Replace("&#10;&#13;", Environment.NewLine);

            if (s.Contains("&#10;"))
                s = s.Replace("&#10;", Environment.NewLine);

            if (s.Contains("&#13;"))
                s = s.Replace("&#13;", 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.&#13;
    Second line of text.
</system:String>