2010-10-20 15 views
13

My Applications sklep wszystko zlokalizowanego tekstu w słowniku zasobów ciąg jak sugeruje tutaj http://msdn.microsoft.com/en-us/library/bb295251(VS.85).aspxDodaj powrotu karetki do zasobu ciąg w WPF

 <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> 

Moje pytanie brzmi, jak mogę dodać nową linię do zasobu smyczkową i mieć renderuje się poprawnie, gdy jest używany w TextBlock.

Robi to inline działa:

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

Jednak użycie &#13; w zasobie strun nie działa. Jaki jest najlepszy sposób dodania nowej linii do zasobu ciągów?

Odpowiedz

17

UPDATE: zaktualizowane odpowiedź - lepszym rozwiązaniem

XAML parser znormalizowane spacje zgodnie z następującymi zasadami.

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

Aby polecić sys:String zachować odstępy stosuje xml:space="preserved do niego:

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

Opcja zlokalizowanego ciągu działa, ale wyrażenie wiążące jest nieco brzydkie. –

+0

Tak. Ale właśnie to utknęło - byłoby miło, gdybyś mógł podać wyraźny lub niejawny operator konwersji w typie LocalizedString i poprosić o to parser, ale nie robi tego. Mogę pokazać o wiele bardziej skomplikowaną opcję związaną z dołączoną własnością, ale nie jestem pewien, czy w dłuższej perspektywie jest to lepsze. –

+0

Zaktualizowano powyższą odpowiedź z załączoną opcją właściwości. –

11

Kiedy wchodzimy do zasobu ciąg z punktu widzenia zasobów można dodać CR/LF trafiając Shift + Wchodzić. Doda nowy znak, a będziesz mógł go zobaczyć. Pobranie łańcucha zasobów i ustawienie go jako tekstu w bloku tekstu przyniesie pożądany efekt odtworzenia znaku nowej linii (lub wielu znaków nowej linii). W moim przypadku chciałem symulować dwa akapity w jednym bloku tekstowym. Nie podobały mi się inne podejścia, ponieważ wymagało tłumaczenia na inny język, aby poradzić sobie z dwoma łańcuchami. Chciałem traktować to jako jeden ciąg zasobów, aby tłumacz miał pełny kontekst tego, co tłumaczyli.

+0

Proste i piękne! – OneWorld

+0

Ta odpowiedź powinna być zaakceptowaną odpowiedzią. – philologon

+0

To zadziałało dla mnie. Sposób prostszy niż wybrana odpowiedź. –

0

Tak więc minęło już trochę czasu, ale dla osób w mojej sytuacji może to pomoże. W moim przypadku, miałem plik autonomiczny XML zasobu gdzie byłem już używając ...

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

... we własnej klasie pomocnika załadować ciąg zasobu. Więc dla mnie najprostszym rozwiązaniem było po prostu wstawić wywołanie Wymień następująco:

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

Mój przykład z mojego StringResources.xaml pozwala mi korzystać znak escape \ n następująco ....

<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> 
Powiązane problemy