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