DynamicResource未显示正确的值

时间:2017-04-06 09:37:01

标签: c# wpf xaml dictionary

我遇到DynamicResource和MergedDictionary的问题。 我有一个可以用不同语言(英语,西班牙语,德语)显示的软件,我有很多ResourceDictionaries。 我给你一个字典的例子,叫做“Documentation.xaml”:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:system="clr-namespace:System;assembly=mscorlib">

    <system:String x:Key="ProductNumber">Product Number</system:String>
    <system:String x:Key="Notes">Notes</system:String>
    <system:String x:Key="Logo">Logo</system:String>
    <system:String x:Key="InspectionTask">Inspection task</system:String>
    <system:String x:Key="ProductDescription">Product Description</system:String>
</ResourceDictionary>

这是我的“默认”ResourceDictionary。 我有两个其他字典,名为“Documentation.de-DE.xaml”和Documentation-es-ES.xaml“,用于德语和英语。 它们与默认的Dictionary几乎相同。唯一的区别是显示的字符串。

现在我的问题: 当我通过“DynamicResource”访问ressource时,我从活动的Dictionary中获取结果。 (示例:我在西班牙语中获得“ProductDescription”的“Descripcion de producto”。)如果词典中的条目可用,一切正常。 当一个条目不可用时,会出现问题。 假设以下情况: 我正在以西班牙语运行该软件,并希望将其更改为德语,但字典中的一个条目不可用,那么该软件没有使用它的默认条目。我仍然拥有西班牙语词典中的价值。

在我看来,DynamicResource在这种情况下崩溃并且不会改变。我没有证据证明它真的崩溃了。我唯一的事实是,如果条目不存在,文本框将不会改变! 有没有办法处理这次崩溃? (如果是一个)

我希望我能提供您需要的所有信息。如果没有,请告诉我

3 个答案:

答案 0 :(得分:2)

  

假设以下情况:我正在运行西班牙语软件并希望将其更改为德语,但字典中的一个条目不可用,则软件不使用默认条目。我仍然拥有西班牙语词典中的价值。

这是预期的行为。使用DynamicResource标记扩展设置的目标属性仅在资源更改时更改。如果资源已删除,则不会重置目标属性。

您应确保每个ResourceDictionary包含完全相同的翻译键。

另一种选择是实现自己的自定义标记扩展。有关此内容的更多信息,请参阅以下链接。

https://wpftutorial.net/LocalizeMarkupExtension.html http://10rem.net/blog/2011/03/09/creating-a-custom-markup-extension-in-wpf-and-soon-silverlight https://github.com/SeriousM/WPFLocalizationExtension https://www.codeproject.com/articles/35159/wpf-localization-using-resx-files

答案 1 :(得分:0)

更改语言时,是否更改了所有这些文化设置?

CultureInfo.DefaultThreadCurrentCulture = newCultureInfo;
CultureInfo.DefaultThreadCurrentUICulture = newCultureInfo;
Thread.CurrentThread.CurrentCulture = newCultureInfo;
Thread.CurrentThread.CurrentUICulture = newCultureInfo;

答案 2 :(得分:0)

  

假设以下情况:我正在运行西班牙语软件并希望将其更改为德语,但字典中的一个条目不可用,则软件不使用默认条目。我仍然拥有西班牙语词典中的价值。

这是有道理的。如果根本没有条目,为什么价值会发生变化!

我建议在每种语言中添加缺少的条目&#39;带有空字符串值的资源字典。