使用组合框中的资源进行XAML全球化

时间:2013-02-23 21:35:24

标签: c# xaml windows-8 localization winrt-xaml

我是globalizing我的WinRT应用,我不能在我的组合框中使用语言资源。我可以使用文本属性在TextBlocks中使用它,但不能使用 x:string 。我做错了什么?

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元素?我知道我可以在ComboBox中添加TextBlock元素来使用字典,或者正如我现在所做的那样,通过代码加载它们,但这不是对我的问题的回应。

3 个答案:

答案 0 :(得分:4)

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

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

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

所以这是适合我的代码: 在资源文件中我有:

Combo.Content        ComboBox1

在我用过的Xaml中:

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

这将使用项目&#34; ComboBox1&#34;填充ComboBox。 (来自资源文件)。

我没有对此进行测试,看它是否适用于不同语言的资源文件,但我认为没有理由不这样做。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

如果这根本不是一个选项,我现在不确定解决方案是完全在XAML中完成整个事情。