Мое приложение должно поддерживать несколько языков и должно иметь возможность переключать язык во время выполнения. Для этой цели я использую LocalizationExtension из codeplex (http://wpflocalizeextension.codeplex.com/). Я использую Ribbon Contorl в своем приложении. Я создаю ленточные команды в качестве ресурса окна, а также связываю 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}"/>
Затем присвоить его кнопке Свойство команды как статический ресурс.
<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);
}
}
Когда моя программа запускается, элемент управления ленты выбирает нужные языковые строки и изображения. Но когда я менял язык во время выполнения, я не мог видеть никаких изменений в локализованном тексте и изображении элемента управления ленты. Потому что LabelTitle, LargeImageSource и все остальные свойства RibbonCommand не являются свойствами зависимости.
Кто-то уже решил проблему? Или есть какой-то другой способ, кроме LocalizationExtension, чтобы локализовать мое приложение, чтобы оно отвечало моим требованиям?