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);

  • 相关阅读:
    为什么hive表有数据,但count(*)返回0
    数仓建设时,要建历史表,用于保存历史数据,用于日后出问题时,起修复数据的作用。按日期分区,每天都把所有的数据存到当天的分区里
    get_json_object用以获取json类型的字段的值
    str_to_map语句,字符串类型变map类型
    按更新时间取最新记录
    hive临时表
    数仓分层
    次日留存、七日留存
    转义
    数据库三范式
  • 原文地址:https://www.cnblogs.com/gossip/p/2073340.html
Copyright © 2011-2022 走看看