Visual Studio Designer 中具有资源的多语言 wpf 应用程序
Multilanguage wpf application with resources in Visual Studio Designer
这是我的问题:
我有一个多语言 WPF 应用程序,其资源位于两个不同的文件中。现在我像这样在 app.xaml.cs 中选择合适的:
var dict = new ResourceDictionary();
switch (Thread.CurrentThread.CurrentCulture.ToString())
{
case "de-DE":
dict.Source = new Uri("pack://application:,,,/Resources;component/StringResources.de-DE.xaml", UriKind.Absolute);
break;
default:
dict.Source = new Uri("pack://application:,,,/Resources;component/StringResources.xaml", UriKind.Absolute);
break;
}
Resources.MergedDictionaries.Add(dict);
一切正常,但我在 VisualStudio Designer 中看不到该资源。
另一方面,当我在 App.xaml 文件中这样定义 ResourceDictionary 时:
<Application x:Class="Ampe.UI.Views.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Exit="App_OnExit" ShutdownMode="OnMainWindowClose">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/Resources;component/StringResources.de-DE.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
然后我在设计器中有这个资源,但我不能设置多语言。
有没有可能在多语言应用程序的设计器中看到资源?也许在应用程序打开时对 app.xaml 文件进行了某种更改?
你走对了。
我建议您在添加新词典之前清除应用程序合并的词典。
Resources.MergedDictionaries.Clear();
var dict = new ResourceDictionary();
switch (Thread.CurrentThread.CurrentCulture.ToString())
{
case "de-DE":
dict.Source = new Uri("pack://application:,,,/Resources;component/StringResources.de-DE.xaml", UriKind.Absolute);
break;
default:
dict.Source = new Uri("pack://application:,,,/Resources;component/StringResources.xaml", UriKind.Absolute);
break;
}
Resources.MergedDictionaries.Add(dict);
你的 app.xaml 应该像你说的那样:
<Application x:Class="Ampe.UI.Views.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Exit="App_OnExit" ShutdownMode="OnMainWindowClose">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/Resources;component/StringResources.de-DE.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
当您从资源中获取本地化值时,您必须使用 DynamicResources 而不是 StaticResources:
<TextBlock Text="{DynamicResource MyString}" />
对我有用。希望对你有帮助。
这是我的问题: 我有一个多语言 WPF 应用程序,其资源位于两个不同的文件中。现在我像这样在 app.xaml.cs 中选择合适的:
var dict = new ResourceDictionary();
switch (Thread.CurrentThread.CurrentCulture.ToString())
{
case "de-DE":
dict.Source = new Uri("pack://application:,,,/Resources;component/StringResources.de-DE.xaml", UriKind.Absolute);
break;
default:
dict.Source = new Uri("pack://application:,,,/Resources;component/StringResources.xaml", UriKind.Absolute);
break;
}
Resources.MergedDictionaries.Add(dict);
一切正常,但我在 VisualStudio Designer 中看不到该资源。
另一方面,当我在 App.xaml 文件中这样定义 ResourceDictionary 时:
<Application x:Class="Ampe.UI.Views.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Exit="App_OnExit" ShutdownMode="OnMainWindowClose">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="pack://application:,,,/Resources;component/StringResources.de-DE.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
然后我在设计器中有这个资源,但我不能设置多语言。
有没有可能在多语言应用程序的设计器中看到资源?也许在应用程序打开时对 app.xaml 文件进行了某种更改?
你走对了。
我建议您在添加新词典之前清除应用程序合并的词典。
Resources.MergedDictionaries.Clear(); var dict = new ResourceDictionary(); switch (Thread.CurrentThread.CurrentCulture.ToString()) { case "de-DE": dict.Source = new Uri("pack://application:,,,/Resources;component/StringResources.de-DE.xaml", UriKind.Absolute); break; default: dict.Source = new Uri("pack://application:,,,/Resources;component/StringResources.xaml", UriKind.Absolute); break; } Resources.MergedDictionaries.Add(dict);
你的 app.xaml 应该像你说的那样:
<Application x:Class="Ampe.UI.Views.App" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Exit="App_OnExit" ShutdownMode="OnMainWindowClose"> <Application.Resources> <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="pack://application:,,,/Resources;component/StringResources.de-DE.xaml"/> </ResourceDictionary.MergedDictionaries> </ResourceDictionary> </Application.Resources> </Application>
当您从资源中获取本地化值时,您必须使用 DynamicResources 而不是 StaticResources:
<TextBlock Text="{DynamicResource MyString}" />
对我有用。希望对你有帮助。