Добавить возврат каретки в строковый ресурс в 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 Line 2"> </TextBlock>
Однако использование
в строковом ресурсе не работает. Какой лучший способ добавить новую строку в ресурс строки?
Ответы
Ответ 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 is my 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>