Добавить возврат каретки в строковый ресурс в WPF

Мои приложения хранят весь локализованный текст в словаре ресурсов строк, как предлагается здесь http://msdn.microsoft.com/en-us/library/bb295251(VS.85).aspx

        <ResourceDictionary 
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  xmlns:system="clr-namespace:System;assembly=mscorlib">

  <!-- String resource that can be localized -->
  <system:String x:Key="localizedMessage">en-US Message</system:String>

</ResourceDictionary>

Мой вопрос в том, как я могу добавить новую строку в строковый ресурс и правильно ее обработать, когда он используется в TextBlock.

Выполнение этих встроенных работ:

<TextBlock Name="test" Text="Line 1&#13;Line 2"> </TextBlock>

Однако использование &#13; в строковом ресурсе не работает. Какой лучший способ добавить новую строку в ресурс строки?

Ответы

Ответ 1

UPDATE: обновленный ответ - лучший вариант

Анализатор XAML нормализовал пробелы в соответствии со следующими правилами.

http://msdn.microsoft.com/en-us/library/cc189036(VS.95).aspx#whitespace

Чтобы указать sys:String сохранить пробелы, примените к нему xml:space="preserved:

<sys:String x:Key="MyLocalizedString" xml:space="preserve">this&#13;&#10;is&#13;&#10;my&#13;&#10;resource</sys:String>

Ответ 2

Когда вы вводите строковый ресурс в представлении ресурсов, вы можете добавить CR/LF, нажав Shift + Enter. Он добавит новую строку, и вы сможете ее увидеть. Извлечение строки ресурсов и ее настройка в виде текста в текстовом блоке приведет к желаемому эффекту воспроизведения новой строки (или нескольких строк новой строки). В моем случае я хотел смоделировать два абзаца в одном текстовом блоке. Мне не нравились другие подходы, потому что для перевода двух струн требовался перевод на другой язык. Я хотел рассматривать это как один строковый ресурс, чтобы у переводчика был полный контекст того, что они переводили.

Ответ 3

Итак, это, очевидно, было время, но для тех, кто в моей ситуации, возможно, это поможет. В моем случае у меня был автономный файл ресурсов XML, в котором я уже использовал...

var strVal = (string)Application.Current.FindResource(key);
return strVal;

... внутри моего собственного класса-помощника для загрузки строки ресурса. Поэтому для меня самым простым решением было просто вставить вызов Replace следующим образом:

var strVal = (string)Application.Current.FindResource(key);
strVal = strVal.Replace(@"\n", Environment.NewLine);
return strVal;

Мой пример из моего StringResources.xaml позволяет мне использовать escape-символ \n следующим образом....

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                xmlns:system="clr-namespace:System;assembly=mscorlib">

    <system:String x:Key="resKeyValue1">The source field "{0}" is already mapped to the destination field "{1}".\n\n
    Do you want to additionally map the source field "{0}" to the destination field "{2}"?</system:String>

    ...
</ResourceDictionary>