この場合、Text
プロパティのバインディングの一部としてリソース ディクショナリで宣言された文字列を使用しようとしています。動的リソース文字列を 1 つだけバインドすることは問題ではありません。
<TextBlock Text="{DynamicResource keyToMyString}" />
ただし、動的テキストを挿入する必要があるか、複数の文字列を結合する必要があるため、 MultiBindingでStringFormatを使用する必要がある場合は、すぐに問題が発生します。たとえば、MultiBinding が次のようになっているとします。
<TextBlock.Text>
<MultiBinding StringFormat="{}{0} {1} some more text">
<Binding Source="{x:Static Resources:Strings.string1}" />
<Binding Source="{x:Static Resources:Strings.string2}" />
</MultiBinding>
<TextBlock.Text>
string1
指定したリソース ファイルからバインドされたテキストに挿入できstring2
ますが、問題はありません。しかし、同じ方法で動的リソースから文字列を使用する方法が見つかりません。(私はこのメソッドを使用して、マージされたリソース ディクショナリから会社名と製品名をテキストに挿入しています)。
TextBlockを使用すると、TextBlock コンテンツに複数のRunアイテムを使用することで、この問題を回避できます (参照)。
<TextBlock >
<Run Text="{DynamicResource CompanyName}" />
<Run Text="{DynamicResource ProductName}" />
<Run Text="{DynamicResource MajorVersion}" />
</TextBlock>
ただし、動的リソースをWindow Titleプロパティにバインドする必要がある場合、これは役に立ちません。既存のマークアップ拡張機能 (など) を使用して (必要に応じて創造的に) これを達成する方法はありx:Static
ますか? それとも、これを実現するために独自のマークアップ拡張機能を作成する必要がありますか?