当前位置: 首页 > news >正文

WPF多语言实现

参考:https://www.cnblogs.com/chenshibao/p/18937359
开发工具:Visual Studio2022

使用资源字典实现。首先创建在项目下新建多语言目录,新建语言资源

image

en-US.xaml内容

<ResourceDictionaryxmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:sys="clr-namespace:System;assembly=netstandard"><sys:String x:Key="Home">Home</sys:String><sys:String x:Key="Chinese">Chinese</sys:String><sys:String x:Key="English">English</sys:String>
</ResourceDictionary>

zh-CN.xaml内容

<ResourceDictionaryxmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:sys="clr-namespace:System;assembly=netstandard"><sys:String x:Key="Home">首页</sys:String><sys:String x:Key="Chinese">中文</sys:String><sys:String x:Key="English">英文</sys:String>
</ResourceDictionary>

App.xaml合并资源

<Applicationx:Class="WpfLocalization.App"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="clr-namespace:WpfLocalization"StartupUri="MainWindow.xaml"><Application.Resources><ResourceDictionary><ResourceDictionary.MergedDictionaries><ResourceDictionary Source="pack://application:,,,/WPFLocalization;component/Language/zh-CN.xaml" /></ResourceDictionary.MergedDictionaries></ResourceDictionary></Application.Resources>
</Application>

MainWindow.xaml

<Windowx:Class="WpfLocalization.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:local="clr-namespace:WpfLocalization"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"Title="MainWindow"Width="800"Height="450"d:DataContext="{d:DesignInstance Type=local:MainWindowModel}"mc:Ignorable="d"><Grid><StackPanel><StackPanel Orientation="Horizontal"><ButtonPadding="5"Command="{Binding ChangeLanguageCommand}"CommandParameter="zh-CN"Content="{DynamicResource Chinese}" /><ButtonMargin="20,0,0,0"Padding="5"Command="{Binding ChangeLanguageCommand}"CommandParameter="en-US"Content="{DynamicResource English}" /></StackPanel><TextBlock Text="{DynamicResource Home}" /></StackPanel></Grid>
</Window>

MainWindow.xaml.cs的构造方法里面指定DataContext

using System.Windows;namespace WpfLocalization
{/// <summary>/// Interaction logic for MainWindow.xaml/// </summary>public partial class MainWindow : Window{public MainWindow(){InitializeComponent();DataContext = new MainWindowModel();}}
}

MainWindowModel.cs

using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;using Prism.Common;using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;namespace WpfLocalization
{public partial class MainWindowModel : ObservableObject{/// <summary>/// 切换语言/// </summary>/// <param name="language"></param>[RelayCommand]public void ChangeLanguage(string language){var dictionaries = Application.Current.Resources.MergedDictionaries;// 移除当前语言资源var existingTheme = dictionaries.FirstOrDefault(d => d.Source != null &&(d.Source.OriginalString.Contains("Language/zh-CN.xaml") ||d.Source.OriginalString.Contains("Language/en-US.xaml")));if (existingTheme != null){dictionaries.Remove(existingTheme);}//添加新语言资源dictionaries.Add(new ResourceDictionary() { Source = new Uri("Language/" + language + ".xaml", UriKind.Relative) });}}
}

运行效果
image
image

http://www.jsqmd.com/news/20472/

相关文章:

  • 16 倍性能提升,成本降低 98%! 解读 SLS 向量索引架构升级改造
  • unity设置外置文件,运行读取文件获取地址
  • Microsoft Agent Framework/C#:了解Workflows的几种不同模式
  • CodeForces-374D Inna and Sequence
  • 字符串过长导致编译报错的问题及解决办法 - 详解
  • 厨房电秤方案:介绍一款电子秤芯片sic8632
  • CodeForces-1183F Topforces Strikes Back
  • Excel 实现下拉多选功能
  • CF981F Round Marriage
  • macOS直接使用pip安装报错
  • 2025 年最新螺旋地桩厂家推荐排行榜:聚焦光伏大棚等场景,甄选优质实力企业桩尖/大棚/组合/地螺丝螺旋地桩厂家推荐
  • CodeForces-1620D Exact Change
  • Python爬虫:获取某平台数据的下载链接 - 指南
  • 厨房电子秤芯片方案:SIC8632
  • 《借力JBoltAI框架,Java技术开发公司开启高效开发新范式》
  • Wireshark抓包教程:JSON和HTTPS抓取
  • 贡献法算法思维
  • 白鲸开源数据基建平台荣登“创客北京 2025”企业组TOP150,共同助 Agentic AI 行业变革
  • ORACLE检查并创建表空间和表分区
  • 让cherry studio访问使用Docket Desktop中的Docker Model Runner运行的模型
  • 禁用内核模块,是否需要执行脚本 $ sudo update-initramfs -u $ sudo update-grub ? - 详解
  • 2025 年东莞钢结构厂房施工公司最新推荐榜:聚焦企业专利技术、品质管控及知名客户合作案例的权威解析
  • 高性能AI股票预测分析报告 - 2025年10月23日
  • 2025 年电子万能试验机生产厂家最新推荐榜:聚焦企业专利技术、品质管控及知名客户合作案例的权威解析
  • Spring AI Alibaba Admin 正式开源!!
  • snack4-jsonpath v4.0.2 发布
  • SMARTFORMS去掉数值后面的小数点
  • 089_尚硅谷_switch的课堂练习
  • SQL SERVER死锁查询,死锁分析,解锁,查询占用
  • 自定义组件中监听properties里面的属性的方法里面去取另外的properties里面的属性拿不到值的问题