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

本文关键字:资源 组合 全球化 XAML | 更新日期: 2023-09-27 18:00:51

我正在全球化我的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元素来使用字典,或者像我现在所做的那样,通过代码加载它们,但这不是对我问题的回应。

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

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

我找到了解决你问题的办法。

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

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

Combo.Content        ComboBox1

在我使用的Xaml中:

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

这将使用项目"ComboBox1"(来自资源文件(填充组合框。

我还没有测试过它是否适用于不同语言的资源文件,但我看不出它为什么不工作。

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

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

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

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