C# WPFLocalizationExtension未转换第一个控件(代码隐藏)

C# WPFLocalizationExtension未转换第一个控件(代码隐藏),c#,wpf,resx,wpflocalizationextension,C#,Wpf,Resx,Wpflocalizationextension,因此,尝试使用wpf本地化扩展 我们的按钮/控件都将其ID存储在代码隐藏中,因此我创建了一个翻译服务来翻译代码隐藏。所以它只是绑定完成的翻译 我们还将翻译存储在一个单独的项目中,由外部组处理翻译。因此,我的翻译方法如下 private string Translate(string id) { string uiString; var locExtension = new LocTextExtension { Key = "XXX.UI.Resource

因此,尝试使用wpf本地化扩展

我们的按钮/控件都将其ID存储在代码隐藏中,因此我创建了一个翻译服务来翻译代码隐藏。所以它只是绑定完成的翻译

我们还将翻译存储在一个单独的项目中,由外部组处理翻译。因此,我的翻译方法如下

private string Translate(string id)
{
    string uiString;

    var locExtension = new LocTextExtension
    {
        Key = "XXX.UI.Resources",
        ResourceIdentifierKey = id
    };

    locExtension.ResolveLocalizedValue( out uiString );
    return uiString ?? id;
}
然而,当我的页面被加载时,它似乎并没有翻译页面上的第一个按钮。第一个按钮返回为Buttun_BtnTxt,而不是转换后的值。我试着交换列表中第一个按钮,但总是第一个失败的按钮

如果我加入一些重试功能,它仍然会失败。(将上述代码放入while循环中,检查uistring==null,然后重试50000次)

如果我离开第一个页面,所有其他页面都可以正常加载,如果我回到第一个页面,翻译也可以正常进行。我一辈子都搞不懂为什么第一次就不翻译

过去有没有人做过类似的事情,也遇到过同样的问题


他又看了一眼。添加了检查已加载程序集的代码。在第一次运行时(失败的地方),这是资源的唯一实例

XXX.UI.Resources, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
第一次尝试失败后,我再次检查了程序集,现在也出现了以下条目

XXX.UI.Resources.resources, Version=0.0.0.0, Culture=de-DE, PublicKeyToken=null
XXX.UI.Resources.resources, Version=0.0.0.0, Culture=ja-JP, PublicKeyToken=null
XXX.UI.Resources.resources, Version=0.0.0.0, Culture=zh-Hans, PublicKeyToken=null

不知道为什么这些延迟加载,也不知道这是否是导致问题的原因。但这是我现在唯一能想到的事情。

最终找到了答案。我仍然需要在我的xaml中包含以下内容

xmlns:lex="http://wpflocalizeextension.codeplex.com"
lex:LocalizeDictionary.DesignCulture="en"
lex:ResxLocalizationProvider.DefaultAssembly="XXX.UI.Resources"
lex:ResxLocalizationProvider.DefaultDictionary="Resources"
至少有一次,如果没有它,本地化的东西根本不起作用,即使你是在代码隐藏中进行本地化

它没有转换第一个控件的原因是,它首先通过VM,然后到达调用此代码的xaml。之后,代码隐藏翻译工作正常

将xaml移动到我的shellview,一切都很好