Как отформатировать строку со значением из ресурсов и одним значением из Binding в XAML?

1

Мне нужно разработать приложение, которое поддерживает локализацию, поэтому мне нужно форматировать TextBlock таким образом, что часть строки принимает один параметр от привязки и часть из ресурсов. Я написал так

<TextBlock Height="30" >
    <TextBlock.Text>
        <MultiBinding  StringFormat="{}{0} -- *Now only* {1:C}!">
            <Binding Path="Description"/>
            <Binding Path="Price"/>
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>

это теперь только часть, которую мне нужно извлечь из строки ресурса. Строка есть в ресурсах, но я не знаю, как это сделать из строки. Кто-нибудь может мне помочь.

Я знаю, что использование конвертера было бы решением, но у меня много таких сценариев, и для этого я могу получить несколько конвертеров, что не очень хорошо. Я считаю, что с помощью StringFormat я могу это достичь. Но я чего-то не хватает.

Теги:
xaml
wpf

2 ответа

3
Лучший ответ

Вы можете добавить ссылку на ваше пространство имен ресурсов, а затем добавить еще одну привязку к вам MultiBinding

Пример (непроверенный)

   xmlns:p="clr-namespace:MyApplication.Properties"

   <TextBlock Height="30" >
        <TextBlock.Text>
            <MultiBinding  StringFormat="{}{0} -- {2} {1:C}!">
                <Binding Path="Description"/>
                <Binding Path="Price"/>

                <Binding Path="{x:Static p:Resources.Nowonly}"/>
                <!-- Or possibly Source instaed of Path as mentioned by @dkozl -->
                <Binding Source="{x:Static p:Resources.Nowonly}"/>
            </MultiBinding>
        </TextBlock.Text>
    </TextBlock>
  • 0
    Я уже пробовал это, но получаю исключение StringFormatExamples.Properties.Resources.Nowonly. Значение StaticExtension не может быть разрешено в перечислении, статическом поле или статическом свойстве. Его провал
  • 3
    try {Binding Source="{x:Static p:Resources.Nowonly} . Обратите внимание на Source вместо Path
Показать ещё 6 комментариев
0

ОК Наконец, я нашел решение, но я считаю, что может быть много решений. Это первый.

Как указано @sa_ddam213 и @dkozl, это добавление Source вместо Path как:

<Binding Source="{x:Static p:Resources.Nowonly}"/>  

является идеальным решением, но после этого я все еще получаю исключение во время выполнения

'StringFormatExamples.Properties.Resources.Nowonly'
Значение StaticExtension не может быть разрешено для перечисления, статического поля или статического свойства.

После работы с кодом иногда я выяснил, что в модификаторах доступа все строки ресурсов являются internal, я изменил это на public и код работает.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню