4

我正在全球化我的 WinRT 应用程序,但我无法在我的组合框中使用语言资源。我可以使用Text属性在我的 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 元素以使用字典,或者就像我现在所做的那样,通过代码加载它们,但这不是对我问题的回应。

4

3 回答 3

4

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

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

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

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

Combo.Content        ComboBox1

在我使用的 Xaml 中:

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

这将使用项目“ComboBox1”(来自资源文件)填充 ComboBox。

我没有对此进行测试以查看它是否适用于不同语言的资源文件,但我看不出它为什么不能工作。

于 2013-03-04T18:06:38.423 回答
1

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

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

于 2013-02-24T15:31:22.053 回答
0

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

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

于 2013-03-04T11:53:56.790 回答