【问题标题】:DynamicResource doesn't show the correct valueDynamicResource 未显示正确的值
【发布时间】:2017-09-01 06:07:48
【问题描述】:

我对 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>

这是我的“默认”资源字典。 我还有另外两个字典,分别称为“Documentation.de-DE.xaml”和“Documentation-es-ES.xaml”,分别用于德语和英语。 它们与默认字典几乎相同。唯一的区别是显示的字符串。

现在我的问题是: 当我通过“DynamicResource”访问资源时,我会从活动字典中获得结果。 (例如:我得到西班牙语中“ProductDescription”的“产品描述”。)如果字典中的条目可用,一切正常。 当一个条目不可用时会出现问题。 假设以下情况: 我正在以西班牙语运行该软件并想将其更改为德语,但字典中的一个条目不可用,那么该软件没有使用它的默认条目。我仍然有西班牙语词典中的值。

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

我希望我有你需要的所有信息。如果没有请告诉我

【问题讨论】:

  • 它实际上是“崩溃”还是 TextBlock 没有改变?
  • @mm8 就像我说的,这只是我的意见。不知道会不会崩溃我唯一知道的是,它不会改变。如果该条目可用,它可以正常工作并更改文本框。我还编辑了问题以使其清楚。

标签: c# wpf xaml dictionary


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    这是有道理的。如果根本没有入口,为什么值要改变!

    我建议在每个“语言”资源字典中使用空字符串值添加缺失的条目。

    【讨论】:

      【解决方案3】:

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

      这是预期的行为。使用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

      【讨论】:

      • 嗯,好的。我认为(希望)已经实现了某种方法。我会调查的!谢谢!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多