c# - 在组合框中使用资源的 XAML 全局化

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

我是globalizing我的 WinRT 应用程序和我无法在我的组合框中使用语言资源。我可以在使用 Text 属性但不使用 x:string 的 TextBlock 中使用它。我做错了什么?

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 中使用时,它是一个编译时间常量,无法在运行时更改并绑定(bind)到资源。这就是为什么您可能会在组合框中看到 Default1 或 Default2 作为项目。

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

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

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

Combo.Content        ComboBox1

在我使用的 Xaml 中:

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

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

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

关于c# - 在组合框中使用资源的 XAML 全局化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15045994/

相关文章:

c# - 使用线程数组

xaml - 半透明背景上的文本

C# WPF 鼠标悬停按钮 - 无内容

c# - 如何在wpf中的窗口中设置多个Datacontext

c# - 如何在 c# 程序中连续运行函数

c# - CSV 读数为空

c# - c#中虚函数的实际使用

javascript - 如何在 C# 中将 ExpandoObject 转换为字典?

c# - 将字符串转换为页面类型?

windows-8 - 将下拉菜单添加到 Windows 8 Metro 中的设置 super 按钮 (C#)