Wpf 资源字典定位器
有没有办法创建ResourceDictionary定位器。 现在我在xaml中有:Wpf 资源字典定位器,wpf,mvvm,Wpf,Mvvm,有没有办法创建ResourceDictionary定位器。 现在我在xaml中有: <ResourceDictionary> <ResourceDictionary.MergedDictionaries> <ResourceDictionary Source="../../Resources/StringResources.xaml"/> </ResourceDiction
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="../../Resources/StringResources.xaml"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
其中代码隐藏根据currentculture设置字典列表
我想要一个
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<Locator "StringResources"/>
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
或者像这样的东西,我不必修改每个v.xaml.cs文件我真的不知道这是否可行,但是你想让你的应用程序“本地化”吗?也许这篇文章会对您有所帮助:。我真的不知道这是否可行,但您想让您的应用程序“可本地化”吗?这篇文章可能会对您有所帮助:。您可以创建自己的ResourceDictionary:
public class ResourceDictionaryLocator : ResourceDictionary
{
public ResourceDictionaryLocator()
{
switch (CurrentLocalization)
{
case "English":
base.Source = new Uri("pack://application:,,,/Languages/English.xaml");
break;
case "French":
base.Source = new Uri("pack://application:,,,/Languages/French.xaml");
break;
}
}
}
然后像这样消费:
<Application x:Class="TestingWPF.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:TestingWPF"
StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<local:ResourceDictionaryLocator />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
您可以创建自己的ResourceDictionary:
public class ResourceDictionaryLocator : ResourceDictionary
{
public ResourceDictionaryLocator()
{
switch (CurrentLocalization)
{
case "English":
base.Source = new Uri("pack://application:,,,/Languages/English.xaml");
break;
case "French":
base.Source = new Uri("pack://application:,,,/Languages/French.xaml");
break;
}
}
}
然后像这样消费:
<Application x:Class="TestingWPF.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:TestingWPF"
StartupUri="MainWindow.xaml">
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<local:ResourceDictionaryLocator />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
</Application.Resources>
</Application>
您可以创建一个
MarkupExtension
,该扩展将返回请求的ResourceDictionary:
public class ResourceDictionaryLocator : ResourceDictionary
{
public ResourceDictionaryLocator()
{
switch (CurrentLocalization)
{
case "English":
base.Source = new Uri("pack://application:,,,/Languages/English.xaml");
break;
case "French":
base.Source = new Uri("pack://application:,,,/Languages/French.xaml");
break;
}
}
}
公共类ResourceDictionaryCator:MarkupExtension
{
公共字符串字典名称{get;set;}
公共覆盖对象ProviderValue(IServiceProvider服务提供程序)
{
//返回所需资源字典的逻辑
如果(DictionaryName==“…”)
{
}
返回null;
}
}
然后在xaml中使用它:
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<local:ResourceDictionaryLocator DictionaryName="StringResources" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
您可以创建一个
标记扩展名
,该扩展名将返回请求的ResourceDictionary:
public class ResourceDictionaryLocator : ResourceDictionary
{
public ResourceDictionaryLocator()
{
switch (CurrentLocalization)
{
case "English":
base.Source = new Uri("pack://application:,,,/Languages/English.xaml");
break;
case "French":
base.Source = new Uri("pack://application:,,,/Languages/French.xaml");
break;
}
}
}
公共类ResourceDictionaryCator:MarkupExtension
{
公共字符串字典名称{get;set;}
公共覆盖对象ProviderValue(IServiceProvider服务提供程序)
{
//返回所需资源字典的逻辑
如果(DictionaryName==“…”)
{
}
返回null;
}
}
然后在xaml中使用它:
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<local:ResourceDictionaryLocator DictionaryName="StringResources" />
</ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
这太棒了,我让这个定位器收听全球语言更改事件,我的整个应用程序现在从下拉列表中更改。感谢您提供这个优雅的解决方案这太棒了,我让这个定位器收听全球语言更改事件,我的整个应用程序现在从下拉列表更改。感谢您提供了这个优雅的解决方案