Style后台动态定义[转]
XML文件的操作
DateTimeFormatter时间格式化
1、 Style 后台动态定义
相信很多人都在Page.Resources或App.Resources中定义过Style,定义的方式简便而重用性高。但有时也需后台动态定义,例如以下场景:用户可自由DIY页面样式,如背景、字体大小、字体颜色等等。
Style tbNewStyle = new Windows.UI.Xaml.Style();
tbNewStyle.Setters.Add(new Setter(TextBlock.FontSizeProperty,"25"));
tbNewStyle.Setters.Add(new Setter(TextBlock.ForegroundProperty, new SolidColorBrush(Colors.Yellow)));
tbNewStyle.TargetType=typeof(TextBlock);
this.tbText.Style = tbNewStyle;
写法很简单,今天我遇到纠结的问题就是:tbNewStyle.Setters.Add(new Setter(FontSizeProperty,"25"))我用的这样的写法,怎么也动态修改不了样式,后来也是在别人的提点下,才加进TextBlock.FontSizeProperty,因为对于对于控件的属性都是独有的,必须标明是哪类控件的属性方能生效,在这儿也提醒各位一下哈,下次写的时候一定要注意~
项目中还是应该尽量使用Resources定义资源样式,代码的复用性高,易于维护。
2、 XML文件的操作
对于本部分的学习主要还是参数MSDN的示例。
(1) 读取项目中XML文件的方法
StorageFolder storageFolder = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFolderAsync(folder);
StorageFile storageFile = await storageFolder.GetFileAsync(file);
XmlLoadSettings loadSettings = new XmlLoadSettings();
loadSettings.ProhibitDtd = false;
loadSettings.ResolveExternals = false;
XmlDocumt document=XmlDocument.LoadFromFileAsync(storageFile, loadSettings);
String xmlStr=document.GetXml();
(2) 向XML某结点追加值
var doc = new Windows.Data.Xml.Dom.XmlDocument();
var cdata = doc.CreateCDataSection(rss);
var element = doc.GetElementsByTagName("content").Item(0);
element.AppendChild(cdata);
(3)修改某结点的值
以下示例是修改Product结点集中子结点Sell10day的值大于InStore的结点中hot属性的值
var doc = new Windows.Data.Xml.Dom.XmlDocument();
var xpath = "/products/product[Sell10day>InStore]/@hot";
var hotAttributes = doc.SelectNodes(xpath);
for (uint index = 0; index < hotAttributes.Length; index++)
{
hotAttributes.Item(index).NodeValue = "1";
}
(4)创建XML文件并保存
var doc = new Windows.Data.Xml.Dom.XmlDocument();
doc.LoadXml(xmlstr);
var file = await Windows.Storage.ApplicationData.Current.LocalFolder.CreateFileAsync("HotProdcuts.xml");
await doc.SaveToFileAsync(file);
XmlDocument类中还有很多属性,用法跟.net FrameWork中类似,后续我会一一列出来,如追加一个结点、追加属性等。
3、 DateTimeFormatter 时间格式化
Win8中提供了非常丰富的时间格式化,种类繁多,主要用DateTimeFormatter进行转换
view sourceprint?
DateTimeFormatter formater= new DateTimeFormatter("shortdate")如:longdate,shorttime,longtime
formater.Format(dateTime);
各种日月年的组合
formater =new DateTimeFormatter("day month")
分别格式化日月年的显示格式
formater =new DateTimeFormatter(
YearFormat.Full,
MonthFormat.Abbreviated,
DayFormat.Default,
DayOfWeekFormat.Abbreviated)
读取XML文件
Windows.Storage.StorageFolder storageFolder = await Windows.ApplicationModel.Package.Current.InstalledLocation.GetFolderAsync (Folder);
Windows.Storage.StorageFile storageFile = await storageFolder.GetFileAsync(file);
Windows.Data.Xml.Dom.XmlLoadSettings xmlloadsettings = new XmlLoadSettings();
xmlloadsettings.ProhibitDtd = false;
xmlloadsettings.ResolveExternals = false;
xmlloadsettings.ElementContentWhiteSpace = true;
XmlDocument doc = await Windows.Data.Xml.Dom.XmlDocument.LoadFromFileAsync(storageFile, xmlloadsettings);
string xmlData = doc.GetXml();
增加节点
//增加节点
var nodelist = doc.SelectNodes("/rss/channel");
for (int i = 0; i < 3; i++)
{
XmlElement ele1 = doc.CreateElement("ChannelType");
XmlElement e1 = doc.CreateElement("ChannelID");
e1.InnerText = "NO" + i.ToString();
ele1.AppendChild(e1);
XmlElement e2 = doc.CreateElement("ChannelName");
e2.InnerText = "Channel" + i.ToString();
ele1.AppendChild(e2);
nodelist[0].AppendChild(ele1);
}
await doc.SaveToFileAsync(storageFile);
查询并修改相应的节点
var node = nodelist[0].SelectNodes("ChannelType");
node[0].SelectSingleNode("ChannelID").InnerText = "channel12";
await doc.SaveToFileAsync(storageFile);
删除节点
var nodeMain = nodelist[0].SelectNodes("ChannelType")[0];
var noderemove = nodeMain.SelectSingleNode("ChannelID");
nodeMain.RemoveChild(noderemove);
await doc.SaveToFileAsync(storageFile);
以上就是XML的简单操作
更多格式化类型可以参考MSDN示例,里面有非常详细的写法
原文网址:http://www.devdiv.com/XML文件操作_Style后台动态定义-thread-124096-1-3.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术