6

この場合、Textプロパティのバインディングの一部としてリソース ディクショナリで宣言された文字列を使用しようとしています。動的リソース文字列を 1 つだけバインドすることは問題ではありません。

<TextBlock Text="{DynamicResource keyToMyString}" />

ただし、動的テキストを挿入する必要があるか、複数の文字列を結合する必要があるため、 MultiBindingStringFormatを使用する必要がある場合は、すぐに問題が発生します。たとえば、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ますか? それとも、これを実現するために独自のマークアップ拡張機能を作成する必要がありますか?

4

1 に答える 1