Мне нужно разработать приложение, которое поддерживает локализацию, поэтому мне нужно форматировать TextBlock
таким образом, что часть строки принимает один параметр от привязки и часть из ресурсов. Я написал так
<TextBlock Height="30" >
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} -- *Now only* {1:C}!">
<Binding Path="Description"/>
<Binding Path="Price"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
это теперь только часть, которую мне нужно извлечь из строки ресурса. Строка есть в ресурсах, но я не знаю, как это сделать из строки. Кто-нибудь может мне помочь.
Я знаю, что использование конвертера было бы решением, но у меня много таких сценариев, и для этого я могу получить несколько конвертеров, что не очень хорошо. Я считаю, что с помощью StringFormat
я могу это достичь. Но я чего-то не хватает.
Вы можете добавить ссылку на ваше пространство имен ресурсов, а затем добавить еще одну привязку к вам 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>
ОК Наконец, я нашел решение, но я считаю, что может быть много решений. Это первый.
Как указано @sa_ddam213 и @dkozl, это добавление Source
вместо Path
как:
<Binding Source="{x:Static p:Resources.Nowonly}"/>
является идеальным решением, но после этого я все еще получаю исключение во время выполнения
'StringFormatExamples.Properties.Resources.Nowonly'
Значение StaticExtension не может быть разрешено для перечисления, статического поля или статического свойства.
После работы с кодом иногда я выяснил, что в модификаторах доступа все строки ресурсов являются internal
, я изменил это на public
и код работает.
{Binding Source="{x:Static p:Resources.Nowonly}
. Обратите внимание наSource
вместоPath