1

事情是这样的:

我有一个简单的 WPF Windows 应用程序,其中包含一个TreeView,它是在HierarchicalDataTemplate一些分层数据的帮助下构建并提供的。

分层数据结构由 FakeRec 类组成,该类包含一个List<FakeRec>. 每个项目都包含一个 Title 字符串属性。所以在我的 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文件中我没有带有 key 的资源Title,但我需要使用Title另一个绑定的,通过资源解决它,然后以某种方式将结果绑定到树。

请注意,如果我只是将 aTextBlock放在窗口上,与树或 无关HierarchicalDataTemplate,我可以将它毫无问题地绑定到资源,如下所示:

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

这很好用,获取字符串,如果我更改System.Threading.Thread.CurrentThread.CurrentUICulture并刷新我的提供程序,此字符串将更改为新语言。

问题是如何将两者结合起来?我错过了什么?我想一定有一些技巧(根据我对 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 回答