WPF多语言实现

news/2025/10/23 16:45:23/文章来源:https://www.cnblogs.com/xhxx/p/19160190

参考: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.mzph.cn/news/944443.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

16 倍性能提升,成本降低 98%! 解读 SLS 向量索引架构升级改造

为了优化大规模应用场景下的性能和成本压力,我们针对 Embedding 服务的推理瓶颈进行了系统性优化。通过深入分析、方案选择与定制优化,最终实现了吞吐量提升 16 倍,同时显著降低了单位请求的资源成本。作者:郑前祎…

unity设置外置文件,运行读取文件获取地址

直接放代码吧public static string url= "http://192.168.1.43:9100";//public static string url = "http://43.137.7.254:10028/server";private void Awake(){StartCoroutine(GetPath());}IEnu…

Microsoft Agent Framework/C#:了解Workflows的几种不同模式

前言 最近有空的时候在学习Microsoft Agent Framework,在这个框架中目前Workflows分为了Sequential、Concurrent、Handoffs以及Groupchat四种模式,今天让我们来了解一下这四种不同的模式。 首先需要以下两个包:Sequ…

CodeForces-374D Inna and Sequence

tag: *2000;线段树,二分CodeForces-374D Inna and Sequence tag: *2000;线段树有一个比特串 \(w\),初始为空。给定 \(a_1,\cdots,a_m\),满足 \(1\le a_1<\dots<a_m\)。有三种操作:操作 \(-1\):令 \(k\) 为…

字符串过长导致编译报错的问题及解决办法 - 详解

字符串过长导致编译报错的问题及解决办法 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", …

厨房电秤方案:介绍一款电子秤芯片sic8632

SIC8632是一款应用于厨房秤的高性能单片机芯片,由国产厂商西城微科推出。以下是对它的详细介绍:基本特性架构与存储:8位RISC架构的高性能单片机,内置4K16位一次性可编程(OTP)ROM和256字节数据存储器(SRAM),只…

CodeForces-1183F Topforces Strikes Back

tag: *2100;思维题,贪心*CodeForces-1183F Topforces Strikes Back tag: *2100;思维题,贪心给定长度为 \(n\) 的序列 \(a\),从中选出 最多 三个数,满足其中任两个之间没有倍数关系。求这三个数之和的最大值。 \(…

Excel 实现下拉多选功能

Excel 实现下拉多选功能开启宏 创建 sheet 级别的 vb 脚本 将下面代码写入Private Sub Worksheet_Change(ByVal Target As Range)Dim watchRange As RangeDim newVal As String, oldVal As StringDim items() As Strin…

CF981F Round Marriage

首先发现二分答案,然后问题就变成了一个二分图是否有完美匹配的问题,我们自然是希望用 Hall 定理来解决这一问题。 Hall 定理原本的描述还是太吃操作了,考虑猜结论,就是 \(a\) 排序后每个子区间对于其来说都合法那…

macOS直接使用pip安装报错

# 1. 创建虚拟环境 python3 -m venv venv# 2. 激活虚拟环境 source venv/bin/activate # macOS / Linux# 3. 安装你需要的包,比如 requests pip install requests

2025 年最新螺旋地桩厂家推荐排行榜:聚焦光伏大棚等场景,甄选优质实力企业桩尖/大棚/组合/地螺丝螺旋地桩厂家推荐

随着基础设施建设、光伏电站搭建及各类建筑工程的快速推进,螺旋地桩作为关键基础支撑部件,其质量与性能直接决定工程稳定性和使用寿命。但当前市场乱象丛生,部分品牌产品规格单一,难以适配山地、坡地等复杂地形;部…

CodeForces-1620D Exact Change

tag: *2000;构造,分类讨论,枚举CodeForces-1620D Exact Change tag: *2000;构造,分类讨论,枚举给定长度为 \(n\) 的序列 \(s\),要求用面值为 \(1,2,3\) 的若干硬币组合成 \(s\) 中的所有数,求最少需要多少枚硬…

Python爬虫:获取某平台数据的下载链接 - 指南

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

厨房电子秤芯片方案:SIC8632

本文主要描述基于SIC8632芯片研发的电容式厨房电子秤方案。一、MCU芯片的选择原则高精度:厨房秤需要能够精确测量食材的重量,因此MCU芯片应具备高精度模数转换(ADC)功能,以实现对传感器输出信号的准确采样和转换。…

《借力JBoltAI框架,Java技术开发公司开启高效开发新范式》

在当今竞争激烈的软件开发领域,Java技术凭借其跨平台、面向对象、稳定性强等诸多优势,成为了众多企业开发各类应用的首选。对于专注于Java技术开发的公司而言,不断提升开发效率、优化项目质量、降低开发成本,是在市…

Wireshark抓包教程:JSON和HTTPS抓取

本文详细讲解Wireshark抓包工具的使用方法,涵盖JSON网址抓取、HTTPS流量捕获、数据包过滤技巧和TCP握手挥手分析。wireshark能抓取JSON网址吗 wireshark可以抓https吗 Wireshark 是一个 网络封包 分析软件。帮你撷取网…

贡献法算法思维

贡献法算法思维 Prompt: 贡献法算法思维是怎样的 Response: 非常好的问题👏!你问的这个「贡献法」,是算法竞赛中非常常见、非常重要的一种思维方式,尤其在处理计数问题、期望问题、子区间问题、树上路径问题时常常…

白鲸开源数据基建平台荣登“创客北京 2025”企业组TOP150,共同助 Agentic AI 行业变革

近日,第十届“创客中国”北京市中小企业创新创业大赛暨“创客北京2025”创新创业大赛结果揭晓,北京白鲸开源科技有限公司凭借“白鲸开源-Agentic AI 时代下的数据基础设施平台”,荣登企业组 TOP150,并获得大赛组委…

ORACLE检查并创建表空间和表分区

为确保系统在高并发、大数据量环境下的稳定高效运行,要求建立完善的表空间与表分区管理机制,具体包括:定期检查表空间使用率,及时发现并处理空间不足风险;建立分区自动创建与维护流程,防止因分区缺失导致的数据插…

让cherry studio访问使用Docket Desktop中的Docker Model Runner运行的模型

添加自定义提供商,类型选OpenAI。API密钥随意(可以填none) API地址填http://localhost:12434/engines/llama.cpp模型 点击管理选择列出来的模型即可注意:模型名称要按下图中输入docker model ps命令出来的名称填写…