Новая строка не работает в MessageBox в С#/WPF

Короткий вопрос: у меня есть строка в моих ресурсах: "Это моя тестовая строка {0}\n\nTest"

Я пытаюсь отобразить эту строку в своем Messagebox:

MessageBox.Show(String.Format(Properties.Resources.About, 
    Constants.VERSION), 
    Properties.Resources.About_Title, MessageBoxButton.OK, 
    MessageBoxImage.Information);

Однако я не получаю новые строки. \N все еще отображаются как символы, а не как новые строки.

Я также попытался использовать обходной путь как mystring.Replace( "\n", Environment.NewLine), но это также ничего не меняет.

Что я делаю неправильно?

Изменить: Прикольная штука: Replace ( "\n", "somethingelse" ) ничего не меняет.

Edit2: Shift + Enter в моем файле ресурсов вместо \n, похоже, работает... Странное поведение в любом случае

Ответ 1

Поместите место, где вы хотите поместить новую строку, и в код, в котором вы используете эту строку ресурса, просто замените ее на новую строку: string resource: "Это первая строка. {0} Это вторая строка. { 0} Это третья строка. Вы будете использовать эту строку ресурса следующим образом: MessageBox.Show(string.Format(MyStringResourceClass.MyStringPropertyName, Environment.NewLine));

ИЛИ

Нетрадиционный метод   Но я только что начал работать, перейдя к новой строке из слова напрямую (или в другое место) и вставив его в файл строки ресурсов.

It was simple..
OR
Символы

\ r\n преобразуются в новую строку, когда вы показываете ее, используя окно сообщения или назначая его текстовому полю или всякий раз, когда вы используете его в интерфейсе.

В С# (как и большинство C-производных языков) escape-символы используются для обозначения специальных символов, таких как return и tab, и + используется вместо и для конкатенации строк.

Чтобы заставить ваш код работать в С#, у вас есть два варианта... первый заключается в том, чтобы просто заменить NewLine символом возврата escape\n ala:

MessageBox.Show("this is first line" + "\n" + "this is second line");

Другой метод, и более правильным является его замена вместо Environment.NewLine, который теоретически может измениться в зависимости от используемой вами системы (как бы маловероятно).

MessageBox.Show("this is first line" + Environment.NewLine + "this is second line");

Ответ 2

В редакторе ресурсов разделите содержимое строки с помощью shift + enter. Или же отредактируйте файл ResX в редакторе xml и с помощью клавиши ввода создайте новую строку для вашей строки ресурса.

Подробнее см. эту ссылку: Возврат каретки/строка в файле ResX.

Ответ 3

Попробуйте следующее:

    String outputMessage = string.Format("Line 1{0}Line 2{0}Line 3", Environment.NewLine);
    MessageBox.Show(outputMessage);

Следующий пример с другой переменной:

    String anotherValue = "Line 4";
    String outputMessage = string.Format("Line 1{0}Line 2{0}Line 3{0}{1}", Environment.NewLine, anotherValue);
    MessageBox.Show(outputMessage);