Единственный способ добавить вычисленную строку в ResourceDictionary таким способом - создать MarkupExtension
. Ваш MarkupExtension
будет использоваться так:
<ResourceDictionary ...>
<sys:String x:Key="ProductName">Foo</sys:String>
<local:MyStringFormatter
x:Key="WindowTitle"
StringFormat="{0} Main Window"
Arg1="{StaticResource ProductName}" />
</ResourceDictionary>
Предполагается, что вы создали подкласс MarkupExtension
в своем "локальном" пространстве имен с именем MyStringFormatterExtension
, который имеет свойства с именами "StringFormat", "Arg1", "Arg2" и т. Д., И имеет метод ProvideValue()
, который выполняет очевидное.
Обратите внимание, что, как указывает Аран, Binding
с использованием StringFormatter
будет более распространенным способом достижения того же эффекта и, как правило, является лучшим дизайном. Компромисс в том, что он не позволит использовать результат как часть ResourceDictionary
.