1

私のアプリケーションは複数の言語をサポートする必要があり、実行時に言語を切り替えることができる必要があります。その目的のために、私はコードプレックス ( 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 以外に、要件を満たすようにアプリケーションをローカライズする方法はありますか?

4

1 に答える 1

-1

LocalizationExtension を使用してアプリケーションを簡単にローカライズできます。しかし、おそらく、基本的な方法に戻ってローカライズを行い、カルチャ リソースを分離し、実行時に変更する必要があります。http://msdn.microsoft.com/en-us/library/ms788718.aspxを参照してください。いくつかのカルチャ用に編集できる CVS を生成するには、Locbaml ツールが必要な場合があります。次に、その CSV を別のカルチャ用のリソース dll ファイルにロードし、次のコードで変更します。

Thread.CurrentThread.CurrentCulture = new CultureInfo(...); 次のプロジェクトは、WPF ローカライズに関するガイダンスを提供します- WPF ローカリゼーション ガイダンス ホワイトペーパーが役立つかもしれません:

于 2010-09-14T10:20:43.707 に答える