私のアプリケーションは複数の言語をサポートする必要があり、実行時に言語を切り替えることができる必要があります。その目的のために、私はコードプレックス ( http://wpflocalizeextension.codeplex.com/ )の LocalizationExtension を使用しています。アプリケーションでリボン コントロールを使用しています。ウィンドウ リソースとして ribbonCommands を作成し、LableTitle およびその他のプロパティを LocalizationExtension クラスにバインドしています。
<MvvmCore:RibbonCommandExtended x:Key="SwitchLanguageCommand"
CanExecute="RibbonCommandExtended_CanExecute"
Executed="RibbonCommandExtended_Executed"
LabelTitle="{lex:LocText Key=SwitchLanguage,Dict=LanRes}"
ToolTipTitle="{lex:LocText Key=SwitchLanguage,Dict=LanRes}"
LargeImageSource="{lex:LocImage Key=ChangeLanguage,Dict=LanRes}"/>
次に、静的リソースとしてボタン Command プロパティに割り当てます。
<rb:RibbonButton x:Name="EnglishButton" Command="{StaticResource SwitchToEnglishCommand}" Click="EnglishButton_Click">
これが私の RibbonCommandExtended クラスです。
public class RibbonCommandExtended : RibbonCommand
{
private ICommand m_command;
public ICommand Command
{
get { return m_command; }
set
{
m_command = value;
if (m_command != null)
{
this.CanExecute += UsCanExecute;
this.Executed += UsExecuted;
}
else
{
this.CanExecute -= UsCanExecute;
this.Executed -= UsExecuted;
}
}
}
private void UsExecuted(object sender, ExecutedRoutedEventArgs e)
{
Command.Execute(e.Parameter);
}
private void UsCanExecute(object sender, CanExecuteRoutedEventArgs e)
{
e.CanExecute = Command.CanExecute(e.Parameter);
}
}
プログラムが起動すると、リボン コントロールが適切な言語文字列と画像を選択します。しかし、実行時に言語を変更すると、リボン コントロールのローカライズされたテキストと画像に変更が見られませんでした。RibbonCommand の LabelTitle、LargeImageSource、およびその他すべてのプロパティは Dependency プロパティではないためです。
誰かがすでに問題を解決しましたか? または、LocalizationExtension 以外に、要件を満たすようにアプリケーションをローカライズする方法はありますか?