Добавить возврат каретки к строковому ресурсу в WPF - PullRequest
13 голосов
/ 20 октября 2010

Мои приложения хранят весь локализованный текст в словаре строковых ресурсов, как предлагается здесь 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; в строковом ресурсе не работает. Какой лучший способ добавить новую строку в строковый ресурс?

Ответы [ 3 ]

18 голосов
/ 20 октября 2010

ОБНОВЛЕНИЕ: обновленный ответ - лучший вариант

Парсер 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>
13 голосов
/ 13 апреля 2012

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

0 голосов
/ 26 февраля 2015

Итак, очевидно, это было какое-то время, но для тех, кто в моей ситуации, возможно, это поможет.В моем случае у меня был отдельный файл ресурсов 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>
...