/// <summary>
        /// 加载用户指定的资源Xaml文件
        /// </summary>
        /// <param name="resxFile">资源文件名称</param>
        /// <returns>返回资源文件信息</returns>
        public static ResourceFileInfo LoadResourXamlFromFile(string resxFile)
        {
            XmlDocument doc = new XmlDocument();

            doc.Load(resxFile);

            List <ResourceItem> itemList = new List <ResourceItem>();

            foreach (XmlNode ele in doc.DocumentElement.ChildNodes)
            {
                if (ele is XmlElement)
                {
                    XmlAttribute attr = ele.Attributes["x:Key"];
                    if (attr == null)
                    {
                        attr = ele.Attributes["x:key"];
                    }
                    if (attr != null)
                    {
                        itemList.Add(new ResourceItem()
                        {
                            Key = attr.Value, OldValue = ele.InnerText
                        });
                    }
                }
            }
            itemList.Sort(new Comparison <ResourceItem>((ResourceItem item1, ResourceItem item2) => { return(item1.Key.CompareTo(item2.Key)); }));

            ResourceFileInfo resxFileInfo = new ResourceFileInfo();

            resxFileInfo.ResxData = itemList;
            return(resxFileInfo);
        }
        /// <summary>
        /// 将资源键-值对集合保存到指定的Xaml文件中
        /// </summary>
        /// <param name="resxList"></param>
        /// <param name="fileName"></param>
        /// <returns></returns>
        public static bool WriteToXamlFile(string fileName)
        {
            var        doc     = new XmlDocument();
            XmlElement rootEle = doc.CreateElement("ResourceDictionary");

            doc.AppendChild(rootEle);

            rootEle.SetAttribute("xmlns", "http://schemas.microsoft.com/winfx/2006/xaml/presentation");
            rootEle.SetAttribute("xmlns:x", "http://schemas.microsoft.com/winfx/2006/xaml");
            rootEle.SetAttribute("xmlns:s", "clr-namespace:System;assembly=mscorlib");

            ResourceFileInfo resxFileInfo = new ResourceFileInfo();

            foreach (ResourceItem kv in resxFileInfo.ResxData)
            {
                XmlElement   kvEle = doc.CreateElement("s:String");
                XmlAttribute attr  = doc.CreateAttribute("x:key");
                attr.Value = kv.Key;
                kvEle.Attributes.Append(attr);
                XmlText xmltext = doc.CreateTextNode(kv.OldValue);
                kvEle.AppendChild(xmltext);
                rootEle.AppendChild(kvEle);
            }

            try
            {
                doc.Save(fileName);
                return(true);
            }
            catch
            {
                return(false);
            }
        }
Esempio n. 3
0
        /// <summary>
        /// 根据区域代码加载系统Xaml文件
        /// </summary>
        /// <param name="cultureName">区域名称</param>
        /// <returns>资源文件对象</returns>
        public static ResourceFileInfo ReadSystemCultureXamlFile(string cultureName)
        {
            string url = string.Format("pack://application:,,,/Zero.Wpf.CultureInfo;component/Langs/{0}.xaml", cultureName);

            ResourceDictionary resxDict = null;

            try
            {
                resxDict = new ResourceDictionary()
                {
                    Source = new Uri(url, UriKind.RelativeOrAbsolute)
                };
            }
            catch
            {
                return(null);
            }

            var        doc     = new XmlDocument();
            XmlElement rootEle = doc.CreateElement("ResourceDictionary");

            doc.AppendChild(rootEle);

            //设置命名空间
            rootEle.SetAttribute("xmlns", "http://schemas.microsoft.com/winfx/2006/xaml/presentation");
            rootEle.SetAttribute("xmlns:x", "http://schemas.microsoft.com/winfx/2006/xaml");
            rootEle.SetAttribute("xmlns:s", "clr-namespace:System;assembly=mscorlib");

            SortedDictionary <string, string> sortDict = new SortedDictionary <string, string>();

            ResourceFileInfo resxFileInfo = new ResourceFileInfo();

            resxFileInfo.ResxData = new List <ResourceItem>();

            foreach (DictionaryEntry kv in resxDict)
            {
                object value = resxDict[kv.Key];
                if (value == null)
                {
                    continue;
                }
                resxFileInfo.ResxData.Add(new ResourceItem()
                {
                    Key = kv.Key.ToString(), OldValue = value.ToString()
                });
            }

            resxFileInfo.ResxData.Sort(new Comparison <ResourceItem>((ResourceItem item1, ResourceItem item2) => { return(item1.Key.CompareTo(item2.Key)); }));
            System.Globalization.CultureInfo ci = System.Globalization.CultureInfo.GetCultureInfo(cultureName);
            resxFileInfo.CultureName    = cultureName;
            resxFileInfo.CultureCaption = ci.DisplayName;

            return(resxFileInfo);
        }
        /// <summary>
        /// 序列化
        /// </summary>
        /// <param name="resxFileInfo">资源文件信息对象</param>
        /// <returns>二进制数据</returns>
        public static byte[] BinarySerialize(ResourceFileInfo resxFileInfo)
        {
            IFormatter formatter = new BinaryFormatter();

            using (MemoryStream stream = new MemoryStream())
            {
                try
                {
                    formatter.Serialize(stream, resxFileInfo);
                    return(stream.GetBuffer());
                }
                catch
                {
                    return(null);
                }
            }
        }