我的程序的主菜单使用由ContextMenu
组成的MenuItems
。在我的程序本地化期间(使用资源字典),我将DynamicResource
设置为Header
中每个MenuItems
的{{1}}。奇怪地DynamicResource
编译,但似乎不会影响本地化期间的任何变化(Headers
上的语言不会改变)。
MenuItem
:
//I'm not sure if the x:Name or the PlacementRectangle is interfering with anything...
<ContextMenu x:Name="MainContextMenu" PlacementRectangle="{Binding RelativeSource={RelativeSource Self}}">
<MenuItem Header="{DynamicResource open}" />
</ContextMenu>
MenuItem
控制的限制是什么?它应该与DynamicResource
一起使用吗?我的总体目标是本地化这些strings
,我该怎么做?
此程序在WPF中。谢谢。
更新 这就是我的App.xaml文件中引用我的资源字典的方式:
<Application.Resources>
<ResourceDictionary>
<ResourceDictionary.MergedDictionaries>
<ResourceDictionary Source="Lang.en-US.xaml" />
</ResourceDictionary.MergedDictionaries>
<ResourceDictionary>
<Application.Resources>
更新2: 我的英语资源词典中的示例字符串:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib">
<sys:String x:Key="open">Open</sys:String>
</ResourceDictionary>
更新3: 我如何将当前资源字典更改为西班牙语的示例函数:
private void spanishChange_Click(object sender, RoutedEventArgs e)
{
Application.Current.Resources.MergedDictionaries.Clear();
Application.Current.Resources.MergedDictionaries.Add(
(ResourceDictionary)Application.LoadComponent(new Uri("LangspES.xaml", UriKind.Relative)));
LanguageChange.FireLanguageChanged();
}
答案 0 :(得分:2)
您是否已将LANGUAGE.xaml文件添加到App.ResourceDictionary或控制ResourceDictionary?
e.g。
<Application.Resources>
<ResourceDictionary Source="LANGUAGE1.xaml" />
<ResourceDictionary Source="LANGUAGE2.xaml" />
</Application.Resources>
如果不是,您如何引用资源词典?
更新
如果你改变了
<MenuItem Header="{DynamicResource open}" />
到
<MenuItem Header="{StaticResource open}" />
那么它有效吗?或者甚至
<TextBox DockPanel.Dock="Top" Text="{StaticResource open}" />
工作?
看起来你的xaml应该可以工作,这让我想知道你是否在你的应用中正确设置了本地化?
有关如何在.net 4.5中设置本地化的信息,请参阅this msdn link