来自其他程序集中DLL的资源

时间:2014-08-08 15:46:13

标签: xaml dll binding resources

我正在创建一个将在模块中构建的应用程序(DLL's)。其中一个DLL为不同语言的应用程序提供Strings

DLL具有以下结构:

  • 语言(这是项目。)
    • 属性
    • 参考
    • Language.cs(此处我可以从应用程序中设置所需的语言,并具有GetText函数,该函数根据集合String返回Culture。) 请告诉我这是一个很好的方法。
    • Language.en-US.resx
    • Language.nl-BE.resx

因此,从Languages.cs我可以根据集合String从资源文件中获取C#中所需的Culture

以下是一个例子:

  1. 我将文化设置为荷兰语:Languages.Language.SetCulture("nl-BE");
  2. 我请求荷兰语中的资源Name:Language.GetText(" Name");
  3. 它将返回String Naam
  4. 那是C#Xaml获取资源Label.Text似乎是一个更大的问题。

    我将Name添加到我的xmlns:l="clr-namespace:My.Languages.;assembly=My.Languages"文件中,但这是我得到的。我无法找到如何在xaml中找到类似Language.GetText("Name")的方式。

    此时我唯一的解决方案是将每个Binding绑定到我的Label.Text代码中的属性,并从那里获取正确的C#。这将产生很多"不需要"绑定/属性,很难维护。

    有什么建议吗?

1 个答案:

答案 0 :(得分:1)

我对Xaml的方法是使用一个Converter来调用你的Language.GetText(键);

e.g。 XAML

<TextBlock Text={Binding FallbackValue='Naam', ConverterParameter='Name' Converter={StaticResource Translate}}" />

C#

public class TranslateConverter : IValueConverter
{
   public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
   {
      if (DesignerProperties.GetIsInDesignMode(new DependencyObject()))
            return DependencyProperty.UnsetValue;

      string localizedValue = string.Empty;
      if (parameter is string)
      {
         localizedValue = Language.GetText(parameter as string);
         return localizedValue;
      }
      else
      {
         return DependencyProperty.UnsetValue;
      }
   }
}