WPF 多语言切换及ResourceDictionary的Source路径填写

news2024/12/25 12:31:52

WPF 多语言切换

1. 添加资源字典

新增两个资源字典,里面分别存储不同语言的文本

在这里插入图片描述

<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=netstandard">
    <s:String x:Key="btnConfirm">确认</s:String>
    <s:String x:Key="btnCancle">取消</s:String>
</ResourceDictionary>

在这里插入图片描述

<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=netstandard">
    <s:String x:Key="btnConfirm">Sure</s:String>
    <s:String x:Key="btnCancle">NoSure</s:String>
</ResourceDictionary>

.net core环境下没有自动引入system命名空间,在这里根据提示引入xmlns:s="clr-namespace:System;assembly=netstandard"

2. 配置资源字典

在ResourceDictionary中把新增的资源字典加进去
在这里插入图片描述

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

2.1 在这里需要注意的是Source路径的填写

如果你的资源字典文件位于与当前XAML文件相同的目录下,你可以直接写文件名(包括扩展名 .xaml),就直接写<ResourceDictionary Source="en-us.xaml" /> 就行了

如果资源字典位于子目录下,例如一个名为 Resources 的子目录,你需要包含子目录名,变成<ResourceDictionary Source="Resources/en-us.xaml" />

如果资源字典位于父目录下,你可以使用 … 来表示父目录。
<ResourceDictionary Source="../en-us.xaml" />

对于更复杂的项目结构或对于组件库中的资源,你可能需要使用包路径(Pack URI)。包路径的格式通常如下:

<ResourceDictionary Source="pack://application:,,,/wpfMultiLanguage;component/Resources/en-us.xaml" />

3. 在页面上使用

使用动态资源进行绑定
在这里插入图片描述

<Window x:Class="wpfMultiLanguage.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:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <StackPanel>
        <StackPanel.Resources>
            <Style TargetType="Button">
                <Setter Property="Width" Value="120"/>
                <Setter Property="Height" Value="25"/>
                <Setter Property="Margin" Value="5"/>
            </Style>
        </StackPanel.Resources>
        <Button Content="中文" Click="btnChinese_Click"></Button>
        <Button Content="英语" Click="btnEnglish_Click"></Button>
        <Button Content="{DynamicResource btnConfirm}"></Button>
        <Button Content="{DynamicResource btnCancle}"></Button>
    </StackPanel>
</Window>

给上面两个按钮绑定点击事件,实现语言切换

 private void btnChinese_Click(object sender, RoutedEventArgs e)
 {
     ChangeLan("zh-cn");
 }

 private void btnEnglish_Click(object sender, RoutedEventArgs e)
 {
     ChangeLan("en-us");
 }

 private void ChangeLan(string lan)
 {
    
     List<ResourceDictionary> dictionaryList = Application.Current.Resources.MergedDictionaries.ToList();
     string requestedCulture = $"Resources/{lan}.xaml";
     ResourceDictionary resourceDictionary = dictionaryList.FirstOrDefault(d => d.Source.OriginalString.Equals(requestedCulture));
     Application.Current.Resources.MergedDictionaries.Remove(resourceDictionary);
     Application.Current.Resources.MergedDictionaries.Add(resourceDictionary);
 }

4. 演示

在这里插入图片描述
点英文按钮
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1579443.html

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

相关文章

✌2024/4/4—力扣—整数转罗马数字

代码实现&#xff1a; 方法一&#xff1a;硬编码数字 const char *thousands[] {"", "M", "MM", "MMM"}; const char *hundreds[] {"", "C", "CC", "CCC", "CD", "D",…

SpringBoot学习之Kibana下载安装和启动(Mac版)(三十二)

一、简介 Kibana是一个开源的分析与可视化平台,设计出来用于和Elasticsearch一起使用的。你可以用kibana搜索、查看存放在Elasticsearch中的数据。Kibana与Elasticsearch的交互方式是各种不同的图表、表格、地图等,直观的展示数据,从而达到高级的数据分析与可视化的目的。 …

橘子学JDK之JMH-02(BenchmarkModes)

一、案例二代码 这次我们来搞一下官网文档的第二个案例&#xff0c;我删除了一些没用的注释&#xff0c;然后对代码做了一下注释的翻译&#xff0c;可以看一下意思。 package com.levi;import org.openjdk.jmh.annotations.*; import org.openjdk.jmh.runner.Runner; import …

深入理解JVM后端优化技术-方法内联

相关系列 深入理解JVM后端优化技术-逃逸分析(Escape Analysis)-CSDN博客 深入理解JVM后端优化技术-锁消除&#xff08;Lock Elision)-CSDN博客 深入理解JVM后端优化技术-锁粗化(Lock Coarsening)-CSDN博客 jvm只是负责依次将字节码指令逐次转换成机器码。而在转换过程中&#x…

智能电表(AMI):革新电力行业的利器

近年来&#xff0c;随着电力行业的不断发展和科技的进步&#xff0c;智能电表&#xff08;AMI&#xff09;作为一种新型的电能测量设备&#xff0c;逐渐引起了人们的关注。AMI不仅具有传统电表的计量功能&#xff0c;还具备远程通信、数据采集、实时监测和多种数据分析等多功能…

(3)(3.1) 英特尔Realsense深度摄像头(二)

文章目录 前言 5 配置ArduPilot 6 地面测试&#xff1a;飞行前验证 7 飞行测试 8 实验 9 数据闪存记录 前言 本文介绍如何将英特尔 Realsense 深度摄像头(Intel Realsense Depth Camera)与 ArduPilot 配合使用&#xff0c;以实现避障(obstacle avoidance)。该方法使用在…

Linux(CentOS7)部署 y-api 接口管理平台

目录 前言 前置环境 mongodb node 安装 y-api 部署页面 启动 y-api 基本使用教程 前言 前后端分离时代&#xff0c;前后端通过接口文档来协作开发项目。一般开发过程中&#xff0c;由后端先编写接口文档&#xff0c;然后交付给前端&#xff0c;这时候前后端都根据这个…

Linux/Lame

Lame 今天随便乱逛发现这台机器貌似是 HackTheBox 平台的第一台机器&#xff0c;而且我还没做过&#xff0c;从简介上来看的话是一台很简单的机器&#xff0c;快快的玩一下 Enumeration nmap 首先用 nmap 扫描一下常见的端口&#xff0c;发现系统对外开放了 21,22,139,445 端…

如何在CentOS安装Nexus容器无公网IP远程管理本地仓库

文章目录 1. Docker安装Nexus2. 本地访问Nexus3. Linux安装Cpolar4. 配置Nexus界面公网地址5. 远程访问 Nexus界面6. 固定Nexus公网地址7. 固定地址访问Nexus Nexus是一个仓库管理工具&#xff0c;用于管理和组织软件构建过程中的依赖项和构件。它与Maven密切相关&#xff0c;可…

免费专利下载网站(亲测有效!无需注册登录)

1.中国专利全文下载 本数据库收录了自1985年以来的全部中国专利数据摘要及全文&#xff0c;包括中国专利申请公开说明书、授权公告说明书&#xff0c;涵盖全部发明专利、实用新型专利、外观设计专利。药物在线已开发中国专利全文下载极速版!支持专利全文在线浏览&#xff0c;专…

Django交易商场

Hello&#xff0c;我是小恒不会java 最近学习django&#xff0c;写了一个demo,学到了不少东西。 我在GitHub上开源了&#xff0c;提示‘自行查看代码&#xff0c;维护&#xff0c;运行’。 最近有事&#xff0c;先发布代码了&#xff0c;我就随缘维护更新吧 介绍&#xff1a; 定…

计算机的发展趋势

本文 我们来说计算机的发展趋势 目前来讲 计算机是朝着 巨型化 微型化 网络化 智能化发展 巨型化 指功能巨型化 是指其高速运算、大存储容量和强功能的巨型计算机。其运算能力一般在每秒百亿次以上、内存容量在几百兆字节以上。 主要用于航空航天、军事、气象、人工智能、生…

FME学习之旅---day21

我们付出一些成本&#xff0c;时间的或者其他&#xff0c;最终总能收获一些什么。 教程&#xff1a;AutoCAD 变换 相关的文章 为您的 DWG 赋予一些样式&#xff1a;使用 DWGStyler、模板文件、块等 FME数据检查器在显示行的方式上受到限制。它只能显示线条颜色&#xff0c;而…

Linux锁的使用

一、临界资源与临界区 多线程会共享例如全局变量等资源&#xff0c;我们把会被多个执行流访问的资源称为临界资源&#xff0c;我们是通过代码访问临界资源的&#xff0c;而我们访问临界资源的那部分代码称为临界区。 实现一个抢票系统 只有一个线程抢票时 #include <ios…

雷达学习之多普勒频率

一、多普勒频率如何产生&#xff1f; 雷达的原理是发射一些无线电脉冲来探测目标&#xff0c;并通过回波的延时来计算目标与雷达的距离&#xff0c;但当目标为运动物体时&#xff0c;在回波向目标传输的同时&#xff0c;目标也会远离或接近回波&#xff0c;所以会导致回波信号…

CDN加速原理那些事

名词解释 CNAME记录&#xff08;CNAME record&#xff09; CNAME即别名( Canonical Name )&#xff1b;可以用来把一个域名解析到另一个域名&#xff0c;当 DNS 系统在查询 CNAME 左面的名称的时候&#xff0c;都会转向 CNAME 右面的名称再进行查询&#xff0c;一直追踪到最后…

vue 中使 date/time/datetime 类型的 input 支持 placeholder 方法

一般在开发时&#xff0c;设置了 date/time/datetime 等类型的 input 属性 placeholder 提示文本时&#xff0c; 发现实际展示中却并不生效&#xff0c;如图&#xff1a; 处理后效果如图&#xff1a; 处理逻辑 判断表单项未设置值时&#xff0c;则设置其伪类样式&#xff0c;文…

Pillow教程11:九宫格切图的实现方法(安排!!!)

---------------Pillow教程集合--------------- Python项目18&#xff1a;使用Pillow模块&#xff0c;随机生成4位数的图片验证码 Python教程93&#xff1a;初识Pillow模块&#xff08;创建Image对象查看属性图片的保存与缩放&#xff09; Pillow教程02&#xff1a;图片的裁…

ctf_show笔记篇(web入门---SSTI)

前言 模板引擎 模板引擎是为了让用户界面以及业务数据分离开才产生的&#xff0c;模板引擎会生成特定的文档&#xff0c;然后通过模板引擎生成前端html代码&#xff0c;然后再获取用户数据再放到渲染函数里渲染&#xff0c;最后将生成的html代码个渲染好的数据结合拿给浏览器呈…

【Git教程】(十)版本库之间的依赖 —— 项目与子模块之间的依赖、与子树之间的依赖 ~

Git教程 版本库之间的依赖 1️⃣ 与子模块之间的依赖2️⃣ 与子树之间的依赖&#x1f33e; 总结 在 Git 中&#xff0c;版本库是发行单位&#xff0c;代表的是一个版本&#xff0c;而分支或标签则只能被创建在版本库这个整体中。如果一个项目中包含了若干个子项目&#xff0c;…