WPF 中英文多语言切换动态加载资源字典的方式

时间:2021-08-16
本文章向大家介绍WPF 中英文多语言切换动态加载资源字典的方式,主要包括WPF 中英文多语言切换动态加载资源字典的方式使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

XAML:

<Grid>
    <StackPanel Margin="20">
        <Button x:Name="buttonNewTaskWindow" Height="30" Width="100" Content="{DynamicResource buttonNewTaskWindow}"/>
        <Button x:Name="buttonProperty"  Height="30" Width="100" Margin="0 20 0 0" Content="{DynamicResource buttonProperty}"/>
        <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" Margin="0 20 0 0">
            <RadioButton x:Name="rdbChinese" Content="简体中文" Checked="rdbChinese_Checked"/>
            <RadioButton x:Name="rdbFChinese" Content="繁體中文" Checked="rdbFChinese_Checked"/>
            <RadioButton  x:Name="rdbEnglish" Content="English" Checked="rdbEnglish_Checked"/>
        </StackPanel>
    </StackPanel> 
</Grid 

CodeBehind:

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();

        rdbChinese.IsChecked = true;
    }

    private void rdbEnglish_Checked(object sender, RoutedEventArgs e)
    {
        UpdateLanguage(@"en-us.xaml");
    }

    private void rdbChinese_Checked(object sender, RoutedEventArgs e)
    {
        UpdateLanguage(@"zh-cn.xaml");
    }

    private void rdbFChinese_Checked(object sender, RoutedEventArgs e)
    {

        UpdateLanguage(@"ft.xaml");
    }

    private void UpdateLanguage(string resourcePath)
    {
        List<ResourceDictionary> dictionaryList = new List<ResourceDictionary>();

        foreach (ResourceDictionary dictionary in Application.Current.Resources.MergedDictionaries)
        {
            dictionaryList.Add(dictionary);
        }

        ResourceDictionary resourceDictionary = dictionaryList.FirstOrDefault(d => d.Source.OriginalString.Equals(resourcePath));

        Application.Current.Resources.MergedDictionaries.Remove(resourceDictionary);
        Application.Current.Resources.MergedDictionaries.Add(resourceDictionary);
    }
}

zh-cn.xaml :

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                 xmlns:s="clr-namespace:System;assembly=mscorlib"
                 xmlns:local="clr-namespace:CsWPFTest">
    <s:String x:Key="buttonNewTaskWindow">新建任务</s:String>
    <s:String x:Key="buttonProperty">任务属性</s:String>
</ResourceDictionary>

en-us.xaml :

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                     xmlns:s="clr-namespace:System;assembly=mscorlib"
                     xmlns:local="clr-namespace:CsWPFTest">
    <s:String x:Key="buttonNewTaskWindow">New Task</s:String>
    <s:String x:Key="buttonProperty">Task Property</s:String>
</ResourceDictionary>

ft.xaml :

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                     xmlns:s="clr-namespace:System;assembly=mscorlib"
                     xmlns:local="clr-namespace:CsWPFTest">
    <s:String x:Key="buttonNewTaskWindow">新建任務</s:String>
    <s:String x:Key="buttonProperty">任務屬性</s:String>
</ResourceDictionary>

App.XAML:

<Application x:Class="CsWPFTest.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:local="clr-namespace:CsWPFTest"
             StartupUri="MainWindow.xaml">
    <Application.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="ft.xaml"/>
                <ResourceDictionary Source="en-us.xaml"/>
                <ResourceDictionary Source="zh-cn.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Application.Resources>
</Application>



原文地址:https://www.cnblogs.com/huvjie/p/15149323.html