1

ResourceDictionary ロケータを作成する方法はありますか。今私はxamlにあります:

 <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="../../Resources/StringResources.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>

コード ビハインドが currentculture に基づいて辞書のリストを設定する場所

私はしたいです

 <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <Locator "StringResources"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>

または、各 v.xaml.cs ファイルを変更する必要がないようなもの

4

3 に答える 3

2

MarkupExtension要求された ResourceDictionary を返すを作成できます。

public class ResourceDictionaryLocator : MarkupExtension
{
    public string DictionaryName { get; set; }

    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        // Logic to return the wanted ResourceDictionary
        if (DictionaryName == "...")
        {
        }

        return null;
    }
}

次に、xaml で使用します。

<ResourceDictionary>
    <ResourceDictionary.MergedDictionaries>
        <local:ResourceDictionaryLocator DictionaryName="StringResources" />
    </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>
于 2012-09-14T18:37:53.580 に答える
2

独自の 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>

ただし、これは通常行われません。実行時にさまざまなリソース ディクショナリをロードできます。次のようなもの:

Application.Current.Resources.MergedDictionaries.Clear();
Application.Current.Resources.MergedDictionaries.Add(dictionary);
于 2012-09-14T18:33:27.117 に答える
0

これが可能かどうかはわかりませんが、アプリケーションを「ローカライズ可能」にしますか? この記事が役に立つかもしれません: http://www.codeproject.com/KB/WPF/WPF_Resx_Localization/

于 2012-09-14T18:25:35.293 に答える