<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_Mr.Brooks</title><subtitle type="text">其实欲望从未真正离开过~</subtitle><id>http://feed.cnblogs.com/blog/u/65721/rss</id><updated>2012-05-14T00:20:03Z</updated><author><name>MYM]Brooks</name><uri>http://www.cnblogs.com/brooks-dotnet/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/brooks-dotnet/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/65721/rss"/><entry><id>http://www.cnblogs.com/brooks-dotnet/archive/2012/05/13/2498035.html</id><title type="text">VSTO学习笔记（十四）Excel数据透视表与PowerPivot</title><summary type="text">近期公司内部在做一种通用查询报表，方便人力资源分析、统计数据。由于之前公司系统中有一个类似的查询使用Excel数据透视表完成的，故我也打算借鉴一下。 测试代码下载原有系统是使用VBA编写的，难以维护，且对新的操作系统如Windows 7、64位架构不支持，我准备用VSTO进行重写。 数据透视表是一种交互式的表，可以进行某些计算，如求和与计数等。所进行的计算与数据跟数据透视表中的排列有关。 数据透视表是一种完全自助式的报表，功能很强大，对于提取、分析数据来说非常方便。 下面我们添加一张数据透视表。 1、在【数据】中，选择从SQL Server中提取数据： 我从CodePlex上下载了SQL ..</summary><published>2012-05-13T07:53:00Z</published><updated>2012-05-13T07:53:00Z</updated><author><name>MYM]Brooks</name><uri>http://www.cnblogs.com/brooks-dotnet/</uri></author><link rel="alternate" href="http://www.cnblogs.com/brooks-dotnet/archive/2012/05/13/2498035.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/brooks-dotnet/archive/2012/05/13/2498035.html"/><content type="html">&lt;p&gt;近期公司内部在做一种通用查询报表，方便人力资源分析、统计数据。由于之前公司系统中有一个类似的查询使用Excel数据透视表完成的，故我也打算借鉴一下。 &lt;/p&gt;&lt;p&gt;&lt;a style="color: #ff0000" href="http://files.cnblogs.com/brooks-dotnet/VSTO4/2012.05.13_Mr.Brooks_VSTO_16_PivotTableDemo.zip"&gt;测试代码下载&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;原有系统是使用VBA编写的，难以维护，且对新的操作系统如Windows 7、64位架构不支持，我准备用VSTO进行重写。 &lt;/p&gt;&lt;p&gt;数据透视表是一种交互式的表，可以进行某些计算，如求和与计数等。所进行的计算与数据跟数据透视表中的排列有关。 &lt;/p&gt;&lt;p&gt;数据透视表是一种完全自助式的报表，功能很强大，对于提取、分析数据来说非常方便。 &lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201205/201205131231392208.png" /&gt; &lt;/p&gt;&lt;p&gt;下面我们添加一张数据透视表。 &lt;/p&gt;&lt;p&gt;1、在【数据】中，选择从SQL Server中提取数据： &lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201205/20120513123140439.png" /&gt; &lt;/p&gt;&lt;p&gt;我从CodePlex上下载了SQL Server 2012的官方示例数据库：&lt;a href="http://msftdbprodsamples.codeplex.com/"&gt;AdventureWorks2012&lt;/a&gt; &lt;/p&gt;&lt;p&gt;CodePlex网站也改版了，大量Metro风格 &lt;span style="font-family: Wingdings"&gt;J&lt;/span&gt; &lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201205/201205131231422193.png" /&gt; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;2、连接数据库： &lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201205/201205131231424320.png" /&gt; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;3、当前仅仅是测试，选择一个表。当然也可以自己写SQL语句进行筛选数据： &lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201205/201205131231436729.png" /&gt; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;4、点击【完成】结束向导： &lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201205/201205131231441090.png" /&gt; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;5、这里选择【数据透视表报表】： &lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201205/201205131231454089.png" /&gt; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;6、这样一张数据透视表就完成了： &lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201205/201205131231536544.png" /&gt; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;7、在右边拖动我们想要分析的字段： &lt;/p&gt;&lt;p&gt;行维度选择了产品模型和产品，列维度选择了尺寸，最终统计了价格。 &lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201205/20120513123159900.png" /&gt; &lt;/p&gt;&lt;p&gt;双击价格的单元格可以看到明细，相当于钻取报表： &lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201205/20120513123202288.png" /&gt; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;8、除了表格展现，数据透视表还支持各种图表。 &lt;/p&gt;&lt;p&gt;在【数据】中点击【已存在的连接】： &lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201205/201205131232045422.png" /&gt; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;9、选择刚刚创建的数据库连接： &lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201205/201205131232056336.png" /&gt; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;10、选择图表类型： &lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201205/201205131232069858.png" /&gt; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;11、类似刚才一样拖动字段，一个图表就生成了，是不是很强大？ &lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201205/201205131232158967.png" /&gt; &lt;/p&gt;&lt;p&gt;右键可以更改图表类型，如饼形图、锥形图等： &lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201205/201205131232183064.png" /&gt; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201205/201205131232213606.png" /&gt; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201205/20120513123223551.png" /&gt; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;12、我打算把数据透视表功能集成到系统中，需要用代码来生成。 &lt;/p&gt;&lt;p&gt;通过跟踪宏代码，可以很容易用代码来生成： &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: #0000ff"&gt;Sub&lt;/span&gt;&amp;nbsp;Macro1()&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;'&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;'&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;Macro1&amp;nbsp;Macro&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;'&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #008000"&gt;'&lt;/span&gt;&lt;span style="color: #008000"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;Workbooks(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;123.xlsx&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;).Connections.Add&amp;nbsp;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;.&amp;nbsp;AdventureWorks2012&amp;nbsp;Product&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #800000"&gt;""&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #0000ff"&gt;Array&lt;/span&gt;&amp;nbsp;_&amp;nbsp;&lt;br /&gt;&lt;br /&gt;(&amp;nbsp;_&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;OLEDB;Provider=SQLOLEDB.1;Integrated&amp;nbsp;Security=SSPI;Persist&amp;nbsp;Security&amp;nbsp;Info=True;Data&amp;nbsp;Source=.;Use&amp;nbsp;Procedure&amp;nbsp;for&amp;nbsp;Prepare=1;Auto&amp;nbsp;Translate&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&amp;nbsp;_&amp;nbsp;&lt;br /&gt;&lt;br /&gt;,&amp;nbsp;_&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;=True;Packet&amp;nbsp;Size=4096;Workstation&amp;nbsp;ID=WINDOWS8NB;Use&amp;nbsp;Encryption&amp;nbsp;for&amp;nbsp;Data=False;Tag&amp;nbsp;with&amp;nbsp;column&amp;nbsp;collation&amp;nbsp;when&amp;nbsp;possible=False;Ini&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&amp;nbsp;_&amp;nbsp;&lt;br /&gt;&lt;br /&gt;,&amp;nbsp;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;tial&amp;nbsp;Catalog=AdventureWorks2012&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;),&amp;nbsp;&lt;span style="color: #0000ff"&gt;Array&lt;/span&gt;(&amp;nbsp;_&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;""AdventureWorks2012"".""Production"".""Product""&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;),&amp;nbsp;&lt;span style="color: #800080"&gt;3&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;ActiveWorkbook.PivotCaches.Create(SourceType:=xlExternal,&amp;nbsp;SourceData:=&amp;nbsp;_&amp;nbsp;&lt;br /&gt;&lt;br /&gt;ActiveWorkbook.Connections(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;.&amp;nbsp;AdventureWorks2012&amp;nbsp;Product&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;),&amp;nbsp;Version:=&amp;nbsp;_&amp;nbsp;&lt;br /&gt;&lt;br /&gt;xlPivotTableVersion14).CreatePivotTable&amp;nbsp;TableDestination:=&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;Sheet1!R1C1&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;,&amp;nbsp;_&amp;nbsp;&lt;br /&gt;&lt;br /&gt;TableName:=&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;PivotTable1&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;,&amp;nbsp;DefaultVersion:=xlPivotTableVersion14&amp;nbsp;&lt;br /&gt;&lt;br /&gt;Cells(&lt;span style="color: #800080"&gt;1&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #800080"&gt;1&lt;/span&gt;).Select&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;With&lt;/span&gt;&amp;nbsp;ActiveSheet.PivotTables(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;PivotTable1&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;).PivotFields(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;ProductID&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;)&amp;nbsp;&lt;br /&gt;&lt;br /&gt;.Orientation&amp;nbsp;=&amp;nbsp;xlRowField&amp;nbsp;&lt;br /&gt;&lt;br /&gt;.Position&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800080"&gt;1&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;End&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;With&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;ActiveSheet.PivotTables(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;PivotTable1&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;).AddDataField&amp;nbsp;ActiveSheet.PivotTables(&amp;nbsp;_&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;PivotTable1&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;).PivotFields(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;ListPrice&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;),&amp;nbsp;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;Sum&amp;nbsp;of&amp;nbsp;ListPrice&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;,&amp;nbsp;xlSum&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;With&lt;/span&gt;&amp;nbsp;ActiveSheet.PivotTables(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;PivotTable1&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;).PivotFields(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;Size&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;)&amp;nbsp;&lt;br /&gt;&lt;br /&gt;.Orientation&amp;nbsp;=&amp;nbsp;xlColumnField&amp;nbsp;&lt;br /&gt;&lt;br /&gt;.Position&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800080"&gt;1&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;End&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;With&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;With&lt;/span&gt;&amp;nbsp;ActiveSheet.PivotTables(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;PivotTable1&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;).PivotFields(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;ProductModelID&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;)&amp;nbsp;&lt;br /&gt;&lt;br /&gt;.Orientation&amp;nbsp;=&amp;nbsp;xlRowField&amp;nbsp;&lt;br /&gt;&lt;br /&gt;.Position&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800080"&gt;2&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;End&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;With&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;With&lt;/span&gt;&amp;nbsp;ActiveSheet.PivotTables(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;PivotTable1&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;).PivotFields(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;ProductID&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;)&amp;nbsp;&lt;br /&gt;&lt;br /&gt;.Orientation&amp;nbsp;=&amp;nbsp;xlRowField&amp;nbsp;&lt;br /&gt;&lt;br /&gt;.Position&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800080"&gt;2&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;End&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;With&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;span style="color: #0000ff"&gt;End&amp;nbsp;Sub&lt;/span&gt;&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000ff"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000ff"&gt;void&lt;/span&gt;&amp;nbsp;fnExcel数据透视表测试()&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Excel.Application&amp;nbsp;__app&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000ff"&gt;new&lt;/span&gt;&amp;nbsp;Excel.Application();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;__app.DisplayAlerts&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000ff"&gt;false&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Excel.Workbook&amp;nbsp;__book&amp;nbsp;=&amp;nbsp;__app.Workbooks.Add();&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;创建OleDB连接&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Excel.WorkbookConnection&amp;nbsp;__conn&amp;nbsp;=&amp;nbsp;__book.Connections.Add(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;Test&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;PivotTable&amp;nbsp;Test&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;,&amp;nbsp;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;OLEDB;Provider=SQLOLEDB.1;Integrated&amp;nbsp;Security=SSPI;Persist&amp;nbsp;Security&amp;nbsp;Info=True;Data&amp;nbsp;Source=.;Use&amp;nbsp;Procedure&amp;nbsp;for&amp;nbsp;Prepare=1;Auto&amp;nbsp;Translate=True;Packet&amp;nbsp;Size=4096;Workstation&amp;nbsp;ID=WINDOWS8NB;Use&amp;nbsp;Encryption&amp;nbsp;for&amp;nbsp;Data=False;Tag&amp;nbsp;with&amp;nbsp;column&amp;nbsp;collation&amp;nbsp;when&amp;nbsp;possible=False;Initial&amp;nbsp;Catalog=AdventureWorks2012&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;,&amp;nbsp;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;AdventureWorks2012.Production.Product&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;,&amp;nbsp;Excel.XlCmdType.xlCmdTable);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;创建数据透视表&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Excel.PivotTable&amp;nbsp;__table&amp;nbsp;=&amp;nbsp;__book.PivotCaches().Create(Excel.XlPivotTableSourceType.xlExternal&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;,&amp;nbsp;__conn,&amp;nbsp;Excel.XlPivotTableVersionList.xlPivotTableVersion14)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;.CreatePivotTable(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;Sheet1!R1C1&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;PivotTable1&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;,&amp;nbsp;__conn,&amp;nbsp;Excel.XlPivotTableVersionList.xlPivotTableVersion14);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;添加行维度&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;__table.PivotFields(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;ProductModelID&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;).Orientation&amp;nbsp;=&amp;nbsp;Excel.XlPivotFieldOrientation.xlRowField;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;__table.PivotFields(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;ProductModelID&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;).Position&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800080"&gt;1&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;__table.PivotFields(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;ProductID&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;).Orientation&amp;nbsp;=&amp;nbsp;Excel.XlPivotFieldOrientation.xlRowField;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;__table.PivotFields(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;ProductID&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;).Position&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800080"&gt;2&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;添加列维度&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;__table.PivotFields(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;Size&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;).Orientation&amp;nbsp;=&amp;nbsp;Excel.XlPivotFieldOrientation.xlColumnField;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;__table.PivotFields(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;Size&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;).Position&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800080"&gt;1&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #008000"&gt;//&lt;/span&gt;&lt;span style="color: #008000"&gt;添加值维度&lt;/span&gt;&lt;span style="color: #008000"&gt;&lt;br /&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;__table.AddDataField(&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;ListPrice&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;,&amp;nbsp;&lt;span style="color: #800000"&gt;"&lt;/span&gt;&lt;span style="color: #800000"&gt;SUM(ListPrice)&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;,&amp;nbsp;Excel.XlConsolidationFunction.xlSum);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;__book.SaveAs(&lt;span style="color: #800000"&gt;@"&lt;/span&gt;&lt;span style="color: #800000"&gt;D:\test.xlsx&lt;/span&gt;&lt;span style="color: #800000"&gt;"&lt;/span&gt;,&amp;nbsp;Excel.XlFileFormat.xlOpenXMLWorkbook);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;__app.Quit();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.Runtime.InteropServices.Marshal.ReleaseComObject(__app);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.Runtime.InteropServices.Marshal.ReleaseComObject(__book);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.Runtime.InteropServices.Marshal.ReleaseComObject(__conn);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.Runtime.InteropServices.Marshal.ReleaseComObject(__table);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;__app&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;__book&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;__conn&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;__table&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000ff"&gt;null&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;13、这样我们就可以借助于Excel的数据透视表来展示、分析数据。 &lt;/p&gt;&lt;p&gt;正因为PivotTable如此好用，微软将PivotTable功能进行了升级，叫做PowerPivot，作为Excel 2010的一个免费插件发布，定位于企业级自助式的商务智能。 &lt;/p&gt;&lt;p&gt;目前最新版本是Microsoft&amp;#174; SQL Server&amp;#174; 2012 PowerPivot&amp;#174; for Microsoft&amp;#174; Excel&amp;#174; 2010，&lt;a href="http://www.microsoft.com/en-us/download/details.aspx?id=29074"&gt;下载地址&lt;/a&gt;： &lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201205/201205131232265237.png" /&gt; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;与PowerPivot类似，微软还推出了： &lt;/p&gt;&lt;p&gt;Microsoft&amp;#174; SQL Server&amp;#174; 2012 Data Mining Add-ins for Microsoft&amp;#174; Office&amp;#174; 2010 &lt;/p&gt;&lt;p&gt;Microsoft&amp;#174; SQL Server&amp;#174; 2012 Master Data Services Add-in For Microsoft&amp;#174; Excel&amp;#174; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;PowerPivot也是微软商务智能的主推技术之一，&lt;a href="http://www.microsoft.com/en-us/bi/powerpivot.aspx"&gt;官方网站&lt;/a&gt;： &lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201205/201205131232316170.png" /&gt; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;以下摘自&lt;a href="http://baike.baidu.com/view/3609944.htm"&gt;百度百科&lt;/a&gt;： &lt;/p&gt;&lt;p&gt;PowerPivot for Excel 是用于在 Excel 工作簿中创建 PowerPivot 数据的创作工具。您将使用数据透视表和数据透视图等 Excel 数据可视化对象来显示您在 Excel 工作簿 (.xlsx) 文件中嵌入或引用的 PowerPivot 数据。 &lt;/p&gt;&lt;p&gt;PowerPivot for Excel 通过下列方式来支持自助商业智能。 &lt;/p&gt;&lt;p&gt;取消当前 Excel 中的行和列限制，以便可以导入更多的数据。 &lt;/p&gt;&lt;p&gt;通过数据关系层，您可以集成来自不同数据源的数据并全面处理所有数据。可以输入数据、复制其他工作表中的数据或从企业数据库中导入数据。可以在数据之间建立关系以分析数据，就好像所有数据都来自一个数据源一样。 &lt;/p&gt;&lt;p&gt;创建可移植、可重用的数据。数据保留在工作簿内。您无需管理外部数据连接。如果您发布、移动、复制或共享工作簿，所有的数据都会和工作簿在一起。 &lt;/p&gt;&lt;p&gt;工作簿的其余部分可以立即使用所有的 PowerPivot 数据。可以在 Excel 和 PowerPivot 窗口之间切换，从而以交互方式处理数据及其在数据透视表或数据透视图中的表示形式。处理数据或其表示形式不是单独的任务。可以在同一个 Excel 环境中一起处理数据及其表示形式。 &lt;/p&gt;&lt;p&gt;PowerPivot for Excel 可以让您导入、筛选数百万行数据以及对这些数据进行排序，远远超过 Excel 中一百万行的限制。排序和筛选操作都非常快，因为它们是由在 Excel 内部运行的本地 Analysis Services VertiPaq 处理器执行的。 &lt;/p&gt;&lt;p&gt;更重要的是，通过使用 PowerPivot for Excel，您可以在来自完全不同的数据源的数据之间建立关系，具体方法是映射包含类似或相同数据的列。在数据之间建立关系时，您是在 Excel 中创建了可在数据透视表、数据透视图或任意 Excel 数据表示对象中使用的全新内容。 &lt;/p&gt;&lt;p&gt;保存的数据存储在 Excel 工作簿内部。数据经过高度压缩，生成的文件的大小适合在客户端工作站上进行管理。 &lt;/p&gt;&lt;p&gt;最后，用户会获得一个包含嵌入数据的工作簿 (.xlsx) 文件，这些数据由内部处理器提取和处理，但完全通过 Excel 呈现。压缩和处理是由 Analysis Services VertiPaq 引擎完成的。查询处理在后台透明地运行，以便在 Excel 中提供海量数据支持。因为由本地 Analysis VertiPaq 引擎执行，排序和筛选操作都非常快。 &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;14、安装完PowerPivot后打开Excel会多了一个Ribbon： &lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201205/201205131232345316.png" /&gt; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;打开PowerPivot Windows后可以看到是一个增强的PivotTable： &lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201205/201205131232385344.png" /&gt; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;结合数据挖掘插件已经可以做很多分析了： &lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201205/201205131232429474.png" /&gt; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;小结： &lt;/p&gt;&lt;p&gt;Office 已经从办公平台开始转换为了微软的数据平台、商务智能平台，SQL Server 2012的发布加剧了这一过程。 &lt;/p&gt;&lt;p&gt;PivotTable和PowerPivot可以很方便的做自助式商务智能分析，相较于SQL Server 分析服务和Oracle、IBM的重量级解决方案，是一种轻量级的解决方案，特别适合于业务、管理人员分析、提取需要的数据。 &lt;/p&gt;&lt;p&gt;目前PowerPivot还没有开放API，我也只是从表面了解下基本用途，期待Office 15的登场吧。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/brooks-dotnet/aggbug/2498035.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/brooks-dotnet/archive/2012/05/13/2498035.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/brooks-dotnet/archive/2012/05/12/2497402.html</id><title type="text">WinRT文件系统</title><summary type="text">WinRT和苹果的AppStore的新政策一样，也是一个沙箱环境，应用程序获得的权限十分有限。这虽然提高了程序的安全性，但是也妨碍了一些系统底层功能的开发，降低了用户体验。 测试代码下载WinRT中文件系统也被限制在了库中，这是Windows 7首次引入的类似于我的文档的目录结构，可以管理用户常用的文档、图片、音乐、视频等。 目前只能访问系统内置的几个库：文档、音乐、图片、视频，自定义的库我没有找到访问的方法。若想访问其他文件需要使用FilePicker、FolderPick等对话框，后续再来测试。 以文档库为例，测试一下文件系统。 大多数文件系统的API都位于Windows.Storage.</summary><published>2012-05-12T10:11:00Z</published><updated>2012-05-12T10:11:00Z</updated><author><name>MYM]Brooks</name><uri>http://www.cnblogs.com/brooks-dotnet/</uri></author><link rel="alternate" href="http://www.cnblogs.com/brooks-dotnet/archive/2012/05/12/2497402.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/brooks-dotnet/archive/2012/05/12/2497402.html"/><content type="html">&lt;p&gt;WinRT和苹果的AppStore的新政策一样，也是一个沙箱环境，应用程序获得的权限十分有限。这虽然提高了程序的安全性，但是也妨碍了一些系统底层功能的开发，降低了用户体验。 &lt;/p&gt;&lt;p&gt;&lt;a style="color: #ff0000" href="http://files.cnblogs.com/brooks-dotnet/WinRT/2012.05.12_Mr.Brooks_WinRT_4_FileSystemDemo.zip"&gt;测试代码下载&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;WinRT中文件系统也被限制在了库中，这是Windows 7首次引入的类似于我的文档的目录结构，可以管理用户常用的文档、图片、音乐、视频等。 &lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201205/201205121811164986.png" /&gt; &lt;/p&gt;&lt;p&gt;目前只能访问系统内置的几个库：文档、音乐、图片、视频，自定义的库我没有找到访问的方法。若想访问其他文件需要使用FilePicker、FolderPick等对话框，后续再来测试。 &lt;/p&gt;&lt;p&gt;以文档库为例，测试一下文件系统。 &lt;/p&gt;&lt;p&gt;大多数文件系统的API都位于Windows.Storage命名空间： &lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201205/201205121811193293.png" /&gt; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;1、枚举目录中的顶层目录： &lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt; font-family: Consolas; color: black; background-color: white"&gt;Windows.Storage.&lt;span style="color: #2b91af"&gt;StorageFolder&lt;span style="color: black"&gt; __doc = Windows.Storage.&lt;span style="color: #2b91af"&gt;KnownFolders&lt;span style="color: black"&gt;.DocumentsLibrary; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt; color: green"&gt;&lt;span style="font-family: Consolas; background-color: white"&gt;//&lt;/span&gt;&lt;span style="font-family: 宋体; background-color: white"&gt;枚举目录中的顶层目录&lt;/span&gt;&lt;span style="font-family: Consolas; color: black; background-color: white"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt; font-family: Consolas; color: blue; background-color: white"&gt;foreach&lt;span style="color: black"&gt; (Windows.Storage.&lt;span style="color: #2b91af"&gt;StorageFolder&lt;span style="color: black"&gt; __folder &lt;span style="color: blue"&gt;in&lt;span style="color: black"&gt; &lt;span style="color: blue"&gt;await&lt;span style="color: black"&gt; __doc.GetFoldersAsync()) &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt; font-family: Consolas; color: black; background-color: white"&gt;{ &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt; font-family: Consolas; color: black; background-color: white"&gt;&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; this&lt;span style="color: black"&gt;.txtFolder.Text += __folder.Name + &lt;span style="color: maroon"&gt;"\n"&lt;span style="color: black"&gt;; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt; font-family: Consolas; color: black"&gt;&lt;span style="background-color: white"&gt;}&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt; color: black"&gt;&lt;span style="font-family: Consolas; background-color: white"&gt;GetFoldersAsync()&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;没有递归的重载版本，若想要获取所有子目录，则需要写一个递归函数。&lt;/span&gt;&lt;span style="font-family: Consolas"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;2、枚举目录中的顶层文件： &lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt; font-family: Consolas; color: blue; background-color: white"&gt;foreach&lt;span style="color: black"&gt; (Windows.Storage.&lt;span style="color: #2b91af"&gt;StorageFile&lt;span style="color: black"&gt; __file &lt;span style="color: blue"&gt;in&lt;span style="color: black"&gt; &lt;span style="color: blue"&gt;await&lt;span style="color: black"&gt; __doc.GetFilesAsync()) &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt; font-family: Consolas; color: black; background-color: white"&gt;{ &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt; font-family: Consolas; color: black; background-color: white"&gt;&lt;span style="color: blue"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; this&lt;span style="color: black"&gt;.txtFile.Text += __file.Name + &lt;span style="color: maroon"&gt;"\n"&lt;span style="color: black"&gt;; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt; font-family: Consolas; color: black"&gt;&lt;span style="background-color: white"&gt;}&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt; color: black"&gt;&lt;span style="font-family: 宋体"&gt;同上&lt;/span&gt;&lt;span style="font-family: Consolas; background-color: white"&gt;GetFilesAsync()&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;也没有重载版本。&lt;/span&gt;&lt;span style="font-family: Consolas"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt; color: black"&gt;&lt;span style="font-family: Consolas"&gt;3&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;、创建文件，若存在则覆盖：&lt;/span&gt;&lt;span style="font-family: Consolas"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt; font-family: Consolas; color: blue"&gt;&lt;span style="background-color: white"&gt;await&lt;span style="color: black"&gt; __doc.CreateFileAsync(&lt;span style="color: maroon"&gt;"Test.txt"&lt;span style="color: black"&gt;, Windows.Storage.&lt;span style="color: #2b91af"&gt;CreationCollisionOption&lt;span style="color: black"&gt;.ReplaceExisting);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt; color: black"&gt;&lt;span style="font-family: Consolas"&gt;4&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;、创建目录，若存在则覆盖：&lt;/span&gt;&lt;span style="font-family: Consolas"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt; font-family: Consolas; color: blue"&gt;&lt;span style="background-color: white"&gt;await&lt;span style="color: black"&gt; __doc.CreateFolderAsync(&lt;span style="color: maroon"&gt;"Test"&lt;span style="color: black"&gt;, Windows.Storage.&lt;span style="color: #2b91af"&gt;CreationCollisionOption&lt;span style="color: black"&gt;.ReplaceExisting);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt; color: black"&gt;&lt;span style="font-family: Consolas"&gt;5&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;、复制文件&lt;/span&gt;&lt;span style="font-family: Consolas"&gt;: &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt; font-family: Consolas; color: #2b91af; background-color: white"&gt;StorageFile&lt;span style="color: black"&gt; __f = &lt;span style="color: blue"&gt;await&lt;span style="color: black"&gt; __doc.GetFileAsync(&lt;span style="color: maroon"&gt;"Test.txt"&lt;span style="color: black"&gt;); &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt; font-family: Consolas; color: #2b91af; background-color: white"&gt;StorageFolder&lt;span style="color: black"&gt; __fo = &lt;span style="color: blue"&gt;await&lt;span style="color: black"&gt; __doc.GetFolderAsync(&lt;span style="color: maroon"&gt;"Test"&lt;span style="color: black"&gt;); &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt; font-family: Consolas; color: blue; background-color: white"&gt;await&lt;span style="color: black"&gt; __f.CopyAsync(__fo, &lt;span style="color: maroon"&gt;"NewTest.txt"&lt;span style="color: black"&gt;, &lt;span style="color: #2b91af"&gt;NameCollisionOption&lt;span style="color: black"&gt;.ReplaceExisting); &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt; font-family: Consolas; color: blue"&gt;&lt;span style="background-color: white"&gt;await&lt;span style="color: black"&gt; __f.CopyAndReplaceAsync(__f);&lt;/span&gt;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt; color: black"&gt;&lt;span style="font-family: 宋体"&gt;目录没有提供&lt;/span&gt;&lt;span style="font-family: Consolas"&gt;Copy&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;方法，需要手动处理，先创建空目录，然后递归创建子目录、子文件。&lt;/span&gt;&lt;span style="font-family: Consolas"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt; color: black"&gt;&lt;span style="font-family: Consolas"&gt;6&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;、重命名文件：&lt;/span&gt;&lt;span style="font-family: Consolas"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt; font-family: Consolas; color: blue"&gt;&lt;span style="background-color: white"&gt;await&lt;span style="color: black"&gt; __f.RenameAsync(&lt;span style="color: maroon"&gt;"NewTest.txt"&lt;span style="color: black"&gt;, &lt;span style="color: #2b91af"&gt;NameCollisionOption&lt;span style="color: black"&gt;.ReplaceExisting);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt; color: black"&gt;&lt;span style="font-family: Consolas"&gt;7&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;、重命名目录：&lt;/span&gt;&lt;span style="font-family: Consolas"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt; font-family: Consolas; color: blue"&gt;&lt;span style="background-color: white"&gt;await&lt;span style="color: black"&gt; __fo.RenameAsync(&lt;span style="color: maroon"&gt;"NewTest"&lt;span style="color: black"&gt;, &lt;span style="color: #2b91af"&gt;NameCollisionOption&lt;span style="color: black"&gt;.ReplaceExisting);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt; color: black"&gt;&lt;span style="font-family: Consolas"&gt;8&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;、剪切文件：&lt;/span&gt;&lt;span style="font-family: Consolas"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;await __f.MoveAsync(__fo, "NewTest.txt", NameCollisionOption.ReplaceExisting); &lt;/p&gt;&lt;p&gt;目录没有提供剪切方法，也需要手动处理。 &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;9、向文件中写入文本： &lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt; color: blue"&gt;&lt;span style="font-family: Consolas; background-color: white"&gt;await&lt;span style="color: black"&gt; &lt;span style="color: #2b91af"&gt;FileIO&lt;span style="color: black"&gt;.WriteTextAsync(__f, &lt;span style="color: maroon"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; background-color: white"&gt;写入文本&lt;/span&gt;&lt;span style="font-family: Consolas; color: maroon"&gt;&lt;span style="background-color: white"&gt;"&lt;span style="color: black"&gt;);&lt;/span&gt;&lt;/span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt; font-family: Consolas; color: #2b91af; background-color: white"&gt;FileIO&lt;/span&gt;是一个静态类，可以对指定文件进行操作。类似还有一个&lt;span style="font-size: 9pt; font-family: Consolas; color: #2b91af; background-color: white"&gt;PathIO&lt;/span&gt;，针对指定绝对路径的文件或目录进行操作。&lt;span style="font-size: 9pt; font-family: Consolas; color: black"&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt; color: black"&gt;&lt;span style="font-family: Consolas"&gt;10&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;、通过字节写入文件：&lt;/span&gt;&lt;span style="font-family: Consolas"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt; color: #2b91af"&gt;&lt;span style="font-family: Consolas; background-color: white"&gt;IBuffer&lt;span style="color: black"&gt; __buffer = GetBufferFromString(&lt;span style="color: maroon"&gt;"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family: 宋体; background-color: white"&gt;通过字节写入&lt;/span&gt;&lt;span style="font-family: Consolas; color: maroon; background-color: white"&gt;"&lt;span style="color: black"&gt;); &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt; font-family: Consolas; color: blue"&gt;&lt;span style="background-color: white"&gt;await&lt;span style="color: black"&gt; &lt;span style="color: #2b91af"&gt;FileIO&lt;span style="color: black"&gt;.WriteBufferAsync(__f, __buffer);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt; color: black"&gt;&lt;span style="font-family: Consolas"&gt;11&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;、获取文件流：&lt;/span&gt;&lt;span style="font-family: Consolas"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt; font-family: Consolas; color: #2b91af"&gt;&lt;span style="background-color: white"&gt;IRandomAccessStream&lt;span style="color: black"&gt; __stream = &lt;span style="color: blue"&gt;await&lt;span style="color: black"&gt; __f.OpenAsync(&lt;span style="color: #2b91af"&gt;FileAccessMode&lt;span style="color: black"&gt;.ReadWriteNoCopyOnWrite);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt; color: black"&gt;&lt;span style="font-family: Consolas"&gt;12&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;、删除文件，直接删除，不放进回收站：&lt;/span&gt;&lt;span style="font-family: Consolas"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt; font-family: Consolas; color: blue"&gt;&lt;span style="background-color: white"&gt;await&lt;span style="color: black"&gt; __f.DeleteAsync(&lt;span style="color: #2b91af"&gt;StorageDeleteOption&lt;span style="color: black"&gt;.PermanentDelete);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt; color: black"&gt;&lt;span style="font-family: Consolas"&gt;13&lt;/span&gt;&lt;span style="font-family: 宋体"&gt;、删除目录，直接删除，不放进回收站：&lt;/span&gt;&lt;span style="font-family: Consolas"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt; font-family: Consolas; color: blue"&gt;&lt;span style="background-color: white"&gt;await&lt;span style="color: black"&gt; __fo.DeleteAsync(&lt;span style="color: #2b91af"&gt;StorageDeleteOption&lt;span style="color: black"&gt;.PermanentDelete);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 9pt; font-family: 宋体; color: black"&gt;注意只能删除空目录，若目录中还有子目录或文件，则需要先删除子文件，需要递归删除。&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/brooks-dotnet/aggbug/2497402.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/brooks-dotnet/archive/2012/05/12/2497402.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/brooks-dotnet/archive/2012/04/10/2441339.html</id><title type="text">开发WinRT自定义组件之富文本框</title><summary type="text">富文本框是常用的组件之一，多用于文章排版、用户评论等。WinRT组件中内置了两个：RichEditBox、RichTextBlock。RichEditBox可以编辑，RichTextBlock只用来显示。由于内置的组件缺少工具栏，故我准备扩展一下，添加一些常用的功能。测试代码下载1、首先创建一个 WinRT 类库项目：2、添加Templated Control：会自动创建Themes文件夹与Generic.xaml文件：其中自定义组件的类中会缺少前缀，手动添加即可：3、设计RichEditBoxX的样式：1&lt;StyleTargetType="winrt:RichEdit</summary><published>2012-04-10T13:32:00Z</published><updated>2012-04-10T13:32:00Z</updated><author><name>MYM]Brooks</name><uri>http://www.cnblogs.com/brooks-dotnet/</uri></author><link rel="alternate" href="http://www.cnblogs.com/brooks-dotnet/archive/2012/04/10/2441339.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/brooks-dotnet/archive/2012/04/10/2441339.html"/><content type="html">&lt;p&gt;富文本框是常用的组件之一，多用于文章排版、用户评论等。&lt;/p&gt;&lt;p&gt;WinRT组件中内置了两个：RichEditBox、RichTextBlock。RichEditBox可以编辑，RichTextBlock只用来显示。&lt;/p&gt;&lt;p&gt;由于内置的组件缺少工具栏，故我准备扩展一下，添加一些常用的功能。&lt;/p&gt;&lt;p&gt;&lt;a href="http://files.cnblogs.com/brooks-dotnet/2012.04.10_Mr.Brooks_WinRT_3_RichEditBoxX.zip" style="color: #ff0000; "&gt;测试代码下载&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;1、首先创建一个 WinRT 类库项目：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201204/20120410213151388.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;2、添加Templated Control：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201204/201204102131529176.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;会自动创建Themes文件夹与Generic.xaml文件：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201204/20120410213152779.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;其中自定义组件的类中会缺少前缀，手动添加即可：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201204/201204102131547059.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;3、设计RichEditBoxX的样式：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Style&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;TargetType&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="winrt:RichEditBoxX"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Setter&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Property&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Template"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Setter.Value&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;ControlTemplate&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;TargetType&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="winrt:RichEditBoxX"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;5&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;StackPanel&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;6&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;StackPanel&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Orientation&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Horizontal"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;7&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;ComboBox&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Name&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="txtFontFamily"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Width&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="80"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;ComboBox&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;8&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;ComboBox&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Name&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="txtFontSize"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Width&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="80"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;ComboBox&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;9&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Button&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Name&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="btnWeight"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Width&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="50"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Content&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="B"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Button&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;10&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Button&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Name&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="btnStyle"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Width&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="50"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Content&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="I"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;FontStyle&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Italic"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Button&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;11&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Button&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Name&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="btnUnderline"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Width&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="50"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Content&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="U"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Button&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;12&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;ComboBox&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Name&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="txtAlign"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Width&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="50"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;13&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;ComboBox.Items&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;14&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;ContentControl&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Name&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="labLeft"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Content&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Left"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Width&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="50"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;ContentControl&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;15&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;ContentControl&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Name&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="labCenter"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Content&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Center"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Width&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="50"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;ContentControl&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;16&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;ContentControl&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Name&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="labRight"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Content&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Right"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Width&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="50"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;ContentControl&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;17&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;ContentControl&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Name&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="labJustify"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Content&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Justify"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Width&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="50"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;ContentControl&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;18&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;ComboBox.Items&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;19&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;ComboBox&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;20&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Button&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Name&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="btnForeground"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Content&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Foreground"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Width&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="120"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Button&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;21&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Button&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Name&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="btnBackground"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Content&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Background"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Width&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="120"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Button&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;22&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Button&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Name&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="btnImage"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Content&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Image"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Width&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="80"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Button&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;23&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Button&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Name&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="btnVideo"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Content&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="Video"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Width&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="80"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Button&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;24&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;StackPanel&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;25&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;RichEditBox&amp;nbsp;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Name&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="txtRichEdit"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;AcceptsReturn&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="True"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Width&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{TemplateBinding&amp;nbsp;Width}&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;"&lt;/span&gt;&lt;span style="color: #FF0000;"&gt;&amp;nbsp;Height&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;="&lt;/span&gt;&lt;span style="color: #808000;"&gt;{TemplateBinding&amp;nbsp;Height}&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;"&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;26&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080;"&gt;27&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;RichEditBox&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;28&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;StackPanel&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;29&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;ControlTemplate&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;30&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Setter.Value&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;31&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Setter&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;32&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000;"&gt;Style&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;语法与WPF、Silverlight基本一致，注意添加命令空间的语法有所改变：&lt;/p&gt;&lt;p&gt;&lt;span style="color:red; font-family:Consolas; font-size:9pt"&gt;&lt;span style="background-color:white"&gt;xmlns&lt;span style="color:blue"&gt;:&lt;span style="color:red"&gt;winrt&lt;span style="color:blue"&gt;="using:BrooksCom.WinRT.Control"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;目前无法将自定义组件的XAML单独拆分成多个文件，要被迫写在Generic.xaml中，这应该是一个疏忽，希望正式版能改正这个问题。&lt;/p&gt;&lt;p&gt;目前Generic.xaml依然不能可视化设计，对于美工水平相当凑合的我来说，想好看点是种奢望 &lt;span style="font-family:Wingdings"&gt;J&lt;/span&gt;&lt;/p&gt;&lt;p&gt;顺便期待下Blend 5正式版，什么时候能发布，好歹把WPF、Silverlight、WinRT、Windows Phone 四种平台集成到一起，不要分为多个了。&lt;/p&gt;&lt;p&gt;比较奇怪的是WinRT中居然没有Label控件，我暂且使用&lt;span style="color:#a31515; font-family:Consolas; font-size:9pt; background-color:white"&gt;ContentControl&lt;/span&gt;代替。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;4、设置字体功能使用了WCF服务：&lt;/p&gt;&lt;p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;class&lt;/span&gt;&amp;nbsp;SrvFont&amp;nbsp;:&amp;nbsp;ISrvFont&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&amp;nbsp;List&amp;lt;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;gt;&amp;nbsp;DoWork()&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;5&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;List&amp;lt;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;gt;&amp;nbsp;__list&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&amp;nbsp;List&amp;lt;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;gt;();&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;6&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;InstalledFontCollection&amp;nbsp;fonts&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&amp;nbsp;InstalledFontCollection();&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;7&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;foreach&lt;/span&gt;&amp;nbsp;(FontFamily&amp;nbsp;font&amp;nbsp;&lt;span style="color: #0000FF;"&gt;in&lt;/span&gt;&amp;nbsp;fonts.Families)&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;8&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;9&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;__list.Add(font.Name);&lt;br /&gt;&lt;span style="color: #008080;"&gt;10&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080;"&gt;11&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080;"&gt;12&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&amp;nbsp;__list;&lt;br /&gt;&lt;span style="color: #008080;"&gt;13&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080;"&gt;14&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-size:9pt"&gt;&lt;span style="font-family:宋体"&gt;使用了&lt;/span&gt;&lt;span style="font-family:Consolas"&gt;C# 5.0&lt;/span&gt;&lt;span style="font-family:宋体"&gt;的异步方法，&lt;/span&gt;&lt;span style="font-family:Consolas"&gt;WinRT&lt;/span&gt;&lt;span style="font-family:宋体"&gt;中几乎都是异步方法，以后要适应这种风格了：&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;protected&lt;/span&gt;&amp;nbsp;async&amp;nbsp;&lt;span style="color: #0000FF;"&gt;override&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&amp;nbsp;OnApplyTemplate()&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;base&lt;/span&gt;.OnApplyTemplate();&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;5&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RichEditBox&amp;nbsp;__txtRichEdit&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.GetTemplateChild(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;txtRichEdit&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;)&amp;nbsp;&lt;span style="color: #0000FF;"&gt;as&lt;/span&gt;&amp;nbsp;RichEditBox;&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;6&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;7&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ComboBox&amp;nbsp;__txtFontFamily&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.GetTemplateChild(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;txtFontFamily&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;)&amp;nbsp;&lt;span style="color: #0000FF;"&gt;as&lt;/span&gt;&amp;nbsp;ComboBox;&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;8&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;SrvFont.SrvFontClient&amp;nbsp;__proxy&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&amp;nbsp;SrvFont.SrvFontClient();&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;9&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.Collections.ObjectModel.ObservableCollection&amp;lt;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;gt;&amp;nbsp;__list&amp;nbsp;=&amp;nbsp;await&amp;nbsp;__proxy.DoWorkAsync();&lt;br /&gt;&lt;span style="color: #008080;"&gt;10&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;foreach&lt;/span&gt;&amp;nbsp;(&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;nbsp;s&amp;nbsp;&lt;span style="color: #0000FF;"&gt;in&lt;/span&gt;&amp;nbsp;__list)&lt;br /&gt;&lt;span style="color: #008080;"&gt;11&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080;"&gt;12&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;__txtFontFamily.Items.Add(s);&lt;br /&gt;&lt;span style="color: #008080;"&gt;13&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080;"&gt;14&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080;"&gt;15&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;__txtFontFamily.SelectionChanged&amp;nbsp;+=&amp;nbsp;__txtFontFamily_SelectionChanged;&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;5、设置字体、字号等格式：&lt;/p&gt;&lt;p&gt;使用 &lt;span style="color:black; font-size:9pt"&gt;&lt;span style="font-family:Consolas"&gt;&lt;span style="background-color:white"&gt;__txtRichEdit.Document.Selection.FormattedText.CharacterFormat&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:宋体"&gt;来设置样式。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&amp;nbsp;__txtFontFamily_SelectionChanged(&lt;span style="color: #0000FF;"&gt;object&lt;/span&gt;&amp;nbsp;sender,&amp;nbsp;SelectionChangedEventArgs&amp;nbsp;e)&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RichEditBox&amp;nbsp;__txtRichEdit&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.GetTemplateChild(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;txtRichEdit&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;)&amp;nbsp;&lt;span style="color: #0000FF;"&gt;as&lt;/span&gt;&amp;nbsp;RichEditBox;&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ComboBox&amp;nbsp;__txtFontFamily&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.GetTemplateChild(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;txtFontFamily&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;)&amp;nbsp;&lt;span style="color: #0000FF;"&gt;as&lt;/span&gt;&amp;nbsp;ComboBox;&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;5&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;__txtRichEdit.Document.Selection.FormattedText.CharacterFormat.Name&amp;nbsp;=&amp;nbsp;__txtFontFamily.SelectedItem.ToString();&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;6&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;7&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;8&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&amp;nbsp;__txtFontSize_SelectionChanged(&lt;span style="color: #0000FF;"&gt;object&lt;/span&gt;&amp;nbsp;sender,&amp;nbsp;SelectionChangedEventArgs&amp;nbsp;e)&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;9&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080;"&gt;10&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RichEditBox&amp;nbsp;__txtRichEdit&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.GetTemplateChild(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;txtRichEdit&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;)&amp;nbsp;&lt;span style="color: #0000FF;"&gt;as&lt;/span&gt;&amp;nbsp;RichEditBox;&lt;br /&gt;&lt;span style="color: #008080;"&gt;11&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ComboBox&amp;nbsp;__txtFontSize&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.GetTemplateChild(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;txtFontSize&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;)&amp;nbsp;&lt;span style="color: #0000FF;"&gt;as&lt;/span&gt;&amp;nbsp;ComboBox;&lt;br /&gt;&lt;span style="color: #008080;"&gt;12&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;__txtRichEdit.Document.Selection.FormattedText.CharacterFormat.Size&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;float&lt;/span&gt;.Parse(__txtFontSize.SelectedItem.ToString());&lt;br /&gt;&lt;span style="color: #008080;"&gt;13&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;字体加粗的枚举比较特殊，类似一个开关：&lt;/p&gt;&lt;p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&amp;nbsp;__btnWeight_Click(&lt;span style="color: #0000FF;"&gt;object&lt;/span&gt;&amp;nbsp;sender,&amp;nbsp;RoutedEventArgs&amp;nbsp;e)&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RichEditBox&amp;nbsp;__txtRichEdit&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.GetTemplateChild(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;txtRichEdit&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;)&amp;nbsp;&lt;span style="color: #0000FF;"&gt;as&lt;/span&gt;&amp;nbsp;RichEditBox;&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Button&amp;nbsp;__btnWeight&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.GetTemplateChild(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;btnWeight&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;)&amp;nbsp;&lt;span style="color: #0000FF;"&gt;as&lt;/span&gt;&amp;nbsp;Button;&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;5&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;6&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&amp;nbsp;(__txtRichEdit.Document.Selection.FormattedText.CharacterFormat.Bold&amp;nbsp;==&amp;nbsp;Windows.UI.Text.FormatEffect.On)&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;7&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;8&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;__txtRichEdit.Document.Selection.FormattedText.CharacterFormat.Bold&amp;nbsp;=&amp;nbsp;Windows.UI.Text.FormatEffect.Off;&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;9&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080;"&gt;10&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;else&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;11&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080;"&gt;12&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;__txtRichEdit.Document.Selection.FormattedText.CharacterFormat.Bold&amp;nbsp;=&amp;nbsp;Windows.UI.Text.FormatEffect.On;&lt;br /&gt;&lt;span style="color: #008080;"&gt;13&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080;"&gt;14&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080;"&gt;15&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080;"&gt;16&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&amp;nbsp;__btnStyle_Click(&lt;span style="color: #0000FF;"&gt;object&lt;/span&gt;&amp;nbsp;sender,&amp;nbsp;RoutedEventArgs&amp;nbsp;e)&lt;br /&gt;&lt;span style="color: #008080;"&gt;17&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080;"&gt;18&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RichEditBox&amp;nbsp;__txtRichEdit&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.GetTemplateChild(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;txtRichEdit&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;)&amp;nbsp;&lt;span style="color: #0000FF;"&gt;as&lt;/span&gt;&amp;nbsp;RichEditBox;&lt;br /&gt;&lt;span style="color: #008080;"&gt;19&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Button&amp;nbsp;__btnStyle&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.GetTemplateChild(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;btnStyle&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;)&amp;nbsp;&lt;span style="color: #0000FF;"&gt;as&lt;/span&gt;&amp;nbsp;Button;&lt;br /&gt;&lt;span style="color: #008080;"&gt;20&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&amp;nbsp;(__txtRichEdit.Document.Selection.FormattedText.CharacterFormat.FontStyle&amp;nbsp;==&amp;nbsp;Windows.UI.Text.FontStyle.Italic)&lt;br /&gt;&lt;span style="color: #008080;"&gt;21&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080;"&gt;22&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;__txtRichEdit.Document.Selection.FormattedText.CharacterFormat.FontStyle&amp;nbsp;=&amp;nbsp;Windows.UI.Text.FontStyle.Normal;&lt;br /&gt;&lt;span style="color: #008080;"&gt;23&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080;"&gt;24&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;else&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;25&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080;"&gt;26&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;__txtRichEdit.Document.Selection.FormattedText.CharacterFormat.FontStyle&amp;nbsp;=&amp;nbsp;Windows.UI.Text.FontStyle.Italic;&lt;br /&gt;&lt;span style="color: #008080;"&gt;27&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080;"&gt;28&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080;"&gt;29&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080;"&gt;30&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&amp;nbsp;__btnUnderline_Click(&lt;span style="color: #0000FF;"&gt;object&lt;/span&gt;&amp;nbsp;sender,&amp;nbsp;RoutedEventArgs&amp;nbsp;e)&lt;br /&gt;&lt;span style="color: #008080;"&gt;31&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080;"&gt;32&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RichEditBox&amp;nbsp;__txtRichEdit&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.GetTemplateChild(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;txtRichEdit&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;)&amp;nbsp;&lt;span style="color: #0000FF;"&gt;as&lt;/span&gt;&amp;nbsp;RichEditBox;&lt;br /&gt;&lt;span style="color: #008080;"&gt;33&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Button&amp;nbsp;__btnUnderline&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.GetTemplateChild(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;btnUnderline&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;)&amp;nbsp;&lt;span style="color: #0000FF;"&gt;as&lt;/span&gt;&amp;nbsp;Button;&lt;br /&gt;&lt;span style="color: #008080;"&gt;34&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&amp;nbsp;(__txtRichEdit.Document.Selection.FormattedText.CharacterFormat.Underline&amp;nbsp;==&amp;nbsp;Windows.UI.Text.UnderlineType.None)&lt;br /&gt;&lt;span style="color: #008080;"&gt;35&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080;"&gt;36&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;__txtRichEdit.Document.Selection.FormattedText.CharacterFormat.Underline&amp;nbsp;=&amp;nbsp;Windows.UI.Text.UnderlineType.Single;&lt;br /&gt;&lt;span style="color: #008080;"&gt;37&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080;"&gt;38&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;else&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;39&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080;"&gt;40&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;__txtRichEdit.Document.Selection.FormattedText.CharacterFormat.Underline&amp;nbsp;=&amp;nbsp;Windows.UI.Text.UnderlineType.None;&lt;br /&gt;&lt;span style="color: #008080;"&gt;41&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080;"&gt;42&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-size:9pt"&gt;&lt;span style="font-family:宋体; background-color:white"&gt;使用&lt;/span&gt;&lt;span style="font-family:Consolas; background-color:white"&gt;ParagraphFormat.Alignment&lt;/span&gt;&lt;span style="font-family:宋体; background-color:white"&gt;设置对齐方式：&lt;/span&gt;&lt;span style="font-family:Consolas; background-color:white"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&amp;nbsp;__txtAlign_SelectionChanged(&lt;span style="color: #0000FF;"&gt;object&lt;/span&gt;&amp;nbsp;sender,&amp;nbsp;SelectionChangedEventArgs&amp;nbsp;e)&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RichEditBox&amp;nbsp;__txtRichEdit&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.GetTemplateChild(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;txtRichEdit&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;)&amp;nbsp;&lt;span style="color: #0000FF;"&gt;as&lt;/span&gt;&amp;nbsp;RichEditBox;&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ComboBox&amp;nbsp;__txtAlign&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.GetTemplateChild(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;txtAlign&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;)&amp;nbsp;&lt;span style="color: #0000FF;"&gt;as&lt;/span&gt;&amp;nbsp;ComboBox;&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;5&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;switch&lt;/span&gt;&amp;nbsp;(((sender&amp;nbsp;&lt;span style="color: #0000FF;"&gt;as&lt;/span&gt;&amp;nbsp;ComboBox).SelectedItem&amp;nbsp;&lt;span style="color: #0000FF;"&gt;as&lt;/span&gt;&amp;nbsp;ContentControl).Name)&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;6&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;7&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;case&lt;/span&gt;&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;labLeft&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;:&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;8&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;__txtRichEdit.Document.Selection.FormattedText.FormattedText.ParagraphFormat.Alignment&amp;nbsp;=&amp;nbsp;Windows.UI.Text.ParagraphAlignment.Left;&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;9&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080;"&gt;10&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;case&lt;/span&gt;&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;labCenter&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;:&lt;br /&gt;&lt;span style="color: #008080;"&gt;11&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;__txtRichEdit.Document.Selection.FormattedText.FormattedText.ParagraphFormat.Alignment&amp;nbsp;=&amp;nbsp;Windows.UI.Text.ParagraphAlignment.Center;&lt;br /&gt;&lt;span style="color: #008080;"&gt;12&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080;"&gt;13&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;case&lt;/span&gt;&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;labRight&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;:&lt;br /&gt;&lt;span style="color: #008080;"&gt;14&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;__txtRichEdit.Document.Selection.FormattedText.FormattedText.ParagraphFormat.Alignment&amp;nbsp;=&amp;nbsp;Windows.UI.Text.ParagraphAlignment.Right;&lt;br /&gt;&lt;span style="color: #008080;"&gt;15&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080;"&gt;16&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;case&lt;/span&gt;&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;labJustify&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;:&lt;br /&gt;&lt;span style="color: #008080;"&gt;17&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;__txtRichEdit.Document.Selection.FormattedText.FormattedText.ParagraphFormat.Alignment&amp;nbsp;=&amp;nbsp;Windows.UI.Text.ParagraphAlignment.Justify;&lt;br /&gt;&lt;span style="color: #008080;"&gt;18&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080;"&gt;19&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;default&lt;/span&gt;:&lt;br /&gt;&lt;span style="color: #008080;"&gt;20&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;break&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080;"&gt;21&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080;"&gt;22&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;设置颜色、插入图片、视频等还没有做好，有些问题，以后慢慢完善。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;最终效果：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201204/201204102131552957.png" alt="" /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/brooks-dotnet/aggbug/2441339.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/brooks-dotnet/archive/2012/04/10/2441339.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/brooks-dotnet/archive/2012/03/07/2384172.html</id><title type="text">再谈WinRT自定义组件的开发</title><summary type="text">Windows 8 消费者预览版终于发布了，我也于第一时间下载并进行了安装，看了看WinRT组件开发的部分，事情变得明朗起来。New Item的模板多了很多：开发自定义组件必须的项目类型终于被添加进来，现在开发一个自定义组件就容易多了。这次依旧来开发上次一样的ButtonX，重写的方法与以前WPF、Silverlight一样了：开发预览版中的OnApplyTemplateCore方法被废除了。...</summary><published>2012-03-07T12:28:00Z</published><updated>2012-03-07T12:28:00Z</updated><author><name>MYM]Brooks</name><uri>http://www.cnblogs.com/brooks-dotnet/</uri></author><link rel="alternate" href="http://www.cnblogs.com/brooks-dotnet/archive/2012/03/07/2384172.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/brooks-dotnet/archive/2012/03/07/2384172.html"/><content type="html">&lt;p&gt;Windows 8 消费者预览版终于发布了，我也于第一时间下载并进行了安装，看了看WinRT组件开发的部分，事情变得明朗起来。&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;New Item的模板多了很多：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201203/201203072028148115.png" alt=""/&gt;&lt;/p&gt;&lt;p&gt;开发自定义组件必须的项目类型终于被添加进来，现在开发一个自定义组件就容易多了。&lt;/p&gt;&lt;p&gt;这次依旧来开发上次一样的ButtonX，重写的方法与以前WPF、Silverlight一样了：&lt;/p&gt;&lt;p&gt;开发预览版中的OnApplyTemplateCore方法被废除了。&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201203/201203072028177294.png" alt=""/&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;现在自定义组件的模板要被迫写在Generic.xaml一个文件里了，无法拆分为多个xaml，不知道为何。&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201203/201203072028198492.png" alt=""/&gt;&lt;/p&gt;&lt;p&gt; &lt;/p&gt;&lt;p&gt;成功运行后自定义模板生效了:&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201203/20120307202819967.png" alt=""/&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/brooks-dotnet/aggbug/2384172.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/brooks-dotnet/archive/2012/03/07/2384172.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/brooks-dotnet/archive/2012/02/19/2358451.html</id><title type="text">开发Metro版浏览器</title><summary type="text">Windows 8中的Metro程序是一种全屏应用程序，专门针对触摸屏设备进行优化。Windows 8 Developer Preview中已经包含了一些Metro应用：测试代码下载像微软自己的一些程序，如IE、Windows Store等都有Metro版本，在即将发布的Windows 8消费者预览版中，估计会有更多的Metro应用，到时Windows Store也会正式启用。在PowerShell 3.0中使用命令Get-AppxPackage –AllUsers可以查看当前安装了哪些Metro应用： 可以看到，Metro程序安装在C:\Program Files\Applicat...</summary><published>2012-02-19T10:54:00Z</published><updated>2012-02-19T10:54:00Z</updated><author><name>MYM]Brooks</name><uri>http://www.cnblogs.com/brooks-dotnet/</uri></author><link rel="alternate" href="http://www.cnblogs.com/brooks-dotnet/archive/2012/02/19/2358451.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/brooks-dotnet/archive/2012/02/19/2358451.html"/><content type="html">&lt;p&gt;Windows 8中的Metro程序是一种全屏应用程序，专门针对触摸屏设备进行优化。Windows 8 Developer Preview中已经包含了一些Metro应用：&lt;/p&gt;&lt;p&gt;&lt;a href="http://files.cnblogs.com/brooks-dotnet/2012.02.19_Mr.Brooks_WinRT_1_BrowserDemo.zip" style="color: #ff0000; "&gt;测试代码下载&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201202/201202191845145718.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;像微软自己的一些程序，如IE、Windows Store等都有Metro版本，在即将发布的Windows 8消费者预览版中，估计会有更多的Metro应用，到时Windows Store也会正式启用。&lt;/p&gt;&lt;p&gt;在PowerShell 3.0中使用命令&lt;span style="font-family:Lucida Console; font-size:9pt"&gt;&lt;span style="color:blue"&gt;Get-AppxPackage&lt;/span&gt;&lt;span style="color:navy"&gt;&amp;#8211;AllUsers&lt;/span&gt;&lt;/span&gt;可以查看当前安装了哪些Metro应用：&lt;span style="color:navy; font-family:Lucida Console; font-size:9pt"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201202/20120219185040331.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;可以看到，Metro程序安装在&lt;span style="color:darkred; font-family:Lucida Console; font-size:9pt"&gt;C:\Program Files\Applications&lt;/span&gt;&lt;/p&gt;&lt;p&gt;该文件夹没有权限，不能在资源管理器中查看，故使用PowerShell:&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201202/201202191853011951.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;我也开始开发一些Metro程序，为公司产品的Metro版本试水。&lt;/p&gt;&lt;p&gt;这次我开发的是一个Metro版本的浏览器，类似于IE 10。&lt;/p&gt;&lt;p&gt;最终运行效果：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201202/201202191853078990.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;1、使用VS 11 Developer Preview创建一个Metro项目：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201202/201202191853278346.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;2、界面布局很简单，第一行地址栏、工具按钮等，下面是预览窗口：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201202/201202191854023406.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;3、WinRT中没有WebBrowser控件，取而代之的是WebView，&lt;a href="http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.xaml.controls.webview.aspx"&gt;&lt;span style="color:red"&gt;MSDN&lt;/span&gt;&lt;/a&gt;上有关于此控件的大致介绍。&lt;/p&gt;&lt;p&gt;WebView有个Source属性，可以设置为具体的URL，如&lt;a href="http://www.bing.com/"&gt;http://www.bing.com&lt;/a&gt;，这样WebView就会跳转到指定URL。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;4、WebView使用的是IE 10的内核，不支持任何插件（Flash、Silverlight），只能用HTML5。&lt;/p&gt;&lt;p&gt; 要先设置下Internet属性，允许跨域浏览，允许脚本等。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;5、WebView有两个方法比较常用&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&amp;nbsp;fn跳转到指定Url(&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&amp;nbsp;v_Url)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&amp;nbsp;(!v_Url.StartsWith(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;http://&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;)&amp;nbsp;&amp;amp;&amp;amp;&amp;nbsp;!v_Url.StartsWith(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;https://&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;v_Url&amp;nbsp;=&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;http://&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;nbsp;+&amp;nbsp;v_Url;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&amp;nbsp;(&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.fn是否是有效Url(v_Url))&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.wv.Navigate(&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&amp;nbsp;Uri(v_Url));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;else&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;this&lt;/span&gt;.wv.NavigateToString(&lt;span style="color: #800000;"&gt;@"&lt;/span&gt;&lt;span style="color: #800000;"&gt;&amp;lt;html&amp;gt;&amp;lt;h3&amp;gt;404&amp;lt;/h3&amp;gt;&amp;lt;/html&amp;gt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-size:9pt"&gt;&lt;span style="font-family:Consolas; background-color:white"&gt;Navigate&lt;/span&gt;&lt;span style="font-family:宋体"&gt;用于跳转到指定&lt;/span&gt;&lt;span style="font-family:Consolas"&gt;URL&lt;/span&gt;&lt;span style="font-family:宋体"&gt;，&lt;/span&gt;&lt;span style="font-family:Consolas; background-color:white"&gt;NavigateToString&lt;/span&gt;&lt;span style="font-family:宋体"&gt;用于显示执行的&lt;/span&gt;&lt;span style="font-family:Consolas"&gt;HTML&lt;/span&gt;&lt;span style="font-family:宋体"&gt;，这里我是显示一个自定义的&lt;/span&gt;&lt;span style="font-family:Consolas"&gt;404&lt;/span&gt;&lt;span style="font-family:宋体"&gt;页面。&lt;/span&gt;&lt;span style="font-family:Consolas"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-size:9pt"&gt;&lt;span style="font-family:Consolas"&gt;6&lt;/span&gt;&lt;span style="font-family:宋体"&gt;、模拟了网页后退、前进的效果，没有做的很严格。具体实现看下源码就明白了。&lt;/span&gt;&lt;span style="font-family:Consolas"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-size:9pt"&gt;&lt;span style="font-family:Consolas"&gt;7&lt;/span&gt;&lt;span style="font-family:宋体"&gt;、遇到一个比较棘手的问题是，在&lt;/span&gt;&lt;span style="font-family:Consolas"&gt;WebView&lt;/span&gt;&lt;span style="font-family:宋体"&gt;中点击一个跨域的链接时，会打开&lt;/span&gt;&lt;span style="font-family:Consolas"&gt;Metro&lt;/span&gt;&lt;span style="font-family:宋体"&gt;版的&lt;/span&gt;&lt;span style="font-family:Consolas"&gt;IE10&lt;/span&gt;&lt;span style="font-family:宋体"&gt;显示，不能继续在&lt;/span&gt;&lt;span style="font-family:Consolas"&gt;WebView&lt;/span&gt;&lt;span style="font-family:宋体"&gt;中显示，若有朋友解决了这个问题，请告之。&lt;/span&gt;&lt;span style="font-family:Consolas"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-size:9pt"&gt;&lt;span style="font-family:宋体"&gt;小结：&lt;/span&gt;&lt;span style="font-family:Consolas"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-size:9pt"&gt;&lt;span style="font-family:Consolas"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family:宋体"&gt;我写的这个&lt;/span&gt;&lt;span style="font-family:Consolas"&gt;Metro&lt;/span&gt;&lt;span style="font-family:宋体"&gt;版本的浏览器非常简单，仅仅实现了最基本的现代浏览器应该具有的功能，主要想测试一下&lt;/span&gt;&lt;span style="font-family:Consolas"&gt;Metro&lt;/span&gt;&lt;span style="font-family:宋体"&gt;程序的效果。&lt;/span&gt;&lt;span style="font-family:Consolas"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-size:9pt"&gt;&lt;span style="font-family:宋体"&gt;个人还是非常喜欢&lt;/span&gt;&lt;span style="font-family:Consolas"&gt;Metro&lt;/span&gt;&lt;span style="font-family:宋体"&gt;应用，如果使用平板操作将会非常舒服。当&lt;/span&gt;&lt;span style="font-family:Consolas"&gt;Windows 8&lt;/span&gt;&lt;span style="font-family:宋体"&gt;正式发布时，&lt;/span&gt;&lt;span style="font-family:Consolas"&gt;Metro&lt;/span&gt;&lt;span style="font-family:宋体"&gt;应用将会遍地开花，希望&lt;/span&gt;&lt;span style="font-family:Consolas"&gt;Windows 8&lt;/span&gt;&lt;span style="font-family:宋体"&gt;能将平板更加普及一下，丰富企业应用、娱乐应用的开发方式。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/brooks-dotnet/aggbug/2358451.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/brooks-dotnet/archive/2012/02/19/2358451.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/brooks-dotnet/archive/2012/01/15/2322804.html</id><title type="text">PowerShell 3.0 实践（四）开发自定义 PSSnapin</title><summary type="text">PowerShell通过Snapin提供了一个可扩展的体系结构，以便用户添加自定义的功能。Snapin是一组.NET程序集，说白了就是一个个类。任何一个.NET程序集，只要实现了Snapin的安装程序类，就可以成为一个Snapin。注：PowerShell 3.0 CTP2已经发布，可以在这里下载自从 CTP1 以来的改动有： 修复了大量用户在 CTP1 中找到的问题。具体的问题列表可以在发布注释还有Connect中找到。 Windows PowerShell ISE 中可以开启单独的命令行窗口。 可以通过 Update-Help 来更新本地的帮助。所有的帮助将从 Inte...</summary><published>2012-01-15T04:17:00Z</published><updated>2012-01-15T04:17:00Z</updated><author><name>MYM]Brooks</name><uri>http://www.cnblogs.com/brooks-dotnet/</uri></author><link rel="alternate" href="http://www.cnblogs.com/brooks-dotnet/archive/2012/01/15/2322804.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/brooks-dotnet/archive/2012/01/15/2322804.html"/><content type="html">&lt;p&gt;PowerShell通过Snapin提供了一个可扩展的体系结构，以便用户添加自定义的功能。Snapin是一组.NET程序集，说白了就是一个个类。&lt;/p&gt;&lt;p&gt;任何一个.NET程序集，只要实现了Snapin的安装程序类，就可以成为一个Snapin。&lt;/p&gt;&lt;p&gt;注：PowerShell 3.0 CTP2已经发布，可以在&lt;a href="http://www.microsoft.com/download/en/details.aspx?id=27548"&gt;&lt;span style="color:red"&gt;这里&lt;/span&gt;&lt;/a&gt;下载&lt;/p&gt;&lt;p&gt;&lt;span style="color:#333333; font-size:9pt"&gt;&lt;span style="font-family:宋体"&gt;自从&lt;/span&gt;&lt;span style="font-family:Arial"&gt; CTP1 &lt;/span&gt;&lt;span style="font-family:宋体"&gt;以来的改动有：&lt;/span&gt;&lt;span style="font-family:Arial"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;div style="background: white"&gt;&lt;span style="color:#333333; font-size:9pt"&gt;&lt;span style="font-family:宋体"&gt;修复了大量用户在&lt;/span&gt;&lt;span style="font-family:Arial"&gt; CTP1 &lt;/span&gt;&lt;span style="font-family:宋体"&gt;中找到的问题。具体的问题列表可以在&lt;strong&gt;发布注释&lt;/strong&gt;还有&lt;/span&gt;&lt;span style="font-family:Arial"&gt;&amp;nbsp;&lt;a href="http://connect.microsoft.com/powershell"&gt;&lt;span style="color:#0066dd"&gt;&lt;strong&gt;Connect&lt;/strong&gt;&lt;/span&gt;&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family:宋体"&gt;中找到。&lt;/span&gt;&lt;span style="font-family:Arial"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div style="background: white"&gt;&lt;span style="color:#333333; font-size:9pt"&gt;&lt;span style="font-family:Arial"&gt;Windows PowerShell ISE &lt;/span&gt;&lt;span style="font-family:宋体"&gt;中可以开启单独的命令行窗口。&lt;/span&gt;&lt;span style="font-family:Arial"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div style="background: white"&gt;&lt;span style="color:#333333; font-size:9pt"&gt;&lt;span style="font-family:宋体"&gt;可以通过&lt;/span&gt;&lt;span style="font-family:Arial"&gt; Update-Help &lt;/span&gt;&lt;span style="font-family:宋体"&gt;来更新本地的帮助。所有的帮助将从&lt;/span&gt;&lt;span style="font-family:Arial"&gt; Internet &lt;/span&gt;&lt;span style="font-family:宋体"&gt;获得。&lt;/span&gt;&lt;span style="font-family:Arial"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div style="background: white"&gt;&lt;span style="color:#333333; font-size:9pt"&gt;&lt;span style="font-family:宋体"&gt;在&lt;/span&gt;&lt;span style="font-family:Arial"&gt; Windows PowerShell Workflows &lt;/span&gt;&lt;span style="font-family:宋体"&gt;的支持上本次发布包含了大量的改进，包括：&lt;/span&gt;&lt;span style="font-family:Arial"&gt; Parallel&lt;/span&gt;&lt;span style="font-family:宋体"&gt;，&lt;/span&gt;&lt;span style="font-family:Arial"&gt; Sequence &lt;/span&gt;&lt;span style="font-family:宋体"&gt;和&lt;/span&gt;&lt;span style="font-family:Arial"&gt; Inlinescript&lt;/span&gt;&lt;span style="font-family:宋体"&gt;。&lt;/span&gt;&lt;span style="font-family:Arial"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div style="background: white"&gt;&lt;span style="color:#333333; font-size:9pt"&gt;&lt;span style="font-family:Arial"&gt;Get-Module &lt;/span&gt;&lt;span style="font-family:宋体"&gt;现在支持从任何远程&lt;/span&gt;&lt;span style="font-family:Arial"&gt; Session &lt;/span&gt;&lt;span style="font-family:宋体"&gt;或者&lt;/span&gt;&lt;span style="font-family:Arial"&gt; CIM Session &lt;/span&gt;&lt;span style="font-family:宋体"&gt;获得模块。&lt;/span&gt;&lt;span style="font-family:Arial"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;span style="color:#333333; font-size:9pt"&gt;&lt;span style="font-family:宋体"&gt;具体的改动请参看&lt;a href="http://www.microsoft.com/downloads/info.aspx?na=41&amp;amp;srcfamilyid=94895b51-8376-45ec-8fdd-4fd472e49aa3&amp;amp;srcdisplaylang=en&amp;amp;u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2fA%2fF%2f1%2fAF1D6992-54EC-47CD-B2BF-38A68C171641%2fWMF%20CTP2%20Release%20Notes.docx"&gt;&lt;/a&gt;&lt;/span&gt;&lt;a href="http://www.microsoft.com/downloads/info.aspx?na=41&amp;amp;srcfamilyid=94895b51-8376-45ec-8fdd-4fd472e49aa3&amp;amp;srcdisplaylang=en&amp;amp;u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2fA%2fF%2f1%2fAF1D6992-54EC-47CD-B2BF-38A68C171641%2fWMF%20CTP2%20Release%20Notes.docx"&gt;&lt;span style="font-family:Arial"&gt;WMF CTP2 Release Notes.docx (&lt;/span&gt;&lt;span style="font-family:宋体"&gt;发布注释&lt;/span&gt;&lt;span style="font-family:Arial"&gt;)&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://files.cnblogs.com/brooks-dotnet/PowerShellV3/2012.01.15_PowerShellV3_Mr.Brooks_4_CustomerSnapinl.zip" style="color: #ff0000; "&gt;测试代码下载&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;PowerShell 3.0提供了如下Snapin：&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue; font-family:Lucida Console; font-size:9pt"&gt;Get-PSSnapin&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/info.aspx?na=41&amp;amp;srcfamilyid=94895b51-8376-45ec-8fdd-4fd472e49aa3&amp;amp;srcdisplaylang=en&amp;amp;u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2fA%2fF%2f1%2fAF1D6992-54EC-47CD-B2BF-38A68C171641%2fWMF%20CTP2%20Release%20Notes.docx"&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201201/201201151214509749.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;下面我们动手来开发一个Snapin。&lt;/p&gt;&lt;p&gt;1、我使用的Visual Studio 11 Developer Preview，新建一个Class Library项目：&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/info.aspx?na=41&amp;amp;srcfamilyid=94895b51-8376-45ec-8fdd-4fd472e49aa3&amp;amp;srcdisplaylang=en&amp;amp;u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2fA%2fF%2f1%2fAF1D6992-54EC-47CD-B2BF-38A68C171641%2fWMF%20CTP2%20Release%20Notes.docx"&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201201/2012011512150297.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;2、添加&lt;span style="color:black; font-size:9pt"&gt;&lt;span style="font-family:Consolas; background-color:white"&gt;System.Management.Automation&lt;/span&gt;&lt;span style="font-family:宋体"&gt;引用，&lt;/span&gt;&lt;span style="font-family:Consolas; background-color:white"&gt;System.Management.Automation&lt;/span&gt;&lt;span style="font-family:宋体"&gt;是&lt;/span&gt;&lt;span style="font-family:Consolas"&gt;PowerShell SDK&lt;/span&gt;&lt;span style="font-family:宋体"&gt;的一部分，安装&lt;/span&gt;&lt;span style="font-family:Consolas"&gt;PowerShell 3.0&lt;/span&gt;&lt;span style="font-family:宋体"&gt;时已经安装在&lt;/span&gt;&lt;span style="font-family:Consolas"&gt;GAC&lt;/span&gt;&lt;span style="font-family:宋体"&gt;中。&lt;/span&gt;&lt;a href="http://www.microsoft.com/downloads/info.aspx?na=41&amp;amp;srcfamilyid=94895b51-8376-45ec-8fdd-4fd472e49aa3&amp;amp;srcdisplaylang=en&amp;amp;u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2fA%2fF%2f1%2fAF1D6992-54EC-47CD-B2BF-38A68C171641%2fWMF%20CTP2%20Release%20Notes.docx"&gt;&lt;span style="font-family:Consolas"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/info.aspx?na=41&amp;amp;srcfamilyid=94895b51-8376-45ec-8fdd-4fd472e49aa3&amp;amp;srcdisplaylang=en&amp;amp;u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2fA%2fF%2f1%2fAF1D6992-54EC-47CD-B2BF-38A68C171641%2fWMF%20CTP2%20Release%20Notes.docx"&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201201/201201151215172416.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;3、继承&lt;span style="color:#2b91af; font-family:Consolas; font-size:9pt"&gt;&lt;span style="background-color:white"&gt;PSSnapIn&lt;/span&gt;&lt;/span&gt;类，这是一个抽象类，自定义的Snapin需要继承它。Name是自定义的Snapin的名称，Verdor是作者，Description是对该Snapin的简短描述。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[RunInstaller(&lt;span style="color: #0000FF;"&gt;true&lt;/span&gt;)]&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;class&amp;nbsp;Test&amp;nbsp;:&amp;nbsp;PSSnapIn&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;Name&amp;nbsp;&lt;span style="color: #0000FF;"&gt;for&lt;/span&gt;&amp;nbsp;the&amp;nbsp;PowerShell&amp;nbsp;snap-&lt;span style="color: #0000FF;"&gt;in&lt;/span&gt;.&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;5&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;override&amp;nbsp;string&amp;nbsp;Name&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;6&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;7&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;get&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;8&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;9&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Brooks.Scripts.PowerShell.Test&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080;"&gt;10&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080;"&gt;11&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080;"&gt;12&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080;"&gt;13&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;Vendor&amp;nbsp;information&amp;nbsp;&lt;span style="color: #0000FF;"&gt;for&lt;/span&gt;&amp;nbsp;the&amp;nbsp;PowerShell&amp;nbsp;snap-&lt;span style="color: #0000FF;"&gt;in&lt;/span&gt;.&lt;br /&gt;&lt;span style="color: #008080;"&gt;14&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;override&amp;nbsp;string&amp;nbsp;Vendor&lt;br /&gt;&lt;span style="color: #008080;"&gt;15&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080;"&gt;16&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;get&lt;br /&gt;&lt;span style="color: #008080;"&gt;17&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080;"&gt;18&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Brooks&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080;"&gt;19&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080;"&gt;20&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080;"&gt;21&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080;"&gt;22&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;//&amp;nbsp;Description&amp;nbsp;of&amp;nbsp;the&amp;nbsp;PowerShell&amp;nbsp;snap-&lt;span style="color: #0000FF;"&gt;in&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;23&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;override&amp;nbsp;string&amp;nbsp;Description&lt;br /&gt;&lt;span style="color: #008080;"&gt;24&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080;"&gt;25&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;get&lt;br /&gt;&lt;span style="color: #008080;"&gt;26&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080;"&gt;27&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;This&amp;nbsp;is&amp;nbsp;a&amp;nbsp;sample&amp;nbsp;PowerShell&amp;nbsp;snap-in&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080;"&gt;28&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080;"&gt;29&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080;"&gt;30&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;4、添加自己的Cmdlet，实现一些功能。我准备开发一个Excel的帮助命令，在指定位置生成一个Excel文档。&lt;/p&gt;&lt;p&gt;为此，先添加Office PIA的引用：&lt;span style="color:black; font-family:Consolas; font-size:9pt"&gt;&lt;span style="background-color:white"&gt;Microsoft.Office.Interop.Excel&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;5、编写一个类继承Cmdlet，参数以属性的形式体现，一般需要重写&lt;span style="color:black; font-size:9pt"&gt;&lt;span style="font-family:Consolas; background-color:white"&gt;BeginProcessing()&lt;/span&gt;&lt;span style="font-family:宋体"&gt;、&lt;/span&gt;&lt;span style="font-family:Consolas; background-color:white"&gt;ProcessRecord()&lt;/span&gt;&lt;span style="font-family:宋体"&gt;、&lt;/span&gt;&lt;span style="font-family:Consolas; background-color:white"&gt;EndProcessing()&lt;/span&gt;&lt;span style="font-family:宋体"&gt;三个方法。&lt;/span&gt;&lt;span style="font-family:Consolas"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-size:9pt"&gt;&lt;span style="font-family:Consolas; background-color:white"&gt;BeginProcessing()&lt;/span&gt;&lt;span style="font-family:宋体"&gt;：执行初始化操作，如验证参数、准备数据等。&lt;/span&gt;&lt;span style="font-family:Consolas"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-size:9pt"&gt;&lt;span style="font-family:Consolas; background-color:white"&gt;ProcessRecord()&lt;/span&gt;&lt;span style="font-family:宋体"&gt;：执行核心命令逻辑。&lt;/span&gt;&lt;span style="font-family:Consolas"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-size:9pt"&gt;&lt;span style="font-family:Consolas; background-color:white"&gt;EndProcessing()&lt;/span&gt;&lt;span style="font-family:宋体"&gt;：收尾工作，如资源释放、记录日志等。&lt;/span&gt;&lt;span style="font-family:Consolas"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black; font-size:9pt"&gt;&lt;span style="font-family:Consolas"&gt;PowerShell&lt;/span&gt;&lt;span style="font-family:宋体"&gt;的命令采用的是&lt;/span&gt;&lt;span style="font-family:Consolas"&gt;&lt;/span&gt;&lt;span style="font-family:宋体"&gt;动词&lt;/span&gt;&lt;span style="font-family:Consolas"&gt;-&lt;/span&gt;&lt;span style="font-family:宋体"&gt;名词&lt;/span&gt;&lt;span style="font-family:Consolas"&gt;&lt;/span&gt;&lt;span style="font-family:宋体"&gt;的结构，这里我使用的&lt;/span&gt;&lt;span style="font-family:Consolas"&gt;New-Excel&lt;/span&gt;&lt;span style="font-family:宋体"&gt;命令。&lt;/span&gt;&lt;span style="font-family:Consolas"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:black"&gt;&lt;span style="font-size:9pt"&gt;&lt;span style="font-family:宋体"&gt;参数声明中，&lt;/span&gt;&lt;span style="font-family:Consolas; background-color:white"&gt;Mandatory = &lt;span style="color:blue"&gt;true&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;表示是必须参数&lt;/span&gt;，&lt;span style="color:black; font-size:9pt"&gt;&lt;span style="font-family:Consolas"&gt;&lt;span style="background-color:white"&gt;Position = 1&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:宋体"&gt;表示是位置参数，这样就可以根据位置来自动推断参数。&lt;/span&gt;&lt;span style="font-family:Consolas"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;1&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[Cmdlet(VerbsCommon.New,&amp;nbsp;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Excel&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;)]&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;2&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;class&amp;nbsp;AddTest&amp;nbsp;:&amp;nbsp;Cmdlet&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;3&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;4&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&amp;nbsp;string&amp;nbsp;__Path&amp;nbsp;=&amp;nbsp;string.Empty;&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;5&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;private&amp;nbsp;Excel.XlFileFormat&amp;nbsp;__Format&amp;nbsp;=&amp;nbsp;Excel.XlFileFormat.xlOpenXMLWorkbook;&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;6&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;7&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[Parameter(Mandatory&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;true&lt;/span&gt;,&amp;nbsp;Position&amp;nbsp;=&amp;nbsp;1)]&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;8&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;string&amp;nbsp;Path&lt;br /&gt;&lt;span style="color: #008080;"&gt;&amp;nbsp;9&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080;"&gt;10&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;get&lt;br /&gt;&lt;span style="color: #008080;"&gt;11&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080;"&gt;12&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&amp;nbsp;this.__Path;&lt;br /&gt;&lt;span style="color: #008080;"&gt;13&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080;"&gt;14&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;set&lt;br /&gt;&lt;span style="color: #008080;"&gt;15&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080;"&gt;16&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.__Path&amp;nbsp;=&amp;nbsp;value;&lt;br /&gt;&lt;span style="color: #008080;"&gt;17&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080;"&gt;18&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080;"&gt;19&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080;"&gt;20&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[Parameter(Mandatory&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;true&lt;/span&gt;,&amp;nbsp;Position&amp;nbsp;=&amp;nbsp;2)]&lt;br /&gt;&lt;span style="color: #008080;"&gt;21&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;Excel.XlFileFormat&amp;nbsp;Format&lt;br /&gt;&lt;span style="color: #008080;"&gt;22&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080;"&gt;23&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;get&lt;br /&gt;&lt;span style="color: #008080;"&gt;24&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080;"&gt;25&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&amp;nbsp;this.__Format;&lt;br /&gt;&lt;span style="color: #008080;"&gt;26&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080;"&gt;27&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;set&lt;br /&gt;&lt;span style="color: #008080;"&gt;28&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080;"&gt;29&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;this.__Format&amp;nbsp;=&amp;nbsp;value;&lt;br /&gt;&lt;span style="color: #008080;"&gt;30&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080;"&gt;31&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080;"&gt;32&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080;"&gt;33&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;protected&amp;nbsp;override&amp;nbsp;void&amp;nbsp;BeginProcessing()&lt;br /&gt;&lt;span style="color: #008080;"&gt;34&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080;"&gt;35&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;base.BeginProcessing();&lt;br /&gt;&lt;span style="color: #008080;"&gt;36&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080;"&gt;37&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080;"&gt;38&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;protected&amp;nbsp;override&amp;nbsp;void&amp;nbsp;ProcessRecord()&lt;br /&gt;&lt;span style="color: #008080;"&gt;39&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080;"&gt;40&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Excel.Application&amp;nbsp;__app&amp;nbsp;=&amp;nbsp;new&amp;nbsp;Excel.Application();&lt;br /&gt;&lt;span style="color: #008080;"&gt;41&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;__app.DisplayAlerts&amp;nbsp;=&amp;nbsp;&lt;span style="color: #0000FF;"&gt;false&lt;/span&gt;;&lt;br /&gt;&lt;span style="color: #008080;"&gt;42&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Excel.Workbook&amp;nbsp;__book&amp;nbsp;=&amp;nbsp;__app.Workbooks.Add();&lt;br /&gt;&lt;span style="color: #008080;"&gt;43&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;try&lt;br /&gt;&lt;span style="color: #008080;"&gt;44&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080;"&gt;45&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;__book.SaveAs(this.Path,&amp;nbsp;this.Format);&lt;br /&gt;&lt;span style="color: #008080;"&gt;46&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080;"&gt;47&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;catch&lt;br /&gt;&lt;span style="color: #008080;"&gt;48&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080;"&gt;49&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color: #0000FF;"&gt;finally&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #008080;"&gt;50&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080;"&gt;51&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;__app.Quit();&lt;br /&gt;&lt;span style="color: #008080;"&gt;52&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.Runtime.InteropServices.Marshal.ReleaseComObject(__book);&lt;br /&gt;&lt;span style="color: #008080;"&gt;53&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;System.Runtime.InteropServices.Marshal.ReleaseComObject(__app);&lt;br /&gt;&lt;span style="color: #008080;"&gt;54&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;__book&amp;nbsp;=&amp;nbsp;null;&lt;br /&gt;&lt;span style="color: #008080;"&gt;55&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;__app&amp;nbsp;=&amp;nbsp;null;&lt;br /&gt;&lt;span style="color: #008080;"&gt;56&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080;"&gt;57&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080;"&gt;58&lt;/span&gt;&amp;nbsp;&lt;br /&gt;&lt;span style="color: #008080;"&gt;59&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;protected&amp;nbsp;override&amp;nbsp;void&amp;nbsp;EndProcessing()&lt;br /&gt;&lt;span style="color: #008080;"&gt;60&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;span style="color: #008080;"&gt;61&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;base.EndProcessing();&lt;br /&gt;&lt;span style="color: #008080;"&gt;62&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;span style="color: #008080;"&gt;63&lt;/span&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;6、这样一个Snapin就开发完成了，为了在脚本中使用，需要注册该Snapin并执行导入。&lt;/p&gt;&lt;p&gt;以管理员身份运行PowerShell ISE，执行以下脚本，将路径更改为你本机的目录。&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Lucida Console; font-size:9pt"&gt;&lt;span style="color:blue"&gt;Set-Location&lt;/span&gt;&lt;span style="color:blueviolet"&gt;E:\Work\Project\BrooksCom\Brooks.Scripts.PowerShell\Brooks.Scripts.PowerShell\bin\Debug&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Lucida Console; font-size:9pt"&gt;&lt;span style="color:blue"&gt;Set-Alias&lt;/span&gt;&lt;span style="color:blueviolet"&gt;installutil&lt;/span&gt;&lt;span style="color:blueviolet"&gt;$env:windir\microsoft.net\framework64\v4.0.30319\installutil&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Lucida Console; font-size:9pt"&gt;&lt;span style="color:blue"&gt;installutil&lt;/span&gt;&lt;span style="color:navy"&gt;-i&lt;/span&gt;&lt;span style="color:blueviolet"&gt;Brooks.Scripts.PowerShell.dll&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/info.aspx?na=41&amp;amp;srcfamilyid=94895b51-8376-45ec-8fdd-4fd472e49aa3&amp;amp;srcdisplaylang=en&amp;amp;u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2fA%2fF%2f1%2fAF1D6992-54EC-47CD-B2BF-38A68C171641%2fWMF%20CTP2%20Release%20Notes.docx"&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201201/201201151215523485.png" alt="" /&gt;&lt;span style="color:blueviolet; font-family:Lucida Console; font-size:9pt"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;installutil是.NET自带的安装工具，默认位于：&lt;/p&gt;&lt;p&gt;%windir% \Microsoft.NET\&lt;span style="color:red"&gt;Framework64&lt;/span&gt;\v4.0.30319     ---  Windows x64&lt;/p&gt;&lt;p&gt;%windir% \Microsoft.NET\&lt;span style="color:red"&gt;Framework&lt;/span&gt;\v4.0.30319     ---  Windows x86&lt;/p&gt;&lt;p&gt;注意64位和32位操作系统分别使用对应的installutil。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;下面导入该Snapin：&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Lucida Console; font-size:9pt"&gt;&lt;span style="color:blue"&gt;Add-PSSnapin&lt;/span&gt;&lt;span style="color:navy"&gt;-Name&lt;/span&gt;&lt;span style="color:blueviolet"&gt;Brooks.Scripts.PowerShell.Test&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;验证是否导入成功：&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Lucida Console; font-size:9pt"&gt;&lt;span style="color:blue"&gt;Get-PSSnapin&lt;/span&gt;&lt;span style="color:navy"&gt;&amp;#8211;Registered&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/info.aspx?na=41&amp;amp;srcfamilyid=94895b51-8376-45ec-8fdd-4fd472e49aa3&amp;amp;srcdisplaylang=en&amp;amp;u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2fA%2fF%2f1%2fAF1D6992-54EC-47CD-B2BF-38A68C171641%2fWMF%20CTP2%20Release%20Notes.docx"&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201201/201201151216019429.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;自定义的Snapin位于注册表的如下位置：&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/info.aspx?na=41&amp;amp;srcfamilyid=94895b51-8376-45ec-8fdd-4fd472e49aa3&amp;amp;srcdisplaylang=en&amp;amp;u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2fA%2fF%2f1%2fAF1D6992-54EC-47CD-B2BF-38A68C171641%2fWMF%20CTP2%20Release%20Notes.docx"&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201201/20120115121618187.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;7、最后来执行以下我们的命令：New-Excel&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Lucida Console; font-size:9pt"&gt;&lt;span style="color:blue"&gt;New-Excel&lt;/span&gt;&lt;span style="color:navy"&gt;-Path&lt;/span&gt;&lt;span style="color:blueviolet"&gt;E:\Test.xlsx&lt;/span&gt;&lt;span style="color:navy"&gt;-Format&lt;/span&gt;&lt;span style="color:blueviolet"&gt;xlOpenXMLWorkbook&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;可以看到，顺利生成了Excel文档：&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/info.aspx?na=41&amp;amp;srcfamilyid=94895b51-8376-45ec-8fdd-4fd472e49aa3&amp;amp;srcdisplaylang=en&amp;amp;u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2fA%2fF%2f1%2fAF1D6992-54EC-47CD-B2BF-38A68C171641%2fWMF%20CTP2%20Release%20Notes.docx"&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201201/201201151216412761.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;小结：&lt;/p&gt;&lt;p&gt;PowerShell 3.0包含了众多的命令，几乎可以管理所有的方面，尤其在Windows Server 8中，PowerShell 已经处于核心地位。&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.microsoft.com/downloads/info.aspx?na=41&amp;amp;srcfamilyid=94895b51-8376-45ec-8fdd-4fd472e49aa3&amp;amp;srcdisplaylang=en&amp;amp;u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2fA%2fF%2f1%2fAF1D6992-54EC-47CD-B2BF-38A68C171641%2fWMF%20CTP2%20Release%20Notes.docx"&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201201/201201151216438560.png" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;公司的CTO是一位批处理、汇编高手，但是当我向他推荐PowerShell时，他却不屑一顾，觉得太不伦不类，原话是"什么鸟语法" &lt;span style="font-family:Wingdings"&gt;J&lt;/span&gt;&lt;/p&gt;&lt;p&gt;这也从侧面验证了PowerShell现在的处境以及被高级管理人员所误解的程度。本次从一个自定义Snapin的开发展示了PowerShell的可扩展性，与开发一个普通的组件没有什么区别。我个人表示看好PowerShell在企业级管理中的前景，PowerShell也可以扩展为脚本引擎嵌入ERP等系统中，执行部署、流程控制、自动化操作等。&lt;/p&gt;&lt;a href="http://www.microsoft.com/downloads/info.aspx?na=41&amp;amp;srcfamilyid=94895b51-8376-45ec-8fdd-4fd472e49aa3&amp;amp;srcdisplaylang=en&amp;amp;u=http%3a%2f%2fdownload.microsoft.com%2fdownload%2fA%2fF%2f1%2fAF1D6992-54EC-47CD-B2BF-38A68C171641%2fWMF%20CTP2%20Release%20Notes.docx"&gt; &lt;/a&gt;&lt;img src="http://www.cnblogs.com/brooks-dotnet/aggbug/2322804.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/brooks-dotnet/archive/2012/01/15/2322804.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/brooks-dotnet/archive/2012/01/01/2309586.html</id><title type="text">开发WinRT自定义组件</title><summary type="text">最近在工作中开始开发组件，满足公司的业务与技术需求，同时也在规划组件的开发路线，为公司的下一代产品做好技术储备。元旦假期看了看Windows 8中的组件开发，除了传统的WPF、Windows Form、Silverlight、ASP.NET组件之外，还新增了一种WinRT组件。WinRT = Windows Runtime，是Windows 8 新引入的一个新的框架，意在为Windows 平台上的开发提供一种语言无关、高度智能化的平台。不是为了取代.NET、Win32等，而是为不同语言编写的程序提供统一支持，尤其是Metro风格程序。测试代码下载一、准备工作安装Windows 8 Devel</summary><published>2012-01-01T12:04:00Z</published><updated>2012-01-01T12:04:00Z</updated><author><name>MYM]Brooks</name><uri>http://www.cnblogs.com/brooks-dotnet/</uri></author><link rel="alternate" href="http://www.cnblogs.com/brooks-dotnet/archive/2012/01/01/2309586.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/brooks-dotnet/archive/2012/01/01/2309586.html"/><content type="html">&lt;p&gt;最近在工作中开始开发组件，满足公司的业务与技术需求，同时也在规划组件的开发路线，为公司的下一代产品做好技术储备。&lt;/p&gt;&lt;p&gt;元旦假期看了看Windows 8中的组件开发，除了传统的WPF、Windows Form、Silverlight、ASP.NET组件之外，还新增了一种WinRT组件。&lt;/p&gt;&lt;p&gt;WinRT = Windows Runtime，是Windows 8 新引入的一个新的框架，意在为Windows 平台上的开发提供一种语言无关、高度智能化的平台。&lt;/p&gt;&lt;p&gt;不是为了取代.NET、Win32等，而是为不同语言编写的程序提供统一支持，尤其是Metro风格程序。&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201201/201201012003309514.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;a style="color: #ff0000;" href="http://files.cnblogs.com/brooks-dotnet/WinRTDemo.zip"&gt;测试代码下载&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;一、准备工作&lt;/p&gt;&lt;p&gt;安装Windows 8 Developer Preview、VS 11 Developer Preview等开发工具。&lt;/p&gt;&lt;p&gt;&lt;span style="color:red"&gt;安装Win8时注意要用Windows Live ID登录，若没有账户可以先注册一个，否则后面会无法运行Metro程序。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;安装Win8后注意更新一下显卡驱动，AMD官方提供了Windows 8的驱动，Nvidia使用Win7的驱动即可，确保分辨率在1024 X 768或更高。&lt;/p&gt;&lt;p&gt;VS 11 建议卸载自带的Express版本，安装全功能的Developer Preview版本。&lt;/p&gt;&lt;p&gt;此外，SQL Server 2012 RC0也已经发布，建议安装。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;二、开始开发&lt;/p&gt;&lt;p&gt;2.1、创建一个Windows Metro Style的Class Library项目：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201201/20120101200333678.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;2.2、添加一个类：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201201/201201012003337788.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;2.3、写一个ButtonX，继承自Button:&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201201/201201012003341102.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;WinRT的组件大部分位于&lt;span style="color:black; font-size:9pt"&gt;&lt;span style="font-family:Consolas; background-color:white"&gt;Windows.UI.Xaml.Controls&lt;/span&gt;&lt;span style="font-family:宋体; background-color:white"&gt;命名空间：&lt;/span&gt;&lt;span style="font-family:Consolas"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201201/201201012003346576.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;2.4、WinRT与WPF、Silverlight组件类似，我就照着葫芦画飘，在ButtonX中添加如下代码：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201201/201201012003355987.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;2.5、新建一个Themes文件夹，在其中添加Generic.xaml文件，因为没有资源字典这种项类型，故需要添加一个Page，然后把后台代码删除：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201201/201201012003357906.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201201/20120101200336838.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;使用&lt;span style="color:#a31515; font-family:Consolas; font-size:9pt; background-color:white"&gt;ResourceDictionary&lt;/span&gt;&lt;span style="background-color:white"&gt;来分别加载多个组件。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="background-color:white"&gt;2.6、同样添加一个&lt;/span&gt;ButtonX.xaml&lt;span style="background-color:white"&gt;，在其中写入如下代码：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201201/201201012003379900.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:red; font-family:Consolas; font-size:9pt"&gt;&lt;span style="background-color:white"&gt;xmlns&lt;span style="color:blue"&gt;:&lt;span style="color:red"&gt;winrt&lt;span style="color:blue"&gt;="clr-namespace:Brooks.CustomerControl.WinRT"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="background-color:white"&gt;为添加的前缀引用。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="background-color:white"&gt;2.7、此时如果直接编译，会提示错误：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201201/201201012003382658.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;Google了半天，没找到解决方案，干脆把缺失的文件复制到相应位置，没想到就好了。&lt;/p&gt;&lt;p&gt;这样，最简单的一个ButtonX组件就完成了，下面新建一个项目来测试一下。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;2.8、创建一个Windows Metro Style的Application项目：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201201/201201012003389768.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;添加项目引用：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201201/201201012003391687.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;2.9、添加一个Test.xaml空白Page，一开始我这样引用组件：&lt;/p&gt;&lt;p&gt;&lt;span style="color:red; font-family:Consolas; font-size:9pt"&gt;&lt;span style="background-color:white"&gt;xmlns&lt;span style="color:blue"&gt;:&lt;span style="color:red"&gt;winrt&lt;span style="color:blue"&gt;="Brooks.CustomerControl.WinRT;assembly=Brooks.CustomerControl.WinRT"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background-color:white"&gt;运行时总是出错，&lt;/span&gt;ButtonX&lt;span style="background-color:white"&gt;是未知类型。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;后来我使用IDE来自动添加引用，原来是使用using，且不需要添加&lt;span style="color:blue; font-family:Consolas; font-size:9pt; background-color:white"&gt;assembly&lt;/span&gt;&lt;span style="background-color:white"&gt;了。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:red; font-family:Consolas; font-size:9pt"&gt;&lt;span style="background-color:white"&gt;xmlns&lt;span style="color:blue"&gt;:&lt;span style="color:red"&gt;winrt&lt;span style="color:blue"&gt;="using:Brooks.CustomerControl.WinRT"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background-color:white"&gt;这样就可以了：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201201/201201012003398000.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;2.10、在其单击事件中写入如下代码，单击一次ButtonX就把按钮宽度增加5：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201201/201201012003401555.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;2.11、运行后就可以看到效果了：&lt;/p&gt;&lt;p&gt;此时如果使用本地账户登录的Windows 8或者显示分辨率低于1024 X 768，就很可能出现类似这个错误：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201201/201201012003405110.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;看上去是权限问题，这个网上很多人都遇到了。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;成功运行后效果如下：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201201/201201012003412884.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;在Metro的导航中也可以看到这个程序：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201201/201201012003412785.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;2.12、关于.winmd&lt;/p&gt;&lt;p&gt;Windows 8种针对WinRT应用引入了一种新的组件winmd，文件扩展名为.winmd。本质上就是一个dll，即PE格式。&lt;/p&gt;&lt;p&gt;Windows 8的winmd组件默认位于：C:\Program Files (x86)\Windows Kits\8.0\Windows Metadata&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201201/201201012003439763.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;用16进制编辑器可以打开查看：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201201/201201012003454614.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;也可以直接反编译：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201201/2012010120034941.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;我的自定义组件的项目类型依然是Class Library，若改成WinMD会遇到错误：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201201/20120101200351955.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;若有朋友解决了这个问题，请告知。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;小结：&lt;/p&gt;&lt;p&gt;Windows 8的发布将会将触角拓展到平板、手持设备的领域，WinRT作为一种基础的解决方案，值得关注。&lt;/p&gt;&lt;p&gt;由于目前Windows 8还处于非常早期的阶段，所以开发环境等还不是很完善，相信随着正式版的临近，上面那些问题也会一一解决。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/brooks-dotnet/aggbug/2309586.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/brooks-dotnet/archive/2012/01/01/2309586.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/brooks-dotnet/archive/2011/11/04/2236609.html</id><title type="text">VSTO 学习笔记（十三）谈谈VSTO项目的部署</title><summary type="text">一般客户计算机专业水平不高，但是有一些Office水平相当了得，尤其对Excel的操作非常熟练。因此如果能将产品的一些功能集成在Office中，将会有很好的基础。但是由于客户安装的Office版本不一，所以VSTO项目的部署问题显得尤为重要，需要考虑很多问题。测试代码下载本系列所有测试代码均在Visual Studio 2010 Ultimate SP1 + Office 2010 Professional Plus x64 SP1 上测试通过大致归纳一下，主要有以下一些情况：1、Office版本不同目前主要有Office 2003、Office 2007、Office 2010。2、32位与</summary><published>2011-11-04T12:53:00Z</published><updated>2011-11-04T12:53:00Z</updated><author><name>MYM]Brooks</name><uri>http://www.cnblogs.com/brooks-dotnet/</uri></author><link rel="alternate" href="http://www.cnblogs.com/brooks-dotnet/archive/2011/11/04/2236609.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/brooks-dotnet/archive/2011/11/04/2236609.html"/><content type="html">&lt;p&gt;一般客户计算机专业水平不高，但是有一些Office水平相当了得，尤其对Excel的操作非常熟练。因此如果能将产品的一些功能集成在Office中，将会有很好的基础。&lt;/p&gt;&lt;p&gt;但是由于客户安装的Office版本不一，所以VSTO项目的部署问题显得尤为重要，需要考虑很多问题。&lt;/p&gt;&lt;p&gt;&lt;a href="http://files.cnblogs.com/brooks-dotnet/VSTO4/2011.11.04_Mr.Brooks_VSTO4_13_VSTODeployDemo.zip" style="color: #ff0000; "&gt;测试代码下载&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background-color:white"&gt;本系列所有测试代码均在Visual Studio 2010 Ultimate SP1 + Office 2010 Professional Plus x64 SP1 上测试通过&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;大致归纳一下，主要有以下一些情况：&lt;/p&gt;&lt;p&gt;1、Office版本不同&lt;/p&gt;&lt;p&gt;目前主要有Office 2003、Office 2007、Office 2010。&lt;/p&gt;&lt;p&gt;2、32位与64位的Office&lt;/p&gt;&lt;p&gt;目前只有Office 2010提供64位版本。&lt;/p&gt;&lt;p&gt;3、64位操作系统安装32位的Office&lt;/p&gt;&lt;p&gt;目前多出现在新上市的笔记本，很多都是Win7 64位，安装了Office 2007、2010 32位。&lt;/p&gt;&lt;p&gt;此外，不同VSTO项目的部署方式也不相同。主要有如下一些VSTO项目类型：&lt;/p&gt;&lt;p&gt;1、文档类型&lt;/p&gt;&lt;p&gt;如Word Document、Excel Workbook&lt;/p&gt;&lt;p&gt;2、AddIn类型&lt;/p&gt;&lt;p&gt;如Word AddIn、Excel AddIn&lt;/p&gt;&lt;p&gt;3、Shared AddIn类型&lt;/p&gt;&lt;p&gt;4、Excel自定义公式类型&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;下面我们就来逐个探讨一下相应的部署方案。&lt;/p&gt;&lt;p&gt;&lt;span style="color:red"&gt;注意VS2010 只支持Office 2007、Office 2010，若要开发基于Office 2003的VSTO项目，请使用VS2005、VS2008。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;一、待部署的项目是文档类型&lt;/p&gt;&lt;p&gt;1.1、使用VS 2010创建一个Excel Workbook项目：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201111/201111042046325152.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;1.2、选择Office 2007格式.xlsx：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201111/201111042046344463.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;1.3、在一个工作表中放置一个按钮：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201111/201111042046397980.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;1.4、在其单击事件中弹出一个对话框：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201111/201111042046424128.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;1.5、F5运行，会打开Excel，点击按钮弹出我们希望看到的信息：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201111/201111042046445533.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;1.6、在Debug目录下会发现生成了如下这些文件：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201111/20111104204648677.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;由于是文档类型，因此生成一个Excel工作簿很正常。有一个.vsto格式的文件很少见，它就是VSTO项目部署时的安装文件。&lt;/p&gt;&lt;p&gt;.vsto文件其实是一个XML文件，用文本编辑器打开可以看到具体内容：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201111/201111042046547890.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;包含了VSTO项目的具体信息，如.NET运行时版本，依赖的程序集，数字签名等信息，不要手动修改这个文件。&lt;/p&gt;&lt;p&gt;&lt;span style="color:red"&gt;.NET运行时为4.0，所以客户端首先要安装.NET Framework 4.0。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;.vsto的默认打开方式是Visual Studio Tools For Office Execution Engine：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201111/201111042047054226.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:red"&gt;该组件包含于Visual Studio Tools For Office 运行时，因此客户端若要运行VSTO程序，还需要安装Visual Studio Tools For Office 运行时。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Visual Studio 2010 Tools for Office Runtime 可以在&lt;a href="http://www.microsoft.com/downloads/zh-cn/details.aspx?FamilyID=06c32242-2289-4471-93aa-ce96aa5cbc36"&gt;&lt;span style="color:red"&gt;这里&lt;/span&gt;&lt;/a&gt;下载。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;1.7、我用了一个虚拟机模拟客户端，安装了.NET 4.0和Office 2010后就可以打开.vsto了：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201111/201111042047112137.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;1.8、安装成功后就可以打开Debug中的Excel文件了：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201111/201111042047131350.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;注意文档类型的VSTO项目安装后只对发布的一个文档有效(只对Debug中的Excel有效)，不影响用户其他的Office文件，即文档类型项目不是全局性的。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;1.9、在控制面板中可以将该VSTO项目卸载：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201111/201111042047146300.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;二、待部署的项目是Add In类型&lt;/p&gt;&lt;p&gt;2.1、新建一个Word Add In项目：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201111/2011110420471781.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;2.2、添加一个可视化Ribbon:&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201111/201111042047203164.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;2.3、Ribbon中添加一个按钮：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201111/201111042047211081.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;2.4、单击弹出对话框：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201111/20111104204724194.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;2.5、F5运行后会打开Word：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201111/201111042047284499.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;2.6、在Debug目录中会生成一些文件：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201111/201111042047344154.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;2.7、客户端依旧需要安装.NET 4.0、Visual Studio 2010 Tools For Office Runtime才能运行该VSTO项目：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201111/201111042047369496.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;注意Add In 类型是全局性的，只要安装，用户随便打开一个Office文档都会包含该Add In。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;三、Shared AddIn类型&lt;/p&gt;&lt;p&gt;所谓Shared AddIn，就是该插件可以被多种Office文档共用，但是一般都是针对一种Office文档开发。&lt;/p&gt;&lt;p&gt;3.1、创建一个Shared AddIn项目：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201111/201111042047461994.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;3.2、这里我选择只针对Excel：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201111/201111042047486845.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;3.3、设置加载属性：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201111/201111042047498698.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;3.4、默认有两个项目，一个是插件，另一个是MSI安装项目：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201111/201111042047505568.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;这里我们只谈部署，关于如何开发相关的项目请参考其他资料。&lt;/p&gt;&lt;p&gt;添加System.Windows.Forms的引用，然后在Connect.cs中的OnStartupComplete事件中弹出一个对话框：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201111/20111104204750518.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;3.5、设置安装项目属性：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201111/201111042047512088.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;注意TargetPlatform没有AnyCPU，故需要针对x86、x64分别编译一份MSI安装文件。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;3.6、设置安装项目运行依赖组件：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201111/201111042047554940.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;这里可以设置需要.NET Framework 4.0：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201111/201111042047591230.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;在安装项目属性页中的【Prerequisites】中可以设置更多的运行依赖组件：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201111/201111042048133266.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;3.7、设置完成后编译安装项目，会生成相应的MSI安装包：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201111/201111042048173775.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;3.8、直接在安装项目右击&lt;span style="font-family:Wingdings"&gt;&amp;#224;&lt;/span&gt;Install即可以安装：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201111/201111042048184232.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;安装完后打开一个Excel就会看到我们的对话框：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201111/20111104204820969.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;四、Excel自定义公式类型&lt;/p&gt;&lt;p&gt;之所以把Excel自定义公式类型单独拿出来说，是因为Excel自定义公式的注册有些特殊，尤其是Excel 2010 x64。&lt;/p&gt;&lt;p&gt;4.1、创建一个类库项目：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201111/201111042048224260.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;4.2、&lt;span style="color:#4b4b4b; font-size:10pt"&gt;&lt;span style="font-family:宋体"&gt;写加减乘除四个函数和&lt;/span&gt;&lt;span style="font-family:Georgia"&gt;COM&lt;/span&gt;&lt;span style="font-family:宋体"&gt;注册、反注册函数：&lt;/span&gt;&lt;span style="font-family:Georgia"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201111/201111042048231719.gif" alt="" /&gt;&lt;span style="color:#4b4b4b; font-family:Courier New; font-size:9pt"&gt;View Code&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue; font-family:Courier New; font-size:9pt"&gt;using&lt;span style="color:black"&gt;&amp;nbsp;System;&lt;br /&gt;&lt;span style="color:blue"&gt;using&lt;span style="color:black"&gt;&amp;nbsp;System.Runtime.InteropServices;&lt;br /&gt;&lt;span style="color:blue"&gt;using&lt;span style="color:black"&gt;&amp;nbsp;Microsoft.Win32;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue"&gt;namespace&lt;span style="color:black"&gt;&amp;nbsp;ExcelUDF&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[Guid(&lt;span style="color:maroon"&gt;"E72F44C7-DD4A-4FA2-BC32-4EA9925749DB"&lt;span style="color:black"&gt;)]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[ClassInterface(ClassInterfaceType.AutoDual)]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[ComVisible(&lt;span style="color:blue"&gt;true&lt;span style="color:black"&gt;)]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue"&gt;public&lt;span style="color:black"&gt;&amp;nbsp;&lt;span style="color:blue"&gt;class&lt;span style="color:black"&gt;&amp;nbsp;ExcelUDF&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue"&gt;public&lt;span style="color:black"&gt;&amp;nbsp;&lt;span style="color:blue"&gt;int&lt;span style="color:black"&gt;&amp;nbsp;Add(&lt;span style="color:blue"&gt;int&lt;span style="color:black"&gt;&amp;nbsp;a,&amp;nbsp;&lt;span style="color:blue"&gt;int&lt;span style="color:black"&gt;&amp;nbsp;b)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue"&gt;return&lt;span style="color:black"&gt;&amp;nbsp;a&amp;nbsp;+&amp;nbsp;b;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue"&gt;public&lt;span style="color:black"&gt;&amp;nbsp;&lt;span style="color:blue"&gt;int&lt;span style="color:black"&gt;&amp;nbsp;Subtract(&lt;span style="color:blue"&gt;int&lt;span style="color:black"&gt;&amp;nbsp;a,&amp;nbsp;&lt;span style="color:blue"&gt;int&lt;span style="color:black"&gt;&amp;nbsp;b)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue"&gt;return&lt;span style="color:black"&gt;&amp;nbsp;a&amp;nbsp;-&amp;nbsp;b;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue"&gt;public&lt;span style="color:black"&gt;&amp;nbsp;&lt;span style="color:blue"&gt;int&lt;span style="color:black"&gt;&amp;nbsp;Multiply(&lt;span style="color:blue"&gt;int&lt;span style="color:black"&gt;&amp;nbsp;a,&amp;nbsp;&lt;span style="color:blue"&gt;int&lt;span style="color:black"&gt;&amp;nbsp;b)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue"&gt;return&lt;span style="color:black"&gt;&amp;nbsp;a&amp;nbsp;*&amp;nbsp;b;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue"&gt;public&lt;span style="color:black"&gt;&amp;nbsp;&lt;span style="color:blue"&gt;int&lt;span style="color:black"&gt;&amp;nbsp;Divide(&lt;span style="color:blue"&gt;int&lt;span style="color:black"&gt;&amp;nbsp;a,&amp;nbsp;&lt;span style="color:blue"&gt;int&lt;span style="color:black"&gt;&amp;nbsp;b)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue"&gt;return&lt;span style="color:black"&gt;&amp;nbsp;a&amp;nbsp;/&amp;nbsp;b;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue"&gt;#region&lt;span style="color:black"&gt;&amp;nbsp;COM&amp;nbsp;Related&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[ComRegisterFunction]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue"&gt;public&lt;span style="color:black"&gt;&amp;nbsp;&lt;span style="color:blue"&gt;static&lt;span style="color:black"&gt;&amp;nbsp;&lt;span style="color:blue"&gt;void&lt;span style="color:black"&gt;&amp;nbsp;RegisterFunction(Type&amp;nbsp;type)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Registry.ClassesRoot.CreateSubKey(GetSubKeyName(type,&amp;nbsp;&lt;span style="color:maroon"&gt;"Programmable"&lt;span style="color:black"&gt;));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;key&amp;nbsp;=&amp;nbsp;Registry.ClassesRoot.OpenSubKey(GetSubKeyName(type,&amp;nbsp;&lt;span style="color:maroon"&gt;"InprocServer32"&lt;span style="color:black"&gt;),&amp;nbsp;&lt;span style="color:blue"&gt;true&lt;span style="color:black"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;key.SetValue(&lt;span style="color:maroon"&gt;""&lt;span style="color:black"&gt;,&amp;nbsp;Environment.SystemDirectory&amp;nbsp;+&amp;nbsp;&lt;span style="color:maroon"&gt;@"\mscoree.dll"&lt;span style="color:black"&gt;,&amp;nbsp;RegistryValueKind.String);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;[ComUnregisterFunction]&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue"&gt;public&lt;span style="color:black"&gt;&amp;nbsp;&lt;span style="color:blue"&gt;static&lt;span style="color:black"&gt;&amp;nbsp;&lt;span style="color:blue"&gt;void&lt;span style="color:black"&gt;&amp;nbsp;UnregisterFunction(Type&amp;nbsp;type)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Registry.ClassesRoot.DeleteSubKey(GetSubKeyName(type,&amp;nbsp;&lt;span style="color:maroon"&gt;"Programmable"&lt;span style="color:black"&gt;),&amp;nbsp;&lt;span style="color:blue"&gt;false&lt;span style="color:black"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue"&gt;private&lt;span style="color:black"&gt;&amp;nbsp;&lt;span style="color:blue"&gt;static&lt;span style="color:black"&gt;&amp;nbsp;&lt;span style="color:blue"&gt;string&lt;span style="color:black"&gt;&amp;nbsp;GetSubKeyName(Type&amp;nbsp;type,&amp;nbsp;&lt;span style="color:blue"&gt;string&lt;span style="color:black"&gt;&amp;nbsp;subKeyName)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;var&amp;nbsp;s&amp;nbsp;=&amp;nbsp;&lt;span style="color:blue"&gt;new&lt;span style="color:black"&gt;&amp;nbsp;System.Text.StringBuilder();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;s.Append(&lt;span style="color:maroon"&gt;@"CLSID\{"&lt;span style="color:black"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;s.Append(type.GUID.ToString().ToUpper());&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;s.Append(&lt;span style="color:maroon"&gt;@"}\"&lt;span style="color:black"&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;s.Append(subKeyName);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue"&gt;return&lt;span style="color:black"&gt;&amp;nbsp;s.ToString();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue"&gt;#endregion&lt;span style="color:black"&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#4b4b4b; font-size:10pt"&gt;&lt;span style="font-family:Georgia"&gt;4.3&lt;/span&gt;&lt;span style="font-family:宋体"&gt;、我安装的是&lt;/span&gt;&lt;span style="font-family:Georgia"&gt;Excel x64&lt;/span&gt;&lt;span style="font-family:宋体"&gt;，需要手动注册自定义公式的程序集，为此在项目属性中的&lt;/span&gt;&lt;span style="font-family:Georgia"&gt;Build Events&lt;/span&gt;&lt;span style="font-family:宋体"&gt;中写入批处理脚本来自动注册：&lt;/span&gt;&lt;span style="font-family:Georgia"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#4b4b4b; font-family:Georgia; font-size:10pt"&gt;%windir%\Microsoft.NET\&lt;span style="color:red"&gt;Framework64&lt;span style="color:#4b4b4b"&gt;\v4.0.30319\regasm /codebase "$(TargetPath)"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#4b4b4b; font-size:10pt"&gt;&lt;span style="font-family:宋体"&gt;如果是&lt;/span&gt;&lt;span style="font-family:Georgia"&gt;Excel x86&lt;/span&gt;&lt;span style="font-family:宋体"&gt;，这样注册：&lt;/span&gt;&lt;span style="font-family:Georgia"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#4b4b4b; font-family:Georgia; font-size:10pt"&gt;%windir%\Microsoft.NET\&lt;span style="color:red"&gt;Framework&lt;span style="color:#4b4b4b"&gt;\v4.0.30319\regasm /codebase "$(TargetPath)"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#4b4b4b; font-size:10pt"&gt;&lt;span style="font-family:宋体"&gt;部署到客户端时需要执行这个批处理脚本。&lt;/span&gt;&lt;span style="font-family:Georgia"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#4b4b4b; font-size:10pt"&gt;&lt;span style="font-family:宋体"&gt;这样在每次编译成功后就会自动注册该自定义公式。&lt;/span&gt;&lt;span style="font-family:Georgia"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201111/20111104204827243.png" alt="" /&gt;&lt;span style="color:#4b4b4b; font-family:Georgia; font-size:10pt"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#4b4b4b; font-size:10pt"&gt;&lt;span style="font-family:Georgia"&gt;4.4&lt;/span&gt;&lt;span style="font-family:宋体"&gt;、在生成管理器中配置为&lt;/span&gt;&lt;span style="font-family:Georgia"&gt; x64&lt;/span&gt;&lt;span style="font-family:宋体"&gt;：&lt;/span&gt;&lt;span style="font-family:Georgia"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201111/201111042048283699.png" alt="" /&gt;&lt;span style="color:#4b4b4b; font-family:Georgia; font-size:10pt"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#4b4b4b; font-size:10pt"&gt;&lt;span style="font-family:Georgia"&gt;4.5&lt;/span&gt;&lt;span style="font-family:宋体"&gt;、在&lt;/span&gt;&lt;span style="font-family:Georgia"&gt;Ribbon&lt;/span&gt;&lt;span style="font-family:宋体"&gt;项目中添加调用自定义公式的代码：&lt;/span&gt;&lt;span style="font-family:Georgia"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue; font-family:Courier New; font-size:9pt"&gt;using&lt;span style="color:black"&gt;&amp;nbsp;Microsoft.Office.Tools.Ribbon;&lt;br /&gt;&lt;br /&gt;&lt;span style="color:blue"&gt;namespace&lt;span style="color:black"&gt;&amp;nbsp;ExcelAddIn&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue"&gt;public&lt;span style="color:black"&gt;&amp;nbsp;&lt;span style="color:blue"&gt;partial&lt;span style="color:black"&gt;&amp;nbsp;&lt;span style="color:blue"&gt;class&lt;span style="color:black"&gt;&amp;nbsp;RibbonDemo&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue"&gt;private&lt;span style="color:black"&gt;&amp;nbsp;&lt;span style="color:blue"&gt;void&lt;span style="color:black"&gt;&amp;nbsp;RibbonDemo_Load(&lt;span style="color:blue"&gt;object&lt;span style="color:black"&gt;&amp;nbsp;sender,&amp;nbsp;RibbonUIEventArgs&amp;nbsp;e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue"&gt;private&lt;span style="color:black"&gt;&amp;nbsp;&lt;span style="color:blue"&gt;void&lt;span style="color:black"&gt;&amp;nbsp;btnAdd_Click(&lt;span style="color:blue"&gt;object&lt;span style="color:black"&gt;&amp;nbsp;sender,&amp;nbsp;RibbonControlEventArgs&amp;nbsp;e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Globals.ThisAddIn.Application.ActiveCell.Formula&amp;nbsp;=&amp;nbsp;&lt;span style="color:maroon"&gt;"=Add()"&lt;span style="color:black"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue"&gt;private&lt;span style="color:black"&gt;&amp;nbsp;&lt;span style="color:blue"&gt;void&lt;span style="color:black"&gt;&amp;nbsp;btnSubtract_Click(&lt;span style="color:blue"&gt;object&lt;span style="color:black"&gt;&amp;nbsp;sender,&amp;nbsp;RibbonControlEventArgs&amp;nbsp;e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Globals.ThisAddIn.Application.ActiveCell.Formula&amp;nbsp;=&amp;nbsp;&lt;span style="color:maroon"&gt;"=Subtract()"&lt;span style="color:black"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue"&gt;private&lt;span style="color:black"&gt;&amp;nbsp;&lt;span style="color:blue"&gt;void&lt;span style="color:black"&gt;&amp;nbsp;btnMultiply_Click(&lt;span style="color:blue"&gt;object&lt;span style="color:black"&gt;&amp;nbsp;sender,&amp;nbsp;RibbonControlEventArgs&amp;nbsp;e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Globals.ThisAddIn.Application.ActiveCell.Formula&amp;nbsp;=&amp;nbsp;&lt;span style="color:maroon"&gt;"=Multiply()"&lt;span style="color:black"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="color:blue"&gt;private&lt;span style="color:black"&gt;&amp;nbsp;&lt;span style="color:blue"&gt;void&lt;span style="color:black"&gt;&amp;nbsp;btnDivide_Click(&lt;span style="color:blue"&gt;object&lt;span style="color:black"&gt;&amp;nbsp;sender,&amp;nbsp;RibbonControlEventArgs&amp;nbsp;e)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Globals.ThisAddIn.Application.ActiveCell.Formula&amp;nbsp;=&amp;nbsp;&lt;span style="color:maroon"&gt;"=Divide()"&lt;span style="color:black"&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;span style="color:#4b4b4b"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#4b4b4b; font-size:10pt"&gt;&lt;span style="font-family:Georgia"&gt;4.6&lt;/span&gt;&lt;span style="font-family:宋体"&gt;、修改&lt;/span&gt;&lt;span style="font-family:Georgia"&gt;Ribbon&lt;/span&gt;&lt;span style="font-family:宋体"&gt;项目属性，将&lt;/span&gt;&lt;span style="font-family:Georgia"&gt; Excel&lt;/span&gt;&lt;span style="font-family:宋体"&gt;设置为启动的扩展程序：&lt;/span&gt;&lt;span style="font-family:Georgia"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201111/201111042048315877.png" alt="" /&gt;&lt;span style="color:#4b4b4b; font-family:Georgia; font-size:10pt"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#4b4b4b; font-size:10pt"&gt;&lt;span style="font-family:Georgia"&gt;4.7&lt;/span&gt;&lt;span style="font-family:宋体"&gt;、编译、运行，会调用&lt;/span&gt;&lt;span style="font-family:Georgia"&gt;Excel&lt;/span&gt;&lt;span style="font-family:宋体"&gt;来打开，自动加载我们的插件&lt;/span&gt;&lt;span style="font-family:Georgia"&gt;ExcelAddIn&lt;/span&gt;&lt;span style="font-family:宋体"&gt;：&lt;/span&gt;&lt;span style="font-family:Georgia"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201111/201111042048404396.png" alt="" /&gt;&lt;span style="color:#4b4b4b; font-family:Georgia; font-size:10pt"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#4b4b4b; font-size:10pt"&gt;&lt;span style="font-family:Georgia"&gt;4.8&lt;/span&gt;&lt;span style="font-family:宋体"&gt;、激活自定义公式：&lt;/span&gt;&lt;span style="font-family:Georgia"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#4b4b4b; font-size:10pt"&gt;&lt;span style="font-family:宋体"&gt;在【&lt;/span&gt;&lt;span style="font-family:Georgia"&gt;Developer&lt;/span&gt;&lt;span style="font-family:宋体"&gt;】选项卡中点击【&lt;/span&gt;&lt;span style="font-family:Georgia"&gt;Add-Ins&lt;/span&gt;&lt;span style="font-family:宋体"&gt;】，再点击【&lt;/span&gt;&lt;span style="font-family:Georgia"&gt;Automation&lt;/span&gt;&lt;span style="font-family:宋体"&gt;】找到我们编写的自定义公式，【&lt;/span&gt;&lt;span style="font-family:Georgia"&gt;OK&lt;/span&gt;&lt;span style="font-family:宋体"&gt;】。&lt;/span&gt;&lt;span style="font-family:Georgia"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201111/201111042048479143.png" alt="" /&gt;&lt;span style="color:#4b4b4b; font-family:Georgia; font-size:10pt"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color:#4b4b4b; font-size:10pt"&gt;&lt;span style="font-family:Georgia"&gt;4.9&lt;/span&gt;&lt;span style="font-family:宋体"&gt;、此时在&lt;/span&gt;&lt;span style="font-family:Georgia"&gt;Excel&lt;/span&gt;&lt;span style="font-family:宋体"&gt;中就可以使用我们的公式了&lt;/span&gt;&lt;span style="font-family:Georgia"&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201111/201111042048497832.png" alt="" /&gt;&lt;span style="color:#4b4b4b; font-family:Georgia; font-size:10pt"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;小结：&lt;/p&gt;&lt;p&gt;1、若客户使用的主要是Office 2003，则使用VS2008开发(.NET 3.5)；若客户使用Office 2007或更新版本，则使用VS2010来开发。(.NET 4.0)&lt;/p&gt;&lt;p&gt;2、一般的安装顺序为：&lt;/p&gt;&lt;p&gt;.NET Framework &amp;#8211;&amp;gt; Visual Studio Tools For Office Runtime &lt;span style="font-family:Wingdings"&gt;&amp;#224;&lt;/span&gt; MSI或.vsto&lt;/p&gt;&lt;p&gt;3、安装之前最好将原来版本卸载，若.vsto出现无法安装的情况，则可以使用Mage.exe清理一下缓存再尝试安装。&lt;/p&gt;&lt;p&gt;命令行下执行：mage -cc&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Mage.exe是Windows SDK中的一个小工具，安装完Windows SDK后默认位于：&lt;/p&gt;&lt;p&gt;C:\Program Files (x86)\Microsoft SDKs\Windows\xx\Bin&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-family:Wingdings"&gt;&amp;#224;&lt;/span&gt;Windows x64&lt;/p&gt;&lt;p&gt;C:\Program Files\Microsoft SDKs\Windows\xx\Bin &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-family:Wingdings"&gt;&amp;#224;&lt;/span&gt;Windows x86&lt;/p&gt;&lt;p&gt; 其中xx是Windows SDK的版本号，如v6.0A、v7.0A、v7.1等。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;使用VSTO开发建议客户端安装Office 2007或更新版本，因为VSTO本身就是对Office 2007或更新版本量身定制的。Office 2003由于历史遗留问题，难以适应新架构。&lt;/p&gt;&lt;p&gt;对此需要引导客户，虽然客户是上帝，但是如果能说服客户升级Office，则对用户体验和项目后期的升级维护有显著的好处。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/brooks-dotnet/aggbug/2236609.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/brooks-dotnet/archive/2011/11/04/2236609.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/brooks-dotnet/archive/2011/10/31/2229532.html</id><title type="text">PowerShell 3.0 实践（三）管理 Hyper-V 3.0(2)</title><summary type="text">上一次对Hyper-V 3.0做了一次概述，新增了很多企业级的新特性，值得关注。本次我们继续关注Hyper-V 3.0，测试下虚拟硬盘管理。测试脚本下载本系列所有脚本使用Windows Server 8(PowerShell ISE x64)测试通过1、新建一个虚拟硬盘创建一个VHD格式的虚拟硬盘，大小为10GB，动态扩展New-VHD -Path F:\Work\tmp\Hyper-V\NewVHD.vhd -VHDType Dynamic -VHDFormat VHD -SizeBytes 10GB执行结果： 2、将VHD转换为VHDX格式Convert-...</summary><published>2011-10-31T10:37:00Z</published><updated>2011-10-31T10:37:00Z</updated><author><name>MYM]Brooks</name><uri>http://www.cnblogs.com/brooks-dotnet/</uri></author><link rel="alternate" href="http://www.cnblogs.com/brooks-dotnet/archive/2011/10/31/2229532.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/brooks-dotnet/archive/2011/10/31/2229532.html"/><content type="html">&lt;p&gt;上一次对Hyper-V 3.0做了一次概述，新增了很多企业级的新特性，值得关注。&lt;/p&gt;&lt;p&gt;本次我们继续关注Hyper-V 3.0，测试下虚拟硬盘管理。&lt;/p&gt;&lt;p&gt;&lt;a href="http://files.cnblogs.com/brooks-dotnet/PowerShellV3/2011.10.30_Mr.Brooks_PowerShellV3_3_HyperV3_2.zip" style="color: #ff0000; "&gt;测试脚本下载&lt;/a&gt;&lt;/p&gt;&lt;p&gt;本系列所有脚本使用Windows Server 8(PowerShell ISE x64)测试通过&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;1、新建一个虚拟硬盘&lt;/p&gt;&lt;p&gt;创建一个VHD格式的虚拟硬盘，大小为10GB，动态扩展&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Lucida Console; font-size:9pt"&gt;&lt;span style="color:blue"&gt;New-VHD&lt;/span&gt;&lt;span style="color:navy"&gt;-Path&lt;/span&gt;&lt;span style="color:blueviolet"&gt;F:\Work\tmp\Hyper-V\NewVHD.vhd&lt;/span&gt;&lt;span style="color:navy"&gt;-VHDType&lt;/span&gt;&lt;span style="color:blueviolet"&gt;Dynamic&lt;/span&gt;&lt;span style="color:navy"&gt;-VHDFormat&lt;/span&gt;&lt;span style="color:blueviolet"&gt;VHD&lt;/span&gt;&lt;span style="color:navy"&gt;-SizeBytes&lt;/span&gt;&lt;span style="color:purple"&gt;10GB&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;执行结果：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201110/201110302101594471.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201110/201110302102319500.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;2、将VHD转换为VHDX格式&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Lucida Console; font-size:9pt"&gt;&lt;span style="color:blue"&gt;Convert-VHD&lt;/span&gt;&lt;span style="color:navy"&gt;-Path&lt;/span&gt;&lt;span style="color:blueviolet"&gt;F:\Work\tmp\Hyper-V\NewVHD.vhd&lt;/span&gt;&lt;span style="color:navy"&gt;-DestinationPath&lt;/span&gt;&lt;span style="color:blueviolet"&gt;F:\Work\tmp\Hyper-V\NewVHD.vhdx&lt;/span&gt;&lt;span style="color:navy"&gt;-VHDFormat&lt;/span&gt;&lt;span style="color:blueviolet"&gt;VHDX&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;执行结果：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201110/201110302102381249.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201110/201110302102424964.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;本来我以为Convert-VHD可以将VHDX转换为VMDK、VDI、HDD、img等其他虚拟硬盘格式，好吧，只能在VHD、VHDX之间转换。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;3、查看虚拟硬盘的基本情况&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Lucida Console; font-size:9pt"&gt;&lt;span style="color:blue"&gt;Get-VHD&lt;/span&gt;&lt;span style="color:navy"&gt;-Path&lt;/span&gt;&lt;span style="color:blueviolet"&gt;F:\Work\tmp\Hyper-V\NewVHD.vhdx&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;执行结果：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201110/201110302102591719.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;4、挂载、卸载虚拟硬盘&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Lucida Console; font-size:9pt"&gt;&lt;span style="color:blue"&gt;Mount-VHD&lt;/span&gt;&lt;span style="color:navy"&gt;-Path&lt;/span&gt;&lt;span style="color:blueviolet"&gt;F:\Work\tmp\Hyper-V\NewVHD.vhdx&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Lucida Console; font-size:9pt"&gt;&lt;span style="color:blue"&gt;Dismount-VHD&lt;/span&gt;&lt;span style="color:navy"&gt;-Path&lt;/span&gt;&lt;span style="color:blueviolet"&gt;F:\Work\tmp\Hyper-V\NewVHD.vhdx&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;执行结果：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201110/201110302103085222.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;5、测试虚拟硬盘&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Lucida Console; font-size:9pt"&gt;&lt;span style="color:blue"&gt;Test-VHD&lt;/span&gt;&lt;span style="color:navy"&gt;-Path&lt;/span&gt;&lt;span style="color:blueviolet"&gt;F:\Work\tmp\Hyper-V\NewVHD.vhdx&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;执行结果：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201110/201110302103145499.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;6、扩展虚拟硬盘容量&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Lucida Console; font-size:9pt"&gt;&lt;span style="color:blue"&gt;Resize-VHD&lt;/span&gt;&lt;span style="color:navy"&gt;-Path&lt;/span&gt;&lt;span style="color:blueviolet"&gt;F:\Work\tmp\Hyper-V\NewVHD.vhdx&lt;/span&gt;&lt;span style="color:navy"&gt;-SizeBytes&lt;/span&gt;&lt;span style="color:purple"&gt;20GB&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;执行结果：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201110/201110302103155957.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;7、优化虚拟硬盘&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Lucida Console; font-size:9pt"&gt;&lt;span style="color:blue"&gt;Optimize-VHD&lt;/span&gt;&lt;span style="color:navy"&gt;-Path&lt;/span&gt;&lt;span style="color:blueviolet"&gt;F:\Work\tmp\Hyper-V\NewVHD.vhdx&lt;/span&gt;&lt;span style="color:navy"&gt;-Mode&lt;/span&gt;&lt;span style="color:blueviolet"&gt;Quick&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;执行结果：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201110/201110302103164986.png" alt="" /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/brooks-dotnet/aggbug/2229532.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/brooks-dotnet/archive/2011/10/31/2229532.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/brooks-dotnet/archive/2011/10/23/2221719.html</id><title type="text">PowerShell 3.0 实践（二）管理Hyper-V 3.0(1)</title><summary type="text">我一直都用服务器系统做开发，近期将Windows 8更改为了Windows Server 8，重点测试一下企业级相关的新特性。测试脚本下载本系列所有脚本使用Windows Server 8(PowerSHell ISE x64)测试通过Windows Server 8也保留了Metro界面：与Windows Server 2008 R2 相比外观变化比较大的是多了一个Server Manager Dashboard：一、Windows Server 8 十大新特性：(英文原文)1.1、多服务器管理1.2、零阻力服务器部署1.3、IP地址管理1.4、动态访问控制1.5、大型Hyper-V群集</summary><published>2011-10-23T05:10:00Z</published><updated>2011-10-23T05:10:00Z</updated><author><name>MYM]Brooks</name><uri>http://www.cnblogs.com/brooks-dotnet/</uri></author><link rel="alternate" href="http://www.cnblogs.com/brooks-dotnet/archive/2011/10/23/2221719.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/brooks-dotnet/archive/2011/10/23/2221719.html"/><content type="html">&lt;p&gt;我一直都用服务器系统做开发，近期将Windows 8更改为了Windows Server 8，重点测试一下企业级相关的新特性。&lt;/p&gt;&lt;p&gt;&lt;a href="http://files.cnblogs.com/brooks-dotnet/PowerShellV3/2011.10.23_Mr.Brooks_PowerShellV3_2_HyperV3_1.zip" style="color: #ff0000; "&gt;测试脚本下载&lt;/a&gt;&lt;/p&gt;&lt;p&gt;本系列所有脚本使用Windows Server 8(PowerSHell ISE x64)测试通过&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Windows Server 8也保留了Metro界面：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201110/201110231303206055.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;与Windows Server 2008 R2 相比外观变化比较大的是多了一个Server Manager Dashboard：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201110/2011102313032191.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;一、Windows Server 8 十大新特性：(&lt;a href="http://www.infoworld.com/d/microsoft-windows/10-best-new-features-windows-server-8-173124?page=0,0"&gt;&lt;span style="color:red"&gt;英文原文&lt;/span&gt;&lt;/a&gt;)&lt;/p&gt;&lt;p&gt;1.1、多服务器管理&lt;/p&gt;&lt;p&gt;1.2、零阻力服务器部署&lt;/p&gt;&lt;p&gt;1.3、IP地址管理&lt;/p&gt;&lt;p&gt;1.4、动态访问控制&lt;/p&gt;&lt;p&gt;1.5、大型Hyper-V群集&lt;/p&gt;&lt;p&gt;1.6、灵活的动态迁移&lt;/p&gt;&lt;p&gt;1.7、高级虚拟网络&lt;/p&gt;&lt;p&gt;1.8、Hyper-V复制&lt;/p&gt;&lt;p&gt;1.9、服务器信息块形式的服务器数据&lt;/p&gt;&lt;p&gt;1.10、虚拟桌面架构增强&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;二、Hyper-V 3.0十大新特性(&lt;a href="http://blogs.virtualizationadmin.com/lowe/2011/06/20/hyper-v-30-%E2%80%93-what%E2%80%99s-coming/"&gt;&lt;span style="color:red"&gt;英文原文&lt;/span&gt;&lt;/a&gt;)&lt;/p&gt;&lt;p&gt;2.1、vhdx虚拟磁盘格式&lt;/p&gt;&lt;p&gt;2.2、虚拟光纤通道适配器&lt;/p&gt;&lt;p&gt;2.3、存储和网络资源池&lt;/p&gt;&lt;p&gt;2.4、支持多于4个的虚拟CPU&lt;/p&gt;&lt;p&gt;2.5、硬件加速&lt;/p&gt;&lt;p&gt;2.6、带宽管理&lt;/p&gt;&lt;p&gt;2.7、DHCP向导&lt;/p&gt;&lt;p&gt;2.8、路由向导&lt;/p&gt;&lt;p&gt;2.9、端口监控&lt;/p&gt;&lt;p&gt;2.10、虚拟交换机扩展&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;三、使用PowerShell 3.0管理Hyper-V 3.0&lt;/p&gt;&lt;p&gt;PowerShell ISE是集成在Windows Server中的PowerShell集成开发环境，在Windows Server 8中，PowerShell ISE终于开始支持智能感知功能了：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201110/201110231303218729.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;虽然还不如&lt;a name="OLE_LINK2"&gt;PowerGUI Script Editor还用，但是已经很不错了，且支持插件，目前插件还不多，在&lt;/a&gt;&lt;a href="http://social.technet.microsoft.com/wiki/contents/articles/2969.aspx"&gt;&lt;span style="color:red"&gt;TeachNet&lt;/span&gt;&lt;/a&gt;上可以查看。&lt;/p&gt;&lt;p&gt;PowerGUI Script Editor暂时还不支持PowerShell 3.0，故将使用PowerShell ISE 进行开发。&lt;/p&gt;&lt;p&gt;新版本的PowerShell ISE的一个很实用的功能是可以查看、搜索模块与命令：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201110/201110231303226286.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;下面使用Hyper-V模块，可以看到有很多命令：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201110/201110231303227224.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;VHD虚拟磁盘格式早在VirtualPC时代就已经出现，是微软虚拟存储的标准格式，在Windows 7 和 Windows Server 2008 R2中，支持直接从VHD虚拟磁盘启动，但是最大容量限制是2TB。&lt;/p&gt;&lt;p&gt;到了Hyper-V 3.0，容量限制已经提升到了16TB，且更新为了VHDX磁盘格式。&lt;/p&gt;&lt;p&gt;3.1、创建一个虚拟磁盘&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Lucida Console; font-size:9pt"&gt;&lt;span style="color:blue"&gt;New-VHD&lt;/span&gt;&lt;span style="color:navy"&gt;-Path&lt;/span&gt;&lt;span style="color:darkred"&gt;"F:\Work\tmp\Hyper-V\test.vhdx"&lt;/span&gt;&lt;span style="color:navy"&gt;-VHDType&lt;/span&gt;&lt;span style="color:blueviolet"&gt;Dynamic&lt;/span&gt;&lt;span style="color:navy"&gt;-VHDFormat&lt;/span&gt;&lt;span style="color:blueviolet"&gt;VHDX&lt;/span&gt;&lt;span style="color:navy"&gt;-SizeBytes&lt;/span&gt;&lt;span style="color:purple"&gt;1024MB&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;如下图所示，在F:\Work\tmp\Hyper-V目录中创建了一个VHDX格式的虚拟磁盘，容量为1GB，动态扩展。&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201110/201110231303232830.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201110/201110231303247880.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;在Windows Server 8中，可以直接挂载VHDX虚拟磁盘格式：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201110/201110231303242929.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;可以在磁盘管理器中对其进行初始化：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201110/201110231303261143.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;一般使用MBR分区表，格式化为NTFS后就可以在资源管理器中查看了，和物理硬盘没什么区别：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201110/201110231303261209.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;3.2、查看已有的虚拟机&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Lucida Console; font-size:9pt"&gt;&lt;span style="color:blue"&gt;Get-VM&lt;/span&gt;&lt;span style="color:navy"&gt;-Name&lt;/span&gt;&lt;span style="color:darkred"&gt;"WinServer2003R2"&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201110/20111023130327162.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;脚本运行结果：&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201110/201110231303281897.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;3.3、查看Hyper-V服务器的信息&lt;/p&gt;&lt;p&gt;&lt;span style="color:blue; font-family:Lucida Console; font-size:9pt"&gt;Get-VMHost&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201110/20111023130328884.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;3.4、创建一个虚拟机&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Lucida Console; font-size:9pt"&gt;&lt;span style="color:blue"&gt;New-VM&lt;/span&gt;&lt;span style="color:navy"&gt;-Name&lt;/span&gt;&lt;span style="color:darkred"&gt;"WinServer2008R2"&lt;/span&gt;&lt;span style="color:navy"&gt;-MemoryStartupBytes&lt;/span&gt;&lt;span style="color:purple"&gt;2GB&lt;/span&gt;&lt;span style="color:navy"&gt;-BootDevice&lt;/span&gt;&lt;span style="color:darkred"&gt;"CDRom"&lt;/span&gt;&lt;span style="color:navy"&gt;-NewVHDPath&lt;/span&gt;&lt;span style="color:darkred"&gt;"F:\Backup\Developer\Virtualization\Virtual Machines\Hyper-V\Virtual Hard Disks\WinServer2008R2.vhdx"&lt;/span&gt;&lt;span style="color:navy"&gt;-NewVHDSize&lt;/span&gt; (&lt;span style="color:purple"&gt;2048&lt;/span&gt;&lt;span style="color:darkgray"&gt;*&lt;/span&gt;&lt;span style="color:purple"&gt;1000&lt;/span&gt;&lt;span style="color:darkgray"&gt;*&lt;/span&gt;&lt;span style="color:purple"&gt;10&lt;/span&gt;) &lt;span style="color:navy"&gt;-SwitchName&lt;/span&gt;&lt;span style="color:darkred"&gt;"Hyper-V Switch"&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/brooks-dotnet/201110/201110231303297013.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;3.5、启动、关闭虚拟机&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Lucida Console; font-size:9pt"&gt;&lt;span style="color:blue"&gt;Start-VM&lt;/span&gt;&lt;span style="color:navy"&gt;-Name&lt;/span&gt;&lt;span style="color:darkred"&gt;"WinServer2008R2"&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Lucida Console; font-size:9pt"&gt;&lt;span style="color:blue"&gt;Stop-VM&lt;/span&gt;&lt;span style="color:navy"&gt;-Name&lt;/span&gt;&lt;span style="color:darkred"&gt;"WinServer2008R2"&lt;/span&gt;&lt;span style="color:navy"&gt;&amp;#8211;Force&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;3.6、删除虚拟机&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Lucida Console; font-size:9pt"&gt;&lt;span style="color:blue"&gt;Remove-VM&lt;/span&gt;&lt;span style="color:navy"&gt;-Name&lt;/span&gt;&lt;span style="color:darkred"&gt;"WinServer2008R2"&lt;/span&gt;&lt;span style="color:navy"&gt;&amp;#8211;Force&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;注意删除虚拟机并不会删除虚拟磁盘。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;小结：&lt;/p&gt;&lt;p&gt;本次开始对Windows Server 8的企业级特性进行测试，对即将发布的下一代Windows Server进行预热。PowerShell 3.0扮演了核心角色，几乎可以完成所有的管理操作，后续篇章会继续测试Windows Server 8的奇特新特性。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/brooks-dotnet/aggbug/2221719.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/brooks-dotnet/archive/2011/10/23/2221719.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
