2013-02-23 64 views
3

我是globalizing我的WinRT应用程序,我无法在我的组合框中使用语言资源。我可以在我的TextBlocks中使用它,使用文本属性,但不使用x:字符串。我究竟做错了什么?在组合框中使用资源的XAML全球化

TextBlock x:Uid="Priority" Text="Default"></TextBlock> 
<ComboBox> 
    <x:String x:Uid="Color">Default1</x:String> 
    <x:String x:Uid="Color.Text">Default2</x:String> 
</ComboBox> 

编辑

为什么我不能填充在XAML代码资源字符串组合框元素?我知道我可以在ComboBox中添加TextBlock元素来使用字典,或者正如我现在所做的那样,通过代码加载它们,但这不是对我的问题的回应。

回答

3

据我所知当你在xaml中使用这是一个编译时常量,它将不能在运行时更改并绑定到资源。这就是为什么你可能会将Default1或Default2视为组合框中的项目。

我能找到解决问题的办法。

想法是,在组合框中,您应该使用ComboBoxItem并将x:Uid设置为资源的值。但是在资源文件中,实际名称应该是Name.Content,因为ComboBoxItem默认情况下有一个ContentPresenter,而不是TextBlock。

因此,这是为我工作的代码: 在资源文件我有:

Combo.Content  ComboBox1 

而且在XAML我用:

<ComboBox> 
    <ComboBoxItem x:Uid="Combo" /> 
</ComboBox> 

这将填充组合框与项目“ComboBox1”(来自资源文件)。

我还没有测试过,看它是否适用于不同语言的资源文件,但我没有看到它不应该工作的原因。

+0

+1是的,我尝试过,它的工作原理。为什么我不记得尝试ComboBoxItem? - 。 - 也许这将是答案,我会给你赏金。但是还剩5天,我会等待看看是否出现了另一个使用** **的解决方案。 :) 谢谢 – letiagoalves 2013-03-04 20:59:12

1

我怀疑(但没有在文档中找到具体的语句),resource.resw中的条目需要是(依赖性?)属性的自动资源绑定工作的对象。字符串没有这样的属性;例如,Default1不是String.Content的值。

阻力最小的路径是使用TextBlock为您的ComboBox元素。或者,您可以在代码中加载资源并以此方式将其分配给字符串。

+0

我想通过代码填充我的组合框的元素,但奇怪的是,我不能没有添加具有Text属性更多的元素在XAML中使用字符串资源 – letiagoalves 2013-02-24 19:44:13

0

是否有任何东西阻止您使用ComboBox的ItemsSource绑定?这样,您可以使用包含所需信息的自定义对象,以及DisplayName属性,然后可以从.resx文件中获取正确的资源字符串。

如果这不是一个选项,我不知道现在什么解决方案将完全在XAML中完成整个事情。

+0

不,我可以很容易地结合从资源读取的ItemsSource数据。然而,我有这样一种习惯,即尽可能缩短我的代码,完全用XAML来完成整个事情似乎是正确的,但我的研究并未告诉我为什么我不能这么做。 – letiagoalves 2013-03-04 12:43:32