zoukankan      html  css  js  c++  java
  • WPF多语言功能简单示例

    一.本功能的原理

    1为不同语言创建不同的资源文件,如en-us.xamlzh-cn.xaml

    2、在App.xaml加载时根据配置文件的值读取不同的资源文件

    3、在各窗体的xaml文件中利用动态绑定显示资源文件内容

    4、更改不同语言需修改配置文件的值并重新启动程序,也可获取当前操作系统的语言类型在启动时读取不同的语言资源文件

     

    en-us.xaml(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">

        <s:String x:Key="MainWindowTitle">Localization Demos</s:String>

        <s:String x:Key="LanguageMenuHeader">_Languages</s:String>

        <s:String x:Key="EnglishMenuHeader">_Englishs</s:String>

        <s:String x:Key="ChineseMenuHeader">_EnglishsHeader</s:String>

        <s:String x:Key="OpenLanguageFileMenuHeader">_Open Language Files</s:String>

    </ResourceDictionary>

     

     创建配置文件并读取(需引入System.configuration)

      <appSettings>

        <add key="Lang" value="/Resources/Langs/en-us.xaml" />

      </appSettings>

     

    public partial class App : Application

        {

            protected override void OnStartup(StartupEventArgs e)

            {

                base.OnStartup(e);

                string langType = ConfigurationManager.AppSettings.Get("Lang");

                App.Current.Resources.MergedDictionaries.Add(new ResourceDictionary() { Source = new Uri(langType, UriKind.RelativeOrAbsolute) });

            }

    }

    动态绑定:

        <StackPanel VirtualizingStackPanel.VirtualizationMode="Recycling" HorizontalAlignment="Left" VerticalAlignment="Top">

            <Label Content="{DynamicResource MainWindowTitle}"/>

            <Label Content="{DynamicResource LanguageMenuHeader}"/>

            <Label Content="{DynamicResource EnglishMenuHeader}"/>

            <Label Content="{DynamicResource ChineseMenuHeader}"/>

            <Label Content="{DynamicResource OpenLanguageFileMenuHeader}"/>

        </StackPanel>

    修改配置文件值:

      XmlDocument doc = new XmlDocument();

                doc.Load(path);

                XmlNode node = doc.SelectSingleNode(@"//add[@key='Lang']");

                XmlElement ele = (XmlElement)node;

                ele.SetAttribute("value", Type);

                doc.Save(path);

  • 相关阅读:
    依赖注入模式与反模式
    WPF异常——某个ItemsControl与它的项源不一致
    C# 3进化的数据访问之智能的编译器
    C# 2的重大改进之可空类型
    C# 1之外:构建于坚实基础上的新特性
    C# 1的核心基础之二——类型系统
    C# 1的核心基础之一——委托
    C#进化史
    单一职责原则
    HBase简介
  • 原文地址:https://www.cnblogs.com/gossip/p/2073340.html
Copyright © 2011-2022 走看看