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>



posted @   double64  阅读(392)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示