<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_{CODE @CODING完美世界</title><subtitle type="text">学而不思则罔，思而不学则殆。</subtitle><id>http://feed.cnblogs.com/blog/u/15721/rss</id><updated>2011-10-09T10:05:32Z</updated><author><name>同一片海</name><uri>http://www.cnblogs.com/chinadhf/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/chinadhf/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/15721/rss"/><entry><id>http://www.cnblogs.com/chinadhf/archive/2010/11/13/1876345.html</id><title type="text">C#调用非托管Dll时的参数传递</title><summary type="text">C#调用非托管Dll时，如果非托管Dll中的方法的参数为char*型，如果将参数单向传递给Dll，C#中应使用string类型参数；如果Dll可能对参数进行修改并返回，C#中应使用StringBuilder类型参数，并注意设置StringBuilder的Capacity使其足以容纳Dll返回的字符串。基本格式类似于：[代码]</summary><published>2010-11-13T02:43:00Z</published><updated>2010-11-13T02:43:00Z</updated><author><name>同一片海</name><uri>http://www.cnblogs.com/chinadhf/</uri></author><link rel="alternate" href="http://www.cnblogs.com/chinadhf/archive/2010/11/13/1876345.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/chinadhf/archive/2010/11/13/1876345.html"/><content type="html">&lt;p&gt;C#调用非托管Dll时，如果非托管Dll中的方法的参数为char*型，如果将参数单向传递给Dll，C#中应使用string类型参数；如果Dll可能对参数进行修改并返回，C#中应使用StringBuilder类型参数，并注意设置StringBuilder的Capacity使其足以容纳Dll返回的字符串。基本格式类似于：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&lt;div&gt;&lt;!--&lt;br/ /&gt;&lt;br/ /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br/ /&gt;http://www.CodeHighlighter.com/&lt;br/ /&gt;&lt;br/ /&gt;--&gt;&lt;span style="color: #000000;"&gt;[DllImport(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;ICCard.dll&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&amp;nbsp;CharSet&amp;nbsp;&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;CharSet.Ansi)]&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;static&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;extern&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;Rcard(StringBuilder&amp;nbsp;text,&amp;nbsp;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;track);&lt;/span&gt;&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;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/chinadhf/aggbug/1876345.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/chinadhf/archive/2010/11/13/1876345.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/chinadhf/archive/2010/09/03/1817336.html</id><title type="text">使用ATL开发ActiveX控件</title><summary type="text">本文描述了使用ATL开发一个ActiveX控件的完整过程。</summary><published>2010-09-03T11:38:00Z</published><updated>2010-09-03T11:38:00Z</updated><author><name>同一片海</name><uri>http://www.cnblogs.com/chinadhf/</uri></author><link rel="alternate" href="http://www.cnblogs.com/chinadhf/archive/2010/09/03/1817336.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/chinadhf/archive/2010/09/03/1817336.html"/><content type="html">&lt;p&gt;本文描述了使用ATL开发一个ActiveX控件的完整过程。&lt;/p&gt;  &lt;p&gt;一、创建项目&lt;/p&gt;  &lt;p&gt;单击起始页中的“New Project…”，选择“ATL”分类下的“ATL Project”项目，项目名称为“Calculator”。在随后出现的项目向导中，使用默认配置即可。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/chinadhf/WindowsLiveWriter/ATLActiveX_1089F/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/chinadhf/WindowsLiveWriter/ATLActiveX_1089F/image_thumb.png" width="652" height="552" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;二、添加控件&lt;/p&gt;  &lt;p&gt;在解决方案管理器中的项目上右击，依次选择“Add”、“Class”，在添加类对话框中选择ATL分类下的ATL Control类型。单击“Add”按钮，将会出现添加ATL Control向导。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/chinadhf/WindowsLiveWriter/ATLActiveX_1089F/image_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/chinadhf/WindowsLiveWriter/ATLActiveX_1089F/image_thumb_1.png" width="648" height="553" /&gt;&lt;/a&gt;&amp;#160; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/chinadhf/WindowsLiveWriter/ATLActiveX_1089F/image_6.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/chinadhf/WindowsLiveWriter/ATLActiveX_1089F/image_thumb_2.png" width="649" height="549" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;在向导的第二步中，将接口类型选择为“Dual”，为控件支持事件做为准备，在Support选项中，选中“Connection points”复选框。&lt;/p&gt;  &lt;p&gt;随后出现选择控件要实现的接口的界面，除VS默认添加的实现外，再添加IObjectSafety接口，实现该接口可以避免控件在IE中使用时IE弹出运行的脚本不安全的提示。&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/chinadhf/WindowsLiveWriter/ATLActiveX_1089F/image_8.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/chinadhf/WindowsLiveWriter/ATLActiveX_1089F/image_thumb_3.png" width="655" height="552" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;三、为控件添加并实现方法&lt;/p&gt;  &lt;p&gt;在Class View窗口中右击ICalc接口，依次选择“Add”、“Add Method…”，此处假定我们实现一个加法运算，将方法命名为“Add”，然后添加参数：&lt;/p&gt;  &lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/chinadhf/WindowsLiveWriter/ATLActiveX_1089F/image_10.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/chinadhf/WindowsLiveWriter/ATLActiveX_1089F/image_thumb_4.png" width="643" height="548" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;需要注意的是对返回值的处理。应将参数类型选定为DOUBLE*，并选中“retval”复选框。&lt;/p&gt;  &lt;p&gt;向导结束后，VS自动在Calc.cpp中添加了该方法的空实现，略加修改后的方法代码为：&lt;/p&gt;  &lt;div style="border-bottom: #ccc 1px solid; border-left: #ccc 1px solid; padding-bottom: 3px; background-color: #eee; padding-left: 6px; padding-right: 6px; font-family: courier new, arial; max-height: 300px; overflow: auto; border-top: #ccc 1px solid; border-right: #ccc 1px solid; padding-top: 3px"&gt;   STDMETHODIMP CCalc::Add(DOUBLE a, DOUBLE b, DOUBLE* result)&lt;br/&gt;{&lt;br/&gt;*result = a + b;&lt;br/&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt; S_OK;&lt;br/&gt;}&lt;/div&gt;&lt;br /&gt;&lt;p&gt;测试该方法：&lt;/p&gt;&lt;p&gt;由于只是调用该控件进行加法运算，并不需要该控件的界面展示，因此在测试控件之前，可以将VS自动生成的OnDraw方法中的其他代码删除，直接返回 S_OK 即可。&lt;/p&gt;&lt;p&gt;对VS自动生成的用于测试的htm略做修改来测试添加的方法。修改后的完整htm代码如下：&lt;/p&gt;&lt;div style="border-bottom: #ccc 1px solid; border-left: #ccc 1px solid; padding-bottom: 3px; background-color: #eee; padding-left: 6px; padding-right: 6px; font-family: courier new, arial; max-height: 300px; overflow: auto; border-top: #ccc 1px solid; border-right: #ccc 1px solid; padding-top: 3px"&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;HTML&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;HEAD&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;TITLE&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;ATL 8.0 test page for object Calc&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;TITLE&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;HEAD&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;BODY&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;OBJECT&lt;/span&gt; &lt;span style="color: #ff0000"&gt;ID&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;Calc&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;CLASSID&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;CLSID:59443E6F-7B99-4F75-A7AF-6FEE5B8208CD&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;OBJECT&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;input&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;button&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;value&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;Add&amp;quot;&lt;/span&gt; &lt;span style="color: #ff0000"&gt;onclick&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;add();&amp;quot;&lt;/span&gt; &lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;script&lt;/span&gt; &lt;span style="color: #ff0000"&gt;type&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;    function add() {&lt;br/&gt;        var calc = document.getElementById('Calc');&lt;br/&gt;        var result = calc.Add(2, 3);&lt;br/&gt;        alert(result);&lt;br/&gt;    }&lt;br/&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;script&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;BODY&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;HTML&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;点击“Add”按钮后的运行效果：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/chinadhf/WindowsLiveWriter/ATLActiveX_1089F/image_12.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/chinadhf/WindowsLiveWriter/ATLActiveX_1089F/image_thumb_5.png" width="374" height="274" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;四、为控件添加事件&lt;/p&gt;&lt;p&gt;假定控件进行的是一个非常复杂的运算，为了在调用运算时不阻塞调用者线程，可以使用异步方式完成运算。控件在完成运算时需要通知调用者，这时便需要事件。&lt;/p&gt;&lt;p&gt;首先按照步骤三中的方法，添加一个异步调用加法运算的方法AddAsync，然后为控件添加运算完成的事件AddCompleted。&lt;/p&gt;&lt;p&gt;在Class View窗口中右击_ICalcEvents接口，依次选择“Add”、“Add Method…”，根据添加方法向导添加AddCompleted方法，如下图所示：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/chinadhf/WindowsLiveWriter/ATLActiveX_1089F/image_14.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/chinadhf/WindowsLiveWriter/ATLActiveX_1089F/image_thumb_6.png" width="657" height="552" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;然后在Class View窗口中右击CCalc类，依次选择“Add”、“Add Connection Point…”，在弹出的实现连接点窗口中实现_ICalcEvents接口。&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/chinadhf/WindowsLiveWriter/ATLActiveX_1089F/image_18.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/chinadhf/WindowsLiveWriter/ATLActiveX_1089F/image_thumb_8.png" width="658" height="556" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;完成向导后，VS会自动为我们生成基本框架，包括引发事件的方法Fire_AddCompleted。我们只需在AddAsync方法中添加运算并在运算结束时调用Fire_AddCompleted的代码：&lt;/p&gt;&lt;div style="border-bottom: #ccc 1px solid; border-left: #ccc 1px solid; padding-bottom: 3px; background-color: #eee; padding-left: 6px; padding-right: 6px; font-family: courier new, arial; max-height: 300px; overflow: auto; border-top: #ccc 1px solid; border-right: #ccc 1px solid; padding-top: 3px"&gt;  STDMETHODIMP CCalc::AddAsync(DOUBLE a, DOUBLE b)&lt;br/&gt;{&lt;br/&gt;&lt;span style="color: #0000ff"&gt;double&lt;/span&gt; result;&lt;br/&gt;result = a + b;&lt;br/&gt;Fire_AddCompleted(&amp;amp;result);&lt;br/&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt; S_OK;&lt;br/&gt;}&lt;/div&gt;&lt;br /&gt;&lt;p&gt;在网页中添加异步计算的代码进行测试（添加的javascript代码如下），应该能够得到我们想要的效果。&lt;/p&gt;&lt;div style="border-bottom: #ccc 1px solid; border-left: #ccc 1px solid; padding-bottom: 3px; background-color: #eee; padding-left: 6px; padding-right: 6px; font-family: courier new, arial; max-height: 300px; overflow: auto; border-top: #ccc 1px solid; border-right: #ccc 1px solid; padding-top: 3px"&gt;  &amp;lt;script type=&amp;quot;&lt;span style="color: #8b0000"&gt;text/javascript&lt;/span&gt;&amp;quot;&amp;gt;&lt;br/&gt;    function addAsync() {&lt;br/&gt;        var calc = document.getElementById('Calc');&lt;br/&gt;        calc.attachEvent(&amp;quot;&lt;span style="color: #8b0000"&gt;AddCompleted&lt;/span&gt;&amp;quot;, OnAddCompleted);&lt;br/&gt;        calc.AddAsync(3, 4);&lt;br/&gt;    }&lt;br/&gt;&lt;br/&gt;    function OnAddCompleted(result) {&lt;br/&gt;        alert(result);&lt;br/&gt;    }&lt;br/&gt;&amp;lt;/script&amp;gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;五、ActiveX控件的事件与多线程&lt;/p&gt;&lt;p&gt;细心的读者一定会发现步骤四中所谓的“异步”是假的：虽然在运算结束后使用事件对调用者进行通知，但由于运算是在主线程上进行的，所以调用过程仍是同步的。步骤四其实只是展示了一下事件的简单用法，如果真正实现异步，则需要在控件中使用多线程。&lt;/p&gt;&lt;p&gt;在ActiveX控件中使用多线程时需要注意的是：引发事件（即调用Fire_XXXX）必须在窗口线程中进行，否则会导致事件不能被ActiveX控件的容器处理。如果事件发生时执行代码的线程不是窗口线程。那么应该使用PostMessage或SendMessage来通知窗口线程，并在消息处理函数中执行Fire_XXXX。为了使用控件的消息机制，还应该在CCalc的构造函数中将m_bWindowOnly字段设置为TRUE。&lt;/p&gt;&lt;p&gt;以下是改为多线程后的部分示例代码：&lt;/p&gt;&lt;div style="border-bottom: #ccc 1px solid; border-left: #ccc 1px solid; padding-bottom: 3px; background-color: #eee; padding-left: 6px; padding-right: 6px; font-family: courier new, arial; max-height: 300px; overflow: auto; border-top: #ccc 1px solid; border-right: #ccc 1px solid; padding-top: 3px"&gt;  STDMETHODIMP CCalc::AddAsync(DOUBLE a, DOUBLE b)&lt;br/&gt;{&lt;br/&gt;m_a = a;&lt;br/&gt;m_b = b;&lt;br/&gt;&lt;br/&gt;_beginthreadex(NULL, NULL, AddMethod, this, NULL, NULL);&lt;br/&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt; S_OK;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;unsigned&lt;/span&gt; __stdcall CCalc::AddMethod(LPVOID arg)&lt;br/&gt;{&lt;br/&gt;CCalc* pThis = (CCalc*)arg;&lt;br/&gt;pThis-&amp;gt;m_result = pThis-&amp;gt;m_a + pThis-&amp;gt;m_b;&lt;br/&gt;&lt;br/&gt;pThis-&amp;gt;SendMessage(WM_ADDCOMPLETED);&lt;br/&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt; 0;&lt;br/&gt;}&lt;br/&gt;&lt;br/&gt;LRESULT CCalc::OnAddCompleted(UINT &lt;span style="color: #008000"&gt;/*uMsg*/&lt;/span&gt;, WPARAM &lt;span style="color: #008000"&gt;/*wParam*/&lt;/span&gt;, LPARAM &lt;span style="color: #008000"&gt;/*lParam*/&lt;/span&gt;, BOOL&amp;amp; &lt;span style="color: #008000"&gt;/*bHandled*/&lt;/span&gt;)&lt;br/&gt;{&lt;br/&gt;Fire_AddCompleted(&amp;amp;m_result);&lt;br/&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;return&lt;/span&gt; 0;&lt;br/&gt;}&lt;/div&gt;&lt;br /&gt;&lt;p&gt; 至此，一个简单的ActiveX控件就开发完成了。关于ActiveX控件的打包部署等问题，可以参考以下内容：&lt;/p&gt;&lt;p&gt;1、&lt;a href="http://www.cnblogs.com/chinhr/archive/2008/02/25/1080775.html" target="_blank"&gt;Web发布cab文件打包的ActiveX控件总结&lt;/a&gt;&lt;/p&gt;&lt;p&gt;2、&lt;a href="http://www.javaeye.com/topic/110834"&gt;ActiveX控件打包成Cab置于网页中自动下载安装&lt;/a&gt;&lt;/p&gt;&lt;p&gt;3、&lt;a href="http://blog.csdn.net/czbever/archive/2010/03/14/5379740.aspx"&gt;VS2005下MFC开发的ActiveX控件的部分总结&lt;/a&gt;&lt;/p&gt;&lt;p&gt;本文示例所使用的开发环境为Visual Studio 2010。&lt;/p&gt;&lt;p&gt;&amp;#160;&lt;/p&gt;&lt;p&gt;附：使用VC6开发时的注意事项&lt;/p&gt;&lt;p&gt;在今天看来，VC6显得有些古老，但由于目前能见到的大多数版本的Windows操作系统已经内置了运行VC6开发的应用程序所需要的库，因此从方便发布的角度看，使用VC6来开发ActiveX控件不失为一个好的选择。&lt;/p&gt;&lt;p&gt;使用VC6开发ActiveX控件与上文所述步骤大同小异，但是需要注意微软给开发者留下的两道试题--使用VC6向导生成的代码中包含两处错误：&lt;/p&gt;&lt;p&gt;第一处错误位于连接点映射，&lt;strong&gt;DIID__IXXXXEvents&lt;/strong&gt;中的第一个字符‘D’需手动添加。&lt;/p&gt;&lt;p&gt;示例代码：&lt;/p&gt;&lt;div style="border-bottom: #ccc 1px solid; border-left: #ccc 1px solid; padding-bottom: 3px; background-color: #eee; padding-left: 6px; padding-right: 6px; font-family: courier new, arial; max-height: 300px; overflow: auto; border-top: #ccc 1px solid; border-right: #ccc 1px solid; padding-top: 3px"&gt;  BEGIN_CONNECTION_POINT_MAP(CCalc)&lt;br/&gt;CONNECTION_POINT_ENTRY(DIID__ICalcEvents)&lt;span style="color: #008000"&gt;// 修改 IID_XXXX 为 DIID_XXXX&lt;/span&gt;&lt;br/&gt;END_CONNECTION_POINT_MAP()&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;该错误会造成生成失败，比较容易发现。&lt;/p&gt;&lt;p&gt;第二处错误位于&lt;strong&gt;Fire_XXXX&lt;/strong&gt;方法内，不会造成生成失败但会造成运行结果莫名其妙，因此该错误更隐蔽一些。&lt;/p&gt;&lt;p&gt;示例代码：&lt;/p&gt;&lt;div style="border-bottom: #ccc 1px solid; border-left: #ccc 1px solid; padding-bottom: 3px; background-color: #eee; padding-left: 6px; padding-right: 6px; font-family: courier new, arial; max-height: 300px; overflow: auto; border-top: #ccc 1px solid; border-right: #ccc 1px solid; padding-top: 3px"&gt;  &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (pConnection)&lt;br/&gt;{&lt;br/&gt;  CComVariant avarParams[1];&lt;br/&gt;  avarParams[0].byref = result;    &lt;span style="color: #008000"&gt;//此处自动生成的代码有错误，应去掉原代码中的取址运算&lt;/span&gt;&lt;br/&gt;  avarParams[0].vt = VT_R8|VT_BYREF;&lt;br/&gt;  CComVariant varResult;&lt;br/&gt;&lt;br/&gt;  &lt;span style="color: #008000"&gt;//...&lt;/span&gt;&lt;br/&gt;}&lt;/div&gt;&lt;img src="http://www.cnblogs.com/chinadhf/aggbug/1817336.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/chinadhf/archive/2010/09/03/1817336.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/chinadhf/archive/2010/09/02/1816321.html</id><title type="text">大数据量传输时配置WCF的注意事项</title><summary type="text">WCF传输数据量的能力受到许多因素的制约，如果程序中出现因需要传输的数据量较大而导致调用WCF服务失败的问题，应注意以下配置...</summary><published>2010-09-02T11:35:00Z</published><updated>2010-09-02T11:35:00Z</updated><author><name>同一片海</name><uri>http://www.cnblogs.com/chinadhf/</uri></author><link rel="alternate" href="http://www.cnblogs.com/chinadhf/archive/2010/09/02/1816321.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/chinadhf/archive/2010/09/02/1816321.html"/><content type="html">&lt;p&gt;WCF传输数据量的能力受到许多因素的制约，如果程序中出现因需要传输的数据量较大而导致调用WCF服务失败的问题，应注意以下配置：&lt;/p&gt;  &lt;p&gt;1、MaxReceivedMessageSize：获取或设置配置了此绑定的通道上可以接收的消息的最大大小。&lt;/p&gt;  &lt;p&gt;basicHttpBinding等预定义的绑定一般具有MaxReceivedMessageSize属性，CustomBinding则需要在Transport中定义。&lt;/p&gt;  &lt;p&gt;示例代码：&lt;/p&gt;  &lt;div style="border-bottom: #ccc 1px solid; border-left: #ccc 1px solid; padding-bottom: 3px; background-color: #eee; padding-left: 6px; padding-right: 6px; font-family: courier new, arial; max-height: 300px; overflow: auto; border-top: #ccc 1px solid; border-right: #ccc 1px solid; padding-top: 3px"&gt;   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;bindings&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;customBinding&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;binding&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"customBinding"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;      &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;binaryMessageEncoding&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;      &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;binaryMessageEncoding&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;      &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;httpTransport&lt;/span&gt; &lt;span style="color: #ff0000"&gt;maxReceivedMessageSize&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"2147483647"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;      &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;httpTransport&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;binding&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;customBinding&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;basicHttpBinding&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;binding&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"basicBinding"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;maxReceivedMessageSize&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"2147483647"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;binding&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;basicHttpBinding&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;bindings&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;网上许多地方说应同时设置MaxBufferSize（获取或设置缓冲区的最大大小，该缓冲区用于接收来自通道的消息。），根据MSDN上的解释:&lt;/p&gt;&lt;p&gt;&amp;#8220;MaxBufferSize 属性的值及其重要性有所不同，这取决于是否在接收消息的通道上对消息进行缓冲或流处理： &lt;/p&gt;&lt;ul&gt;  &lt;li&gt;    &lt;p&gt;对于缓冲传输，（&lt;a href="http://msdn.microsoft.com/zh-cn/library/system.servicemodel.basichttpbinding.transfermode.aspx"&gt;TransferMode&lt;/a&gt; 设置为 &lt;a href="http://msdn.microsoft.com/zh-cn/library/system.servicemodel.transfermode.buffered.aspx"&gt;Buffered&lt;/a&gt;）。该值始终等于由 &lt;a href="http://msdn.microsoft.com/zh-cn/library/system.servicemodel.basichttpbinding.maxreceivedmessagesize.aspx"&gt;MaxReceivedMessageSize&lt;/a&gt; 指定的值。&lt;/p&gt;  &lt;/li&gt;  &lt;li&gt;    &lt;p&gt;对于流传输（&lt;a href="http://msdn.microsoft.com/zh-cn/library/system.servicemodel.basichttpbinding.transfermode.aspx"&gt;TransferMode&lt;/a&gt; 设置为 &lt;a href="http://msdn.microsoft.com/zh-cn/library/system.servicemodel.transfermode.streamed.aspx"&gt;Streamed&lt;/a&gt;），必须对 SOAP 标头进行缓冲才能生成消息。可根据需要对正文进行流处理。在此情况下，MaxBufferSize 小于或等于&lt;a href="http://msdn.microsoft.com/zh-cn/library/system.servicemodel.basichttpbinding.maxreceivedmessagesize.aspx"&gt;MaxReceivedMessageSize&lt;/a&gt;，其中 &lt;a href="http://msdn.microsoft.com/zh-cn/library/system.servicemodel.basichttpbinding.maxreceivedmessagesize.aspx"&gt;MaxReceivedMessageSize&lt;/a&gt; 限制整个消息（标头和正文）的大小，而 MaxBufferSize 仅限制 SOAP 标头的大小。&amp;#8221;&lt;/p&gt;  &lt;/li&gt;&lt;/ul&gt;&lt;p&gt;可见，对于默认的缓冲传输，设置该属性是不必要的。&lt;/p&gt;&lt;p&gt;2、ReaderQuotas：获取或设置可由配置了此绑定的终结点处理的 SOAP 消息的复杂性约束。&lt;/p&gt;&lt;p&gt;该属性是&lt;a href="http://msdn.microsoft.com/zh-cn/library/system.servicemodel.configuration.xmldictionaryreaderquotaselement(v=VS.90).aspx"&gt;XmlDictionaryReaderQuotasElement&lt;/a&gt;类型，一般需要设置该属性的&lt;a href="http://msdn.microsoft.com/zh-cn/library/system.servicemodel.configuration.xmldictionaryreaderquotaselement.maxarraylength(v=VS.90).aspx"&gt;MaxArrayLength&lt;/a&gt;、&lt;a href="http://msdn.microsoft.com/zh-cn/library/system.servicemodel.configuration.xmldictionaryreaderquotaselement.maxstringcontentlength(v=VS.90).aspx"&gt;MaxStringContentLength&lt;/a&gt;及&lt;a href="http://msdn.microsoft.com/zh-cn/library/system.servicemodel.configuration.xmldictionaryreaderquotaselement.maxdepth(v=VS.90).aspx"&gt;MaxDepth&lt;/a&gt;属性。&lt;/p&gt;&lt;p&gt;示例代码：&lt;/p&gt;&lt;div style="border-bottom: #ccc 1px solid; border-left: #ccc 1px solid; padding-bottom: 3px; background-color: #eee; padding-left: 6px; padding-right: 6px; font-family: courier new, arial; max-height: 300px; overflow: auto; border-top: #ccc 1px solid; border-right: #ccc 1px solid; padding-top: 3px"&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;bindings&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;customBinding&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;binding&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"customBinding"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;      &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;binaryMessageEncoding&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;readerQuotas&lt;/span&gt; &lt;span style="color: #ff0000"&gt;maxArrayLength&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"2147483647"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;maxStringContentLength&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"2147483647"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;maxDepth&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"64"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;br/&gt;      &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;binaryMessageEncoding&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;      &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;httpTransport&lt;/span&gt; &lt;span style="color: #ff0000"&gt;maxReceivedMessageSize&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"2147483647"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;      &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;httpTransport&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;binding&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;customBinding&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;basicHttpBinding&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;binding&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"basicBinding"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;maxReceivedMessageSize&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"2147483647"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;      &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;readerQuotas&lt;/span&gt; &lt;span style="color: #ff0000"&gt;maxArrayLength&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"2147483647"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;maxStringContentLength&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"2147483647"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;maxDepth&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"64"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;binding&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;basicHttpBinding&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;bindings&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;3、MaxItemsInObjectGraph：获取对象图中要序列化或反序列化的最大项数。&lt;/p&gt;&lt;p&gt;该属性属于&lt;a href="http://msdn.microsoft.com/zh-cn/library/system.runtime.serialization.datacontractserializer.aspx"&gt;DataContractSerializer&lt;/a&gt;类，需要在serviceBehaviors下的behavior节中配置。&lt;/p&gt;&lt;p&gt;示例代码：&lt;/p&gt;&lt;div style="border-bottom: #ccc 1px solid; border-left: #ccc 1px solid; padding-bottom: 3px; background-color: #eee; padding-left: 6px; padding-right: 6px; font-family: courier new, arial; max-height: 300px; overflow: auto; border-top: #ccc 1px solid; border-right: #ccc 1px solid; padding-top: 3px"&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;behaviors&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;serviceBehaviors&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;behavior&lt;/span&gt; &lt;span style="color: #ff0000"&gt;name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Wcf4BigData.Web.BigDataServiceBehavior"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;      &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;serviceMetadata&lt;/span&gt; &lt;span style="color: #ff0000"&gt;httpGetEnabled&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"true"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;br/&gt;      &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;serviceDebug&lt;/span&gt; &lt;span style="color: #ff0000"&gt;includeExceptionDetailInFaults&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"false"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;br/&gt;      &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;dataContractSerializer&lt;/span&gt; &lt;span style="color: #ff0000"&gt;maxItemsInObjectGraph&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"2147483647"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;behavior&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;serviceBehaviors&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;behaviors&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;以上是传输大数据量时可能需要设置的属于WCF的几个属性，示例代码中大多将属性值设置为允许的最大值，但设置后并不能保证WCF一定具有传输如此大数据量的能力。另外，这些属性一般需要在服务端和客户端同时设置，但如果使用Silverlight客户端，部分属性如ReaderQuotas并不被支持。&lt;/p&gt;&lt;p&gt;4、MaxRequestLength：获取或设置请求的最大大小。&lt;/p&gt;&lt;p&gt;如果WCF以IIS作为宿主，WCF传输数据量的能力还受到HttpRunttime设置的制约，可能需要同时HttpRunttime（在system.Web节中）的MaxRequestLength属性。MaxRequestLength属性表示请求的最大大小（以千字节为单位）。默认大小为 4096 KB (4 MB)，允许的最大值是2097151。&lt;/p&gt;&lt;p&gt;示例代码：&lt;/p&gt;&lt;div style="border-bottom: #ccc 1px solid; border-left: #ccc 1px solid; padding-bottom: 3px; background-color: #eee; padding-left: 6px; padding-right: 6px; font-family: courier new, arial; max-height: 300px; overflow: auto; border-top: #ccc 1px solid; border-right: #ccc 1px solid; padding-top: 3px"&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;httpRuntime&lt;/span&gt; &lt;span style="color: #ff0000"&gt;maxRequestLength&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"2097151"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;/&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;  &lt;br /&gt;使用以上配置进行测试，从WCF端获取1000万条长度为10的字符串是成功的。每个长度为10的字符串编码后约占32个字节，如此算来，成功传输的数据已经超过300M了，算得上不小的数字了，如果数据量比这还要大的话，怕是网速已经不能满足要求了，这时需要考虑其他的解决方案。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/chinadhf/aggbug/1816321.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/chinadhf/archive/2010/09/02/1816321.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/chinadhf/archive/2010/06/08/1754224.html</id><title type="text">Silverlight自定义主题</title><summary type="text">《在Silverlight 3中使用主题》一文中已经对在Silverlight中使用ToolKit提供的主题做了介绍，本文将介绍在Silverlight中实现并使用自定义主题。</summary><published>2010-06-08T10:37:00Z</published><updated>2010-06-08T10:37:00Z</updated><author><name>同一片海</name><uri>http://www.cnblogs.com/chinadhf/</uri></author><link rel="alternate" href="http://www.cnblogs.com/chinadhf/archive/2010/06/08/1754224.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/chinadhf/archive/2010/06/08/1754224.html"/><content type="html">&lt;p&gt;《&lt;a href="http://www.cnblogs.com/chinadhf/archive/2010/06/07/1753419.html" target="_blank"&gt;在Silverlight 3中使用主题&lt;/a&gt;》一文中已经对在Silverlight中使用ToolKit提供的主题做了介绍，本文将介绍在Silverlight中实现并使用自定义主题。&lt;/p&gt;  &lt;p&gt;有时候我们可能想开发一套具有特色的主题而不是采用ToolKit提供的默认主题，或者我们可能只是为了统一程序的风格而做一些统一处理（例如将所有TextBlock的Margin定义为5），这时我们就需要自定义主题。使用自定义主题时同样需要添加对Silverlight ToolKit中的System.Windows.Controls.Theming.Toolkit程序集的引用。&lt;/p&gt;  &lt;p&gt;以下是实现并使用自定义主题的几种方式：&lt;/p&gt;  &lt;p&gt;一、使用自定义主题文件&lt;/p&gt;  &lt;p&gt;实现步骤：&lt;/p&gt;  &lt;p&gt;1、在项目中添加新项，并选择&amp;#8220;Silverlight 资源字典&amp;#8221;模板。&lt;/p&gt;  &lt;p&gt;本示例添加的主题资源文件名为&amp;#8220;CustomTheme.xaml&amp;#8221;。&lt;/p&gt;  &lt;p&gt;注意：需要将添加的主题资源文件的生成操作设置为&amp;#8220;内容&amp;#8221;。&lt;/p&gt;  &lt;p&gt;2、在主题资源文件中添加样式。&lt;/p&gt;  &lt;p&gt;注意：添加样式时只需指定TargetType属性，无需也不能指定 x:Key。&lt;/p&gt;  &lt;p&gt;CustomTheme.xaml源码：&lt;/p&gt;  &lt;div style="border-bottom: #ccc 1px solid; border-left: #ccc 1px solid; padding-bottom: 3px; background-color: #eee; padding-left: 6px; padding-right: 6px; font-family: courier new, arial; max-height: 300px; overflow: auto; border-top: #ccc 1px solid; border-right: #ccc 1px solid; padding-top: 3px"&gt;   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;ResourceDictionary&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #ff0000"&gt;xmlns&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;/span&gt; &lt;br/&gt;    &lt;span style="color: #ff0000"&gt;xmlns&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;x&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"http://schemas.microsoft.com/winfx/2006/xaml"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;    &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: #ff0000"&gt;TargetType&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Button"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;        &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: #ff0000"&gt;Property&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Foreground"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Value&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Red"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&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: #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;br/&gt;&lt;br/&gt;    &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: #ff0000"&gt;TargetType&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"TextBox"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;        &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: #ff0000"&gt;Property&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Foreground"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Value&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Red"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&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: #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;br/&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;ResourceDictionary&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;3、使用ImplicitStyleManager类提供的附加属性将样式应用到控件&lt;/p&gt;&lt;p&gt;MainPage.xaml源码：&lt;/p&gt;&lt;div style="border-bottom: #ccc 1px solid; border-left: #ccc 1px solid; padding-bottom: 3px; background-color: #eee; padding-left: 6px; padding-right: 6px; font-family: courier new, arial; max-height: 300px; overflow: auto; border-top: #ccc 1px solid; border-right: #ccc 1px solid; padding-top: 3px"&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;UserControl&lt;/span&gt; &lt;br/&gt;    &lt;span style="color: #ff0000"&gt;x&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;Class&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"ThemeSample.MainPage"&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #ff0000"&gt;xmlns&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;/span&gt; &lt;br/&gt;    &lt;span style="color: #ff0000"&gt;xmlns&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;x&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"http://schemas.microsoft.com/winfx/2006/xaml"&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #ff0000"&gt;xmlns&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;Theming&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"clr-namespace:System.Windows.Controls.Theming;assembly=System.Windows.Controls.Theming.Toolkit"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;    &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: #ff0000"&gt;x&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"LayoutRoot"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Width&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"160"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Margin&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"100"&lt;/span&gt;&lt;br/&gt;                    &lt;span style="color: #ff0000"&gt;Theming&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;ImplicitStyleManager&lt;/span&gt;.&lt;span style="color: #ff0000"&gt;ApplyMode&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Auto"&lt;/span&gt; &lt;br/&gt;                    &lt;span style="color: #ff0000"&gt;Theming&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;ImplicitStyleManager&lt;/span&gt;.&lt;span style="color: #ff0000"&gt;ResourceDictionaryUri&lt;/span&gt;= &lt;span style="color: #0000ff"&gt;"Themes/CustomTheme.xaml"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Button&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Content&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Button"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Margin&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"10"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #0000ff"&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: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;TextBox&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Text&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"TextBox"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Margin&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"10"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;TextBox&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;    &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: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;UserControl&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;效果预览：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/chinadhf/WindowsLiveWriter/Silverlight_FC48/image_2.png" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/chinadhf/WindowsLiveWriter/Silverlight_FC48/image_thumb.png" width="281" height="165" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;二、自定义主题控件&lt;/p&gt;&lt;p&gt;如果想将自定义主题以程序集的方式发布并提供给第三方使用，就需要自定义主题控件。&lt;/p&gt;&lt;p&gt;本示例将以第一种方式所添加的样式文件做为基础实现一个自定义主题控件。&lt;/p&gt;&lt;p&gt;实现步骤：&lt;/p&gt;&lt;p&gt;1、将CustomTheme.xaml文件的生成操作设置为&amp;#8220;嵌入的资源&amp;#8221;。&lt;/p&gt;&lt;p&gt;2、在项目中添加类，并将类定义为从System.Windows.Controls.Theming.Theme类继承。&lt;/p&gt;&lt;p&gt;本示例添加的类名为CustomTheme。&lt;/p&gt;&lt;p&gt;3、为类添加默认构造函数并为基类的构造函数提供参数。&lt;/p&gt;&lt;p&gt;CustomTheme.cs源码：&lt;/p&gt;&lt;div style="border-bottom: #ccc 1px solid; border-left: #ccc 1px solid; padding-bottom: 3px; background-color: #eee; padding-left: 6px; padding-right: 6px; font-family: courier new, arial; max-height: 300px; overflow: auto; border-top: #ccc 1px solid; border-right: #ccc 1px solid; padding-top: 3px"&gt;  &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Windows.Controls.Theming;&lt;br/&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;namespace&lt;/span&gt; ThemeSample&lt;br/&gt;{&lt;br/&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; CustomTheme : Theme&lt;br/&gt;    {&lt;br/&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; CustomTheme()&lt;br/&gt;            : &lt;span style="color: #0000ff"&gt;base&lt;/span&gt;(&lt;span style="color: #0000ff"&gt;typeof&lt;/span&gt;(CustomTheme).Assembly, "&lt;span style="color: #8b0000"&gt;ThemeSample.Themes.CustomTheme.xaml&lt;/span&gt;")&lt;br/&gt;        {}&lt;br/&gt;    }&lt;br/&gt;}&lt;/div&gt;&lt;br /&gt;&lt;p&gt;注意主题资源文件的写法类似于命名空间+文件名，而不是普通路径。&lt;/p&gt;&lt;p&gt;4、使用自定义主题控件。&lt;/p&gt;&lt;p&gt;MainPage.xaml源码：&lt;/p&gt;&lt;div style="border-bottom: #ccc 1px solid; border-left: #ccc 1px solid; padding-bottom: 3px; background-color: #eee; padding-left: 6px; padding-right: 6px; font-family: courier new, arial; max-height: 300px; overflow: auto; border-top: #ccc 1px solid; border-right: #ccc 1px solid; padding-top: 3px"&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;UserControl&lt;/span&gt; &lt;br/&gt;    &lt;span style="color: #ff0000"&gt;x&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;Class&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"ThemeSample.MainPage"&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #ff0000"&gt;xmlns&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;/span&gt; &lt;br/&gt;    &lt;span style="color: #ff0000"&gt;xmlns&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;x&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"http://schemas.microsoft.com/winfx/2006/xaml"&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #ff0000"&gt;xmlns&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;local&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"clr-namespace:ThemeSample"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #c71585"&gt;local&lt;/span&gt;:&lt;span style="color: #800000"&gt;CustomTheme&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;        &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: #ff0000"&gt;x&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"LayoutRoot"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Width&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"160"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Margin&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"100"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;            &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Button&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Content&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Button"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Margin&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"10"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #0000ff"&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: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;TextBox&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Text&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"TextBox"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Margin&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"10"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;TextBox&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;        &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: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #c71585"&gt;local&lt;/span&gt;:&lt;span style="color: #800000"&gt;CustomTheme&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;UserControl&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;使用自定义主题控件后的效果与使用第一种方式的效果一致，此处不再展示效果图。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/chinadhf/aggbug/1754224.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/chinadhf/archive/2010/06/08/1754224.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/chinadhf/archive/2010/06/07/1753419.html</id><title type="text">在Silverlight 3中使用主题</title><summary type="text">Silverlight为我们提供了功能非常强大的样式，却没有提供快速应用样式的方法。Silverlight ToolKit中提供的默认样式管理器稍微弥补了这一缺憾，通过默认样式管理器，我们可以相对方便的在应用程序中使用主题。本文介绍了在Silverlight中如何使用主题。</summary><published>2010-06-07T10:50:00Z</published><updated>2010-06-07T10:50:00Z</updated><author><name>同一片海</name><uri>http://www.cnblogs.com/chinadhf/</uri></author><link rel="alternate" href="http://www.cnblogs.com/chinadhf/archive/2010/06/07/1753419.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/chinadhf/archive/2010/06/07/1753419.html"/><content type="html">&lt;p&gt;Silverlight为我们提供了功能非常强大的样式，却没有提供快速应用样式的方法，例如，我们不能像在WPF中那样根据资源中的样式的TargetType将样式自动应用到所有目标类型的元素上（好消息是，在Silverlight 4中已经可以这么做了）。Silverlight ToolKit（本文示例代码引用的ToolKit版本：Microsoft Silverlight 3 Toolkit November 2009）中提供的默认样式管理器（ImplicitStyleManager）稍微弥补了这一缺憾，通过默认样式管理器，我们可以相对方便的在应用程序中使用主题。本文介绍了在Silverlight中如何使用主题。&lt;/p&gt;  &lt;p&gt;前提条件：&lt;/p&gt;  &lt;p&gt;在Silverlight 3中使用主题，首先需要在项目中添加对Silverlight ToolKit中的System.Windows.Controls.Theming.Toolkit程序集的引用。如果使用ToolKit中提供的主题（如TwilightBlue主题等），则需要添加相应主题程序集的引用或使用相应主题的样式文件。&lt;/p&gt;  &lt;p&gt;使用主题的几种方式：&lt;/p&gt;  &lt;p&gt;一、使用主题控件&lt;/p&gt;  &lt;p&gt;&amp;#8220;主题控件&amp;#8221;这种叫法有些别扭，但如果观察一下主题的类继承层次，会发现所有主题均从纯虚类&lt;/p&gt;  &lt;p&gt;System.Windows.Controls.Theming.Theme（简称Theme）中继承，而Theme类则直接继承自ContentControl，因此主题确实是一个控件。&lt;/p&gt;  &lt;p&gt;使用步骤：&lt;/p&gt;  &lt;p&gt;1、添加对相应主题程序集的引用，例如，使用TwilightBlue主题需要添加对System.Windows.Controls.Theming.TwilightBlue程序集的引用。&lt;/p&gt;  &lt;p&gt;2、将需要应用主题的元素放到主题控件的内容中。&lt;/p&gt;  &lt;p&gt;示例代码：&lt;/p&gt;  &lt;div style="border-bottom: #ccc 1px solid; border-left: #ccc 1px solid; padding-bottom: 3px; background-color: #eee; padding-left: 6px; padding-right: 6px; font-family: courier new, arial; max-height: 300px; overflow: auto; border-top: #ccc 1px solid; border-right: #ccc 1px solid; padding-top: 3px"&gt;   &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;UserControl&lt;/span&gt; &lt;br/&gt;    &lt;span style="color: #ff0000"&gt;x&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;Class&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"ThemeSample.MainPage"&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #ff0000"&gt;xmlns&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;/span&gt; &lt;br/&gt;    &lt;span style="color: #ff0000"&gt;xmlns&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;x&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"http://schemas.microsoft.com/winfx/2006/xaml"&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #ff0000"&gt;xmlns&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;TwilightBlueTheme&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"clr-namespace:System.Windows.Controls.Theming;assembly=System.Windows.Controls.Theming.TwilightBlue"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #c71585"&gt;TwilightBlueTheme&lt;/span&gt;:&lt;span style="color: #800000"&gt;TwilightBlueTheme&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;        &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: #ff0000"&gt;x&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"LayoutRoot"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Width&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"160"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Margin&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"100"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;            &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Button&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Content&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Button"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Margin&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"10"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #0000ff"&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: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;TextBox&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Text&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"TextBox"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Margin&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"10"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;TextBox&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;        &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: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #c71585"&gt;TwilightBlueTheme&lt;/span&gt;:&lt;span style="color: #800000"&gt;TwilightBlueTheme&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;UserControl&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;效果预览：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/chinadhf/WindowsLiveWriter/Silverlight3_FBA1/image_2.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/chinadhf/WindowsLiveWriter/Silverlight3_FBA1/image_thumb.png" width="307" height="175" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;二、使用ImplicitStyleManager类提供的附加属性&lt;/p&gt;&lt;p&gt;使用该方式时无需添加对相应主题程序集的引用，但是需要使用相应主题提供的样式文件，例如使用TwilightBlue主题时需要System.Windows.Controls.Theming.TwilightBlue.xaml文件，如果已经正确安装了ToolKit，应该能在C:\Program Files\Microsoft SDKs\Silverlight\v3.0\Toolkit\Nov09\Themes\Xaml文件夹找到。&lt;/p&gt;&lt;p&gt;使用步骤：&lt;/p&gt;&lt;p&gt;1、将样式文件添加到项目中，并将生成操作设置为&amp;#8220;内容&amp;#8221;。&lt;/p&gt;&lt;p&gt;2、对需要应用主题的元素设置附件属性。&lt;/p&gt;&lt;p&gt;示例代码：&lt;/p&gt;&lt;div style="border-bottom: #ccc 1px solid; border-left: #ccc 1px solid; padding-bottom: 3px; background-color: #eee; padding-left: 6px; padding-right: 6px; font-family: courier new, arial; max-height: 300px; overflow: auto; border-top: #ccc 1px solid; border-right: #ccc 1px solid; padding-top: 3px"&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;UserControl&lt;/span&gt; &lt;br/&gt;    &lt;span style="color: #ff0000"&gt;x&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;Class&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"ThemeSample.MainPage"&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #ff0000"&gt;xmlns&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;/span&gt; &lt;br/&gt;    &lt;span style="color: #ff0000"&gt;xmlns&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;x&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"http://schemas.microsoft.com/winfx/2006/xaml"&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #ff0000"&gt;xmlns&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;Theming&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"clr-namespace:System.Windows.Controls.Theming;assembly=System.Windows.Controls.Theming.Toolkit"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;        &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: #ff0000"&gt;x&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"LayoutRoot"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Width&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"160"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Margin&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"100"&lt;/span&gt;  &lt;br/&gt;                    &lt;span style="color: #ff0000"&gt;Theming&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;ImplicitStyleManager&lt;/span&gt;.&lt;span style="color: #ff0000"&gt;ApplyMode&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Auto"&lt;/span&gt; &lt;br/&gt;                    &lt;span style="color: #ff0000"&gt;Theming&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;ImplicitStyleManager&lt;/span&gt;.&lt;span style="color: #ff0000"&gt;ResourceDictionaryUri&lt;/span&gt;= &lt;span style="color: #0000ff"&gt;"Themes/TwilightBlue.xaml"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;            &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Button&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Content&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Button"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Margin&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"10"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #0000ff"&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: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;TextBox&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Text&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"TextBox"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Margin&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"10"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;TextBox&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;        &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: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;UserControl&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;ApplyMode属性有三个可选值: None， OneTime和Auto。   &lt;br /&gt;None: 不使用样式   &lt;br /&gt;OneTime: 在页面加载后接受一次指定的样式   &lt;br /&gt;Auto: 在运行时动态添加的控件也将会使用指定样式&lt;/p&gt;&lt;p&gt;效果预览：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/chinadhf/WindowsLiveWriter/Silverlight3_FBA1/image_4.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/chinadhf/WindowsLiveWriter/Silverlight3_FBA1/image_thumb_1.png" width="313" height="184" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;三、使用CSharp代码动态改变主题&lt;/p&gt;&lt;p&gt;该方式是第二种方式的CSharp实现，同样不需要相应主题的程序集而只需相应主题的样式文件。为方便演示，示例用户控件中添加了一个ComboBox用来动态改变主题。&lt;/p&gt;&lt;p&gt;示例代码（XAML）：&lt;/p&gt;&lt;div style="border-bottom: #ccc 1px solid; border-left: #ccc 1px solid; padding-bottom: 3px; background-color: #eee; padding-left: 6px; padding-right: 6px; font-family: courier new, arial; max-height: 300px; overflow: auto; border-top: #ccc 1px solid; border-right: #ccc 1px solid; padding-top: 3px"&gt;  &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;UserControl&lt;/span&gt; &lt;br/&gt;    &lt;span style="color: #ff0000"&gt;x&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;Class&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"ThemeSample.MainPage"&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #ff0000"&gt;xmlns&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"http://schemas.microsoft.com/winfx/2006/xaml/presentation"&lt;/span&gt; &lt;br/&gt;    &lt;span style="color: #ff0000"&gt;xmlns&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;x&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"http://schemas.microsoft.com/winfx/2006/xaml"&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #ff0000"&gt;xmlns&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;sys&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"clr-namespace:System;assembly=mscorlib"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;        &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: #ff0000"&gt;x&lt;/span&gt;:&lt;span style="color: #ff0000"&gt;Name&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"LayoutRoot"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Width&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"160"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Margin&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"100"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;            &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;Button&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Content&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"Button"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Margin&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"10"&lt;/span&gt; &lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #0000ff"&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: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000"&gt;TextBox&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Text&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"TextBox"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Margin&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"10"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;TextBox&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;            &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: #ff0000"&gt;SelectionChanged&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"ComboBox_SelectionChanged"&lt;/span&gt; &lt;span style="color: #ff0000"&gt;Margin&lt;/span&gt;=&lt;span style="color: #0000ff"&gt;"10"&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;                &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #c71585"&gt;sys&lt;/span&gt;:&lt;span style="color: #800000"&gt;String&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;ShinyRed&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #c71585"&gt;sys&lt;/span&gt;:&lt;span style="color: #800000"&gt;String&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;                &lt;span style="color: #0000ff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #c71585"&gt;sys&lt;/span&gt;:&lt;span style="color: #800000"&gt;String&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;TwilightBlue&lt;span style="color: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #c71585"&gt;sys&lt;/span&gt;:&lt;span style="color: #800000"&gt;String&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;br/&gt;            &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: #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: #0000ff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #800000"&gt;UserControl&lt;/span&gt;&lt;span style="color: #0000ff"&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;示例代码（cs）：&lt;/p&gt;&lt;div style="border-bottom: #ccc 1px solid; border-left: #ccc 1px solid; padding-bottom: 3px; background-color: #eee; padding-left: 6px; padding-right: 6px; font-family: courier new, arial; max-height: 300px; overflow: auto; border-top: #ccc 1px solid; border-right: #ccc 1px solid; padding-top: 3px"&gt;  &lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Windows;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Windows.Controls;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;using&lt;/span&gt; System.Windows.Controls.Theming;&lt;br/&gt;&lt;br/&gt;&lt;span style="color: #0000ff"&gt;namespace&lt;/span&gt; ThemeSample&lt;br/&gt;{&lt;br/&gt;    &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; partial &lt;span style="color: #0000ff"&gt;class&lt;/span&gt; MainPage : UserControl&lt;br/&gt;    {&lt;br/&gt;        &lt;span style="color: #0000ff"&gt;public&lt;/span&gt; MainPage()&lt;br/&gt;        {&lt;br/&gt;            InitializeComponent();&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;span style="color: #0000ff"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff"&gt;void&lt;/span&gt; ComboBox_SelectionChanged(&lt;span style="color: #0000ff"&gt;object&lt;/span&gt; sender, SelectionChangedEventArgs e)&lt;br/&gt;        {&lt;br/&gt;            &lt;span style="color: #0000ff"&gt;string&lt;/span&gt; themeName = (sender &lt;span style="color: #0000ff"&gt;as&lt;/span&gt; ComboBox).SelectedItem &lt;span style="color: #0000ff"&gt;as&lt;/span&gt; &lt;span style="color: #0000ff"&gt;string&lt;/span&gt;;&lt;br/&gt;            &lt;span style="color: #0000ff"&gt;if&lt;/span&gt; (&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;.IsNullOrEmpty(themeName)) &lt;span style="color: #0000ff"&gt;return&lt;/span&gt;;&lt;br/&gt;&lt;br/&gt;            Uri uri = &lt;span style="color: #0000ff"&gt;new&lt;/span&gt; Uri(&lt;span style="color: #0000ff"&gt;string&lt;/span&gt;.Format("&lt;span style="color: #8b0000"&gt;Themes/{0}.xaml&lt;/span&gt;", themeName), UriKind.Relative);&lt;br/&gt;&lt;br/&gt;            ImplicitStyleManager.SetResourceDictionaryUri(LayoutRoot, uri);&lt;br/&gt;            ImplicitStyleManager.SetApplyMode(LayoutRoot, ImplicitStylesApplyMode.Auto);&lt;br/&gt;        }&lt;br/&gt;    }&lt;br/&gt;}&lt;/div&gt;&lt;br /&gt;&lt;p&gt;效果预览：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/chinadhf/WindowsLiveWriter/Silverlight3_FBA1/image_6.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/chinadhf/WindowsLiveWriter/Silverlight3_FBA1/image_thumb_2.png" width="294" height="188" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;Silverlight主题存在的缺陷：&lt;/p&gt;&lt;p&gt;ToolKit中提供的主题已经能基本满足一般项目中使用主题的要求，但也存在以下缺陷：&lt;/p&gt;&lt;p&gt;1、通过将主题应用到容器控件上或将容器控件放在主题控件的内容中的方式，可以将主题自动应用到控件的所有子元素，但无法将主题直接应用到所有页面或用户控件中（当然可以将页面或用户控件作为子元素出现）。&lt;/p&gt;&lt;p&gt;2、更糟的是：ChildWindow咋办？&lt;/p&gt;&lt;p&gt;在页面或用户控件中应用的主题不能自动应用到打开的子窗口中，虽然我们可以对子窗口应用主题，但应用主题后的子窗口还是会留下很不协调的边框，如下图：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/chinadhf/WindowsLiveWriter/Silverlight3_FBA1/image_8.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/chinadhf/WindowsLiveWriter/Silverlight3_FBA1/image_thumb_3.png" width="336" height="222" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;p&gt;看来要实现对ChildWindow应用主题，还是要靠我们自己写样式和模板，这无疑给应用主题带来了一些困难。同样存在的好消息是，Silverlight 4中，主题已经可以应用到ChildWindow了，下图是一个Window 7风格的ChildWindow：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/chinadhf/WindowsLiveWriter/Silverlight3_FBA1/image_10.png" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/chinadhf/WindowsLiveWriter/Silverlight3_FBA1/image_thumb_4.png" width="435" height="325" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;以上介绍了如何在Silverlight中使用ToolKit提供的默认主题，&amp;nbsp;如果想了解自定义主题，请阅读《&lt;a title="Silverlight自定义主题" href="http://www.cnblogs.com/chinadhf/archive/2010/06/08/1754224.html" target="_blank"&gt;Silverlight自定义主题&lt;/a&gt;》。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/chinadhf/aggbug/1753419.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/chinadhf/archive/2010/06/07/1753419.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/chinadhf/archive/2010/05/04/1727367.html</id><title type="text">[Silverlight]Selector类到底有没有SelectedValue属性？</title><summary type="text">无论MSDN文档、Visual Studio 2008的对象浏览器、Reflector都证明Selector是没有SelectedValue属性的，但一次调试程序时的偶然发现使我不得不质疑这个问题。</summary><published>2010-05-04T09:18:00Z</published><updated>2010-05-04T09:18:00Z</updated><author><name>同一片海</name><uri>http://www.cnblogs.com/chinadhf/</uri></author><link rel="alternate" href="http://www.cnblogs.com/chinadhf/archive/2010/05/04/1727367.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/chinadhf/archive/2010/05/04/1727367.html"/><content type="text">无论MSDN文档、Visual Studio 2008的对象浏览器、Reflector都证明Selector是没有SelectedValue属性的，但一次调试程序时的偶然发现使我不得不质疑这个问题。</content></entry><entry><id>http://www.cnblogs.com/chinadhf/archive/2010/04/29/1724388.html</id><title type="text">WCF安全之ASP.NET兼容模式</title><summary type="text">本文是利用ASP.NET兼容模式实现WCF安全的一个完整示例，其中用到了ASP.NET的Forms身份验证及Membership，并启用了角色管理。</summary><published>2010-04-29T11:09:00Z</published><updated>2010-04-29T11:09:00Z</updated><author><name>同一片海</name><uri>http://www.cnblogs.com/chinadhf/</uri></author><link rel="alternate" href="http://www.cnblogs.com/chinadhf/archive/2010/04/29/1724388.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/chinadhf/archive/2010/04/29/1724388.html"/><content type="text">本文是利用ASP.NET兼容模式实现WCF安全的一个完整示例，其中用到了ASP.NET的Forms身份验证及Membership，并启用了角色管理。</content></entry><entry><id>http://www.cnblogs.com/chinadhf/archive/2010/04/28/1723203.html</id><title type="text">WCF安全之customBinding</title><summary type="text">本文是关于WCF安全的一个完整示例</summary><published>2010-04-28T10:48:00Z</published><updated>2010-04-28T10:48:00Z</updated><author><name>同一片海</name><uri>http://www.cnblogs.com/chinadhf/</uri></author><link rel="alternate" href="http://www.cnblogs.com/chinadhf/archive/2010/04/28/1723203.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/chinadhf/archive/2010/04/28/1723203.html"/><content type="text">本文是关于WCF安全的一个完整示例</content></entry><entry><id>http://www.cnblogs.com/chinadhf/archive/2010/04/27/1722321.html</id><title type="text">[Silverlight]AutoCompleteBox控件的一个Bug？</title><summary type="text">我是轻易不说微软的代码有Bug的，因为往往在说了以后发现其实是自己错了。不过这次真的找不出自己哪儿错了，就大胆说一次吧。</summary><published>2010-04-27T11:04:00Z</published><updated>2010-04-27T11:04:00Z</updated><author><name>同一片海</name><uri>http://www.cnblogs.com/chinadhf/</uri></author><link rel="alternate" href="http://www.cnblogs.com/chinadhf/archive/2010/04/27/1722321.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/chinadhf/archive/2010/04/27/1722321.html"/><content type="text">我是轻易不说微软的代码有Bug的，因为往往在说了以后发现其实是自己错了。不过这次真的找不出自己哪儿错了，就大胆说一次吧。</content></entry><entry><id>http://www.cnblogs.com/chinadhf/archive/2010/04/27/1722284.html</id><title type="text">[Silverlight]一个简单的GroupBox控件</title><summary type="text">Silverlight没有提供GroupBox控件，自己动手写了一个。 Generic.xaml文件： GroupBox.cs文件： 使用示例代码： 示例效果图：2010.04.28 补充： 如果使用Silverlight ToolKit，GroupBox类还可以直接从Silverlight ToolKit类库中的HeaderedContentControl类继承。改为从HeaderedCo...</summary><published>2010-04-27T10:08:00Z</published><updated>2010-04-27T10:08:00Z</updated><author><name>同一片海</name><uri>http://www.cnblogs.com/chinadhf/</uri></author><link rel="alternate" href="http://www.cnblogs.com/chinadhf/archive/2010/04/27/1722284.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/chinadhf/archive/2010/04/27/1722284.html"/><content type="text">Silverlight没有提供GroupBox控件，自己动手写了一个。 Generic.xaml文件： GroupBox.cs文件： 使用示例代码： 示例效果图：2010.04.28 补充： 如果使用Silverlight ToolKit，GroupBox类还可以直接从Silverlight ToolKit类库中的HeaderedContentControl类继承。改为从HeaderedCo...</content></entry></feed>
