Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过代码隐藏本地化WPF控件_Wpf_C# 4.0_Localization - Fatal编程技术网

通过代码隐藏本地化WPF控件

通过代码隐藏本地化WPF控件,wpf,c#-4.0,localization,Wpf,C# 4.0,Localization,我有一个WPF应用程序,需要支持本地化。我有两个按钮(添加、删除)和一个组合框(英语、法语)。当我选择法语时,按钮的内容应该更改为(ajouter,effacer) 现在,我的问题是,如果我在代码隐藏中手动设置按钮内容,会有什么不利或缺点?请参阅下面的代码 private void comboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) { ResourceDictionary currentLanguage

我有一个WPF应用程序,需要支持本地化。我有两个按钮(添加、删除)和一个组合框(英语、法语)。当我选择法语时,按钮的内容应该更改为(ajouter,effacer)

现在,我的问题是,如果我在代码隐藏中手动设置按钮内容,会有什么不利或缺点?请参阅下面的代码

private void comboBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
  ResourceDictionary currentLanguage = new ResourceDictionary();

  switch (comboBox.Text)
  {
    case "english": 
      currentLanguage.Source = new Uri("../en-US.xaml", UriKind.RelativeOrAbsolute);
      break;
    case "france": 
      currentLanguage.Source = new Uri("../fr-FR.xaml", UriKind.RelativeOrAbsolute);
      break;
  }

  btnAdd.Content = Resources.GetString("insert");
  btnDelete.Content = Resources.GetString("delete");
}
我知道这有点奇怪,但请回答。为什么我不应该这样本地化我的应用程序呢


谢谢

交换资源字典时,应使用
DynamicResources
而不是
StaticResources
基本上在XAML中执行以下操作:

XAML

其中插入和删除在资源字典中使用x:Key


当您交换字典时,这些将动态更新

Hi MyKuLLSKI,感谢您的回复和回答。你能解释一下为什么应该使用这种方法(优点是什么)而不是使用我的方法吗?这样做就是充分利用WPF。WPF最好使用资源和绑定。理想情况下,一个优秀的架构WPF应用程序具有最少的x:Name引用,并且使用代码隐藏来更新GUI。另外,按照我的方式进行操作将要求您只需更改资源字典,就可以了。按照您的方式,您必须手动更新每个控件背后的代码。然后,如果你再加一个,你必须记得加上它。然后,如果您使用DataTemplates,那么找到这些控件将非常痛苦。
  <Button Content="{DynamicResource Insert}"/>
  <Button Content="{DynamicResource Delete}"/>