Как я могу построить строковый ресурс из других строковых ресурсов в WPF? - PullRequest
1 голос
/ 12 января 2010

Вот мой «пример кода», включая то, что я пытаюсь сделать. Очевидно, в данный момент это не работает, но есть ли способ заставить его работать?

<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="ProductName">Foo</System:String>
    <System:String x:Key="WindowTitle">{ProductName} + Main Window</System:String>
</ResourceDictionary>

1 Ответ

2 голосов
/ 13 января 2010

Единственный способ добавить вычисленную строку в 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...