1

つまりね:

単純なWPFWindowsアプリケーションがあります。このアプリケーションには、いくつかの階層データを使用しTreeViewて構築され、フィードされているが含まれています。HierarchicalDataTemplate

階層データ構造は、に子アイテムを含むFakeRecクラスで構成されていList<FakeRec>ます。各アイテムには、タイトル文字列プロパティが含まれています。したがって、私のXAMLには、次のものがあります。

...
<HierarchicalDataTemplate ItemsSource="{Binding Items}" DataType="{x:Type local:FakeRec}">
...
     <TextBlock Grid.Column="0" Text="{Binding Path=Title}"/>
...
</HierarchicalDataTemplate>
...

これは正常に機能し、生成されたものTreeViewに各ノードのタイトルが表示されます。

次に、このツリー全体をローカライズ可能にします。FakeDirResources.Resxにリソースがあります(別のアセンブリにありますが、それは問題ではありません)。私がこれを行う場合:

...
<HierarchicalDataTemplate ItemsSource="{Binding Items}" DataType="{x:Type local:FakeRec}">
...
    <TextBlock Grid.Column="0" Text="{Binding Path=Title, Source={StaticResource FakeDirResources}}"/>
...
</HierarchicalDataTemplate>
...

私のツリーは空白です(明らかに、私のFakeDirResources.resxファイルにはキーを持つリソースがないためですが、他のバインディングのTitleを使用しTitle、リソースを介して解決してから、何らかの方法で結果をツリーにバインドする必要があります。

TextBlockツリーやに関係なく、ウィンドウにaを配置するだけでHierarchicalDataTemplate、次のように問題なくリソースにバインドできることに注意してください。

<TextBlock Text="{Binding Path=games, Source={StaticResource FakeDirResources}}"/>;

これはうまく機能し、文字列をフェッチします。System.Threading.Thread.CurrentThread.CurrentUICultureプロバイダーを変更して更新すると、この文字列は新しい言語に変更されます。

問題は、2つをどのように組み合わせるかです。私は何が欠けていますか?いくつかのトリックが必要だと思います(そして、WPFでの私の短い経験では、それはおそらく簡単なトリックではありません)。

乾杯!

アロン。

4

1 に答える 1

1

潜在的に、これを次のように処理できますIValueConverter

public class KeyResourceConverter : IValueConverter
{
    #region IValueConverter Members

    public object Convert(object value, Type targetType,
        object parameter, CultureInfo culture)
    {
        var key = System.Convert.ToString(value);
        var lookup = parameter as ResourceManager;

        return lookup.GetString(key, culture);
    }

    public object ConvertBack(object value, Type targetType,
        object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }

    #endregion
}

次のように使用します。

<TextBlock Text="{Binding Path=Title,
                          Converter={StaticResource keyResource}
                          ConverterParameter={x:Static local:FakeDirResources.ResourceManager}}"
           />
于 2011-02-15T22:39:00.257 に答える