<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_程兴亮</title><subtitle type="text"/><id>http://feed.cnblogs.com/blog/u/72006/rss</id><updated>2012-05-28T01:52:02Z</updated><author><name>程兴亮</name><uri>http://www.cnblogs.com/chengxingliang/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/chengxingliang/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/72006/rss"/><entry><id>http://www.cnblogs.com/chengxingliang/archive/2012/05/24/2515100.html</id><title type="text">Silverlight实用窍门系列：67.Silverlight下的Socket通讯</title><summary type="text">在Silverlight中进行通讯，只能使用4502-4534之间的端口进行数据传输，另外Silverlight客户端会自动向943端口的服务器端发送一个“”的语句请求，然后服务器端943端口回发以下文件以许可Socket通讯。A.现在我们首先来看服务器端的代码，主要分为策略响应步骤和服务响应步骤。策略步骤一：启动监听943端口是否有需要安全策略文件请求策略步骤二：如果客户端请求是,则将安全策略文件作为bytes发送给客户端服务步骤一：启动服务器端，监听4525端口，是否有Socket对话请求服务步骤二：如果有客户端请求的连接，则发送消息告知客户端</summary><published>2012-05-24T03:17:00Z</published><updated>2012-05-24T03:17:00Z</updated><author><name>程兴亮</name><uri>http://www.cnblogs.com/chengxingliang/</uri></author><link rel="alternate" href="http://www.cnblogs.com/chengxingliang/archive/2012/05/24/2515100.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/chengxingliang/archive/2012/05/24/2515100.html"/><content type="html">&lt;p&gt;在Silverlight中进行通讯，只能使用4502-4534之间的端口进行数据传输，另外Silverlight客户端会自动向943端口的服务器端发送一个&amp;ldquo;&amp;lt;policy-file-request/&amp;gt;&amp;rdquo;的语句请求，然后服务器端943端口回发以下文件以许可Socket通讯。&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&amp;lt;?xml version=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;1.0&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; encoding=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;utf-8&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; ?&amp;gt;&lt;br/&gt;&amp;lt;access-policy&amp;gt;&lt;br/&gt;  &amp;lt;cross-domain-access&amp;gt;&lt;br/&gt;    &amp;lt;policy&amp;gt;&lt;br/&gt;      &amp;lt;allow-&lt;span style="color: #0000ff;"&gt;from&lt;/span&gt;&amp;gt;&lt;br/&gt;        &amp;lt;domain uri=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;*&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;/&amp;gt;&lt;br/&gt;      &amp;lt;/allow-&lt;span style="color: #0000ff;"&gt;from&lt;/span&gt;&amp;gt;&lt;br/&gt;      &amp;lt;grant-to&amp;gt;&lt;br/&gt;        &amp;lt;socket-resource port=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;4502-4534&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; protocol=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;tcp&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;/&amp;gt;&lt;br/&gt;      &amp;lt;/grant-to&amp;gt;&lt;br/&gt;    &amp;lt;/policy&amp;gt;&lt;br/&gt;  &amp;lt;/cross-domain-access&amp;gt;&lt;br/&gt;&amp;lt;/access-policy&amp;gt;&lt;/div&gt;&lt;p&gt;A.现在我们首先来看服务器端的代码，主要分为策略响应步骤和服务响应步骤。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;策略步骤一&lt;/strong&gt;：启动监听943端口是否有需要安全策略文件请求&lt;/p&gt;&lt;p&gt;&lt;strong&gt;策略步骤二&lt;/strong&gt;：如果客户端请求是&amp;lt;policy-file-request/&amp;gt;,则将安全策略文件作为bytes发送给客户端&lt;/p&gt;&lt;p&gt;&lt;strong&gt;服务步骤一&lt;/strong&gt;：启动服务器端，监听4525端口，是否有Socket对话请求&lt;/p&gt;&lt;p&gt;&lt;strong&gt;服务步骤二&lt;/strong&gt;：如果有客户端请求的连接，则发送消息告知客户端&lt;/p&gt;&lt;p&gt;代码如下：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;    &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; Program&lt;br/&gt;    {&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; Main(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt;[] args)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;策略步骤一：启动监听943端口是否有需要安全策略文件请求&lt;/span&gt;&lt;br/&gt;            Thread access = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Thread(&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; ThreadStart(accessThread));&lt;br/&gt;            access.Start();&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;服务步骤一：启动服务器端，监听4525端口，是否有Socket对话请求&lt;/span&gt;&lt;br/&gt;            Thread server = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Thread(&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; ThreadStart(ServerThread));&lt;br/&gt;            server.Start();&lt;br/&gt;        }&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;策略请求监听&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; accessThread()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;获取943端口监听的Socket服务端&lt;/span&gt;&lt;br/&gt;            Socket socket = GetSocketServer(&lt;span style="color: #800080;"&gt;943&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;while&lt;/span&gt; (&lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;            {&lt;br/&gt;                Socket new_access &lt;/span&gt;=&lt;span style="color: #000000;"&gt; socket.Accept();&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; clientPolicyString = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;&amp;lt;policy-file-request/&amp;gt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;byte&lt;/span&gt;[] requestbytes = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;byte&lt;/span&gt;&lt;span style="color: #000000;"&gt;[clientPolicyString.Length];&lt;br/&gt;                new_access.Receive(requestbytes);&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; requeststring = System.Text.Encoding.UTF8.GetString(requestbytes, &lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;, requestbytes.Length);&lt;br/&gt;&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (requeststring ==&lt;span style="color: #000000;"&gt; clientPolicyString)&lt;br/&gt;                {&lt;br/&gt;                    &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;策略步骤二：如果客户端请求是&amp;lt;policy-file-request/&amp;gt;,则将安全策略文件作为bytes发送给客户端&lt;/span&gt;&lt;br/&gt;                    &lt;span style="color: #0000ff;"&gt;byte&lt;/span&gt;[] accessbytes =&lt;span style="color: #000000;"&gt; GetPolicyToClient();&lt;br/&gt;                    new_access.Send(accessbytes, accessbytes.Length, SocketFlags.None);&lt;br/&gt;                    new_access.Close();&lt;br/&gt;                }&lt;br/&gt;                Thread.Sleep(&lt;/span&gt;&lt;span style="color: #800080;"&gt;100&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            }&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; ServerThread()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;获取4525端口监听的Socket服务端&lt;/span&gt;&lt;br/&gt;            Socket socket = GetSocketServer(&lt;span style="color: #800080;"&gt;4525&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;while&lt;/span&gt; (&lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br/&gt;            {&lt;br/&gt;                Socket _socket &lt;/span&gt;=&lt;span style="color: #000000;"&gt; socket.Accept();&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;服务步骤二：如果有客户端请求的连接，则发送消息告知客户端&lt;/span&gt;&lt;br/&gt;                &lt;span style="color: #0000ff;"&gt;byte&lt;/span&gt;[] b2 = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;byte&lt;/span&gt;[&lt;span style="color: #800080;"&gt;1024&lt;/span&gt;&lt;span style="color: #000000;"&gt;];&lt;br/&gt;                _socket.Receive(b2);&lt;br/&gt;                Console.WriteLine(Encoding.UTF8.GetString(b2).Replace(&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;\0&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, &lt;span style="color: #800000;"&gt;""&lt;/span&gt;&lt;span style="color: #000000;"&gt;));&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; recString = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;我已经收到消息了&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;                _socket.Send(Encoding.UTF8.GetBytes(recString));&lt;br/&gt;                _socket.Close();&lt;br/&gt;                Thread.Sleep(&lt;/span&gt;&lt;span style="color: #800080;"&gt;100&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            }&lt;br/&gt;        }&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;根据端口建立Socket服务器端&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; Socket GetSocketServer(&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; serverPort)&lt;br/&gt;        {&lt;br/&gt;            Socket socket &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);&lt;br/&gt;            socket.Bind(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; IPEndPoint(IPAddress.Any, serverPort));&lt;br/&gt;            socket.Listen(&lt;/span&gt;&lt;span style="color: #800080;"&gt;40&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; socket;&lt;br/&gt;        }&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;获取安全策略文件的byte[]&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;static&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;byte&lt;/span&gt;&lt;span style="color: #000000;"&gt;[] GetPolicyToClient()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; path = Environment.CurrentDirectory.Replace(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;\\bin\\Debug&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;,&lt;span style="color: #800000;"&gt;""&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            FileStream fs &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; FileStream(path+ &lt;span style="color: #800000;"&gt;@"&lt;/span&gt;&lt;span style="color: #800000;"&gt;\clientaccesspolicy.xml&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;, FileMode.Open);&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; length = (&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt;)fs.Length;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;byte&lt;/span&gt;[] bytes = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;byte&lt;/span&gt;&lt;span style="color: #000000;"&gt;[length];&lt;br/&gt;            fs.Read(bytes, &lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;, length);&lt;br/&gt;            fs.Close();&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; bytes;&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;    }&lt;/span&gt;&lt;/div&gt;&lt;p&gt;B.其次我们来看客户端操作，分为以下几个步骤：&lt;/p&gt;&lt;p&gt;&lt;strong&gt;客户端步骤一&lt;/strong&gt;：发起服务器连接请求。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;客户端步骤二&lt;/strong&gt;：连接服务器成功，将需要发送的数据放入缓冲区中，然后异步向服务器发送消息请求&lt;/p&gt;&lt;p&gt;&lt;strong&gt;客户端步骤三&lt;/strong&gt;：消息发送成功，此时设置一个新的缓冲区实例，并且发起异步接收服务器返回的消息&lt;/p&gt;&lt;p&gt;&lt;strong&gt;客户端步骤四&lt;/strong&gt;：获取到服务器返回的消息，关闭Socket　&lt;/p&gt;&lt;p&gt;客户端cs代码如下：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;partial&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; MainPage : UserControl&lt;br/&gt;    {&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; MainPage()&lt;br/&gt;        {&lt;br/&gt;            InitializeComponent();&lt;br/&gt;        }&lt;br/&gt;        System.Net.Sockets.Socket socket;&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; button1_Click(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt;&lt;span style="color: #000000;"&gt; sender, RoutedEventArgs e)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;byte&lt;/span&gt;[] userbytes = Encoding.UTF8.GetBytes(&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;.tbInput.Text);&lt;br/&gt;            socket &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; System.Net.Sockets.Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);&lt;br/&gt;            SocketAsyncEventArgs socketArgs &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; SocketAsyncEventArgs();&lt;br/&gt;            socketArgs.RemoteEndPoint &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; DnsEndPoint(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;127.0.0.1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, &lt;span style="color: #800080;"&gt;4525&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;将需要发送的内容转为byte[]，保存到UserToken属性中&lt;/span&gt;&lt;br/&gt;            socketArgs.UserToken =&lt;span style="color: #000000;"&gt; userbytes;&lt;br/&gt;            socketArgs.Completed &lt;/span&gt;+= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; EventHandler&amp;lt;SocketAsyncEventArgs&amp;gt;&lt;span style="color: #000000;"&gt;(socketArgs_Completed);&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;客户端步骤一：发起服务器连接请求。&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;            socket.ConnectAsync(socketArgs);&lt;br/&gt;        }&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;每发生一个Socket操作都讲激活此方法，操作包括（Connect/Send/Receive/None）&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; socketArgs_Completed(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt;&lt;span style="color: #000000;"&gt; sender, SocketAsyncEventArgs e)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (e.LastOperation ==&lt;span style="color: #000000;"&gt; SocketAsyncOperation.Connect)&lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;客户端步骤二：连接服务器成功，将需要发送的数据放入缓冲区中，然后异步向服务器发送消息请求&lt;/span&gt;&lt;br/&gt;                &lt;span style="color: #0000ff;"&gt;byte&lt;/span&gt;[] userbytes = (&lt;span style="color: #0000ff;"&gt;byte&lt;/span&gt;&lt;span style="color: #000000;"&gt;[])e.UserToken;&lt;br/&gt;                e.SetBuffer(userbytes, &lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;, userbytes.Length);&lt;br/&gt;                socket.SendAsync(e);&lt;br/&gt;            }&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (e.LastOperation ==&lt;span style="color: #000000;"&gt; SocketAsyncOperation.Send)&lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;客户端步骤三：消息发送成功，此时设置一个新的缓冲区实例，并且发起异步接收服务器返回的消息&lt;/span&gt;&lt;br/&gt;                &lt;span style="color: #0000ff;"&gt;byte&lt;/span&gt;[] userbytes = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;byte&lt;/span&gt;[&lt;span style="color: #800080;"&gt;1024&lt;/span&gt;&lt;span style="color: #000000;"&gt;];&lt;br/&gt;                e.SetBuffer(userbytes, &lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;, userbytes.Length);&lt;br/&gt;                socket.ReceiveAsync(e);&lt;br/&gt;            }&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;else&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (e.LastOperation ==&lt;span style="color: #000000;"&gt; SocketAsyncOperation.Receive)&lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;客户端步骤四：获取到服务器返回的消息，关闭Socket&lt;/span&gt;&lt;br/&gt;                &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; RecevieStr = Encoding.UTF8.GetString(e.Buffer, &lt;span style="color: #800080;"&gt;0&lt;/span&gt;, e.Buffer.Length).Replace(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;\0&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, &lt;span style="color: #800000;"&gt;""&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;因为是异步Socket请求，所以需要使用UI线程更新lbShowMessage的显示效果&lt;/span&gt;&lt;br/&gt;                &lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.lbShowMessage.Dispatcher.BeginInvoke(&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; DoThingDele(DoThing), RecevieStr);&lt;br/&gt;                socket.Close();&lt;br/&gt;            }&lt;br/&gt;        }&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;更新UI&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; DoThing(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; arg)&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.lbShowMessage.Content = &lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.lbShowMessage.Content + &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; +&lt;span style="color: #000000;"&gt; arg;&lt;br/&gt;        }&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;声明的一个DoThing方法委托&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;delegate&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; DoThingDele(&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; arg);&lt;br/&gt;    }&lt;/span&gt;&lt;/div&gt;&lt;p&gt;客户端Xaml前台代码如下：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;    &amp;lt;Grid x:Name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;LayoutRoot&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Background=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;White&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; ShowGridLines=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;True&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br/&gt;        &amp;lt;TextBox Height=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;23&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; HorizontalAlignment=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Left&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Margin=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;20,20,0,0&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;br/&gt;                 Name&lt;/span&gt;=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;tbInput&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; VerticalAlignment=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Top&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Width=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;243&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; /&amp;gt;&lt;br/&gt;        &amp;lt;Button Content=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;发 送&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Height=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;23&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; HorizontalAlignment=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Left&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;br/&gt;                Margin&lt;/span&gt;=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;279,20,0,0&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;button1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; VerticalAlignment=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Top&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;br/&gt;                Width&lt;/span&gt;=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;75&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Click=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;button1_Click&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; /&amp;gt;&lt;br/&gt;        &amp;lt;sdk:Label Height=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;28&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; HorizontalAlignment=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Left&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Margin=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;20,57,0,0&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;                   Name&lt;/span&gt;=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;lbShowMessage&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; VerticalAlignment=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Top&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Width=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;358&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; /&amp;gt;&lt;br/&gt;    &amp;lt;/Grid&amp;gt;&lt;/div&gt;&lt;p&gt;最后效果如下，如需源码请点击 &lt;a href="http://files.cnblogs.com/chengxingliang/SLSocket.zip"&gt;SLSocket.zip&lt;/a&gt; 下载，本文演示的是最简单通讯效果：&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/140041/2012052317265429.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/140041/2012052317263654.png" alt="" /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/chengxingliang/aggbug/2515100.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/chengxingliang/archive/2012/05/24/2515100.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/chengxingliang/archive/2012/05/21/2508928.html</id><title type="text">Visual Studio 2011 Beta新特性（一）：安装VS2011</title><summary type="text">VS2011 Beta已经发布好几月，今天我们来看看Vs2011的安装过程，在接下来的文章里会一步一步学习和发现VS2011的新特性。首先下载VS2011 Beta的安装文件如下： 你可以通过以下链接 VS2011 Beta进行下载，分为安装包和语言包。当然选择下载DVD ISO文件到本地速度更快捷： 我们解压ISO文件，然后点击“vs_premium.exe”文件（当然“旗舰版”和“个人版”略有不同），可以看到以下界面： 点击“I agree to the license....”并且Install,就会进入以下界面，对VS2011进行安装： 最后安装成功时显示如下： 安装中文...</summary><published>2012-05-21T03:21:00Z</published><updated>2012-05-21T03:21:00Z</updated><author><name>程兴亮</name><uri>http://www.cnblogs.com/chengxingliang/</uri></author><link rel="alternate" href="http://www.cnblogs.com/chengxingliang/archive/2012/05/21/2508928.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/chengxingliang/archive/2012/05/21/2508928.html"/><content type="html">&lt;p&gt;VS2011 Beta&amp;nbsp;已经发布好几月，今天我们来看看Vs2011的安装过程，在接下来的文章里会一步一步学习和发现VS2011的新特性。&lt;/p&gt;&lt;p&gt;首先下载VS2011 Beta的安装文件如下：&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/140041/2012051915261810.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;你可以通过以下链接 &lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200098133"&gt;VS2011 Beta&lt;/a&gt;&amp;nbsp;进行下载，分为安装包和语言包。当然选择下载DVD ISO文件到本地速度更快捷：&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/140041/2012051915392769.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;我们解压ISO文件，然后点击&amp;ldquo;vs_premium.exe&amp;rdquo;文件（当然&amp;ldquo;旗舰版&amp;rdquo;和&amp;ldquo;个人版&amp;rdquo;略有不同），可以看到以下界面：&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/140041/2012051916091445.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;点击&amp;ldquo;I agree to the license....&amp;rdquo;并且Install,就会进入以下界面，对VS2011进行安装：&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/140041/2012051916163168.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;最后安装成功时显示如下：&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/140041/2012051916454544.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;安装中文语言包，打开VS2011如下：&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/140041/2012051917023629.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;通过VS11的安装界面以及开发界面我们已经可以看出它估计是为Windows 8系统结合的。可以支持Metro风格界面的开发工作，下一节我们将开始正式了解VS2011的新特性。如需下载请点击 &lt;a href="http://www.microsoft.com/click/services/Redirect2.ashx?CR_CC=200098133"&gt;VS 2011 Beta&lt;/a&gt; 即可。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/chengxingliang/aggbug/2508928.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/chengxingliang/archive/2012/05/21/2508928.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/chengxingliang/archive/2012/05/08/2487115.html</id><title type="text">Silverlight实用窍门系列：66.Silverlight的数据模板DataTemplate(二)获取数据模板控件</title><summary type="text">在Silverlight中我们使用了数据模板，在很多时候也需要获取到数据模板上的控件，并且进行改变。本文使用的实例数据源和上节相同，如需了解请下载源码查看。当然在这里我们可以分为获取数据模板原始控件和获取数据模板当前行控件两种。一：获取数据模板原始控件。即通过“lbTempName.LoadContent()”的方式获取到原始数据模板的根元素（所有的DataTemplate数据模板都只有一个根元素，否则会报错）</summary><published>2012-05-08T03:26:00Z</published><updated>2012-05-08T03:26:00Z</updated><author><name>程兴亮</name><uri>http://www.cnblogs.com/chengxingliang/</uri></author><link rel="alternate" href="http://www.cnblogs.com/chengxingliang/archive/2012/05/08/2487115.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/chengxingliang/archive/2012/05/08/2487115.html"/><content type="html">&lt;p&gt;在Silverlight中我们使用了数据模板，在很多时候也需要获取到数据模板上的控件，并且进行改变。本文使用的实例数据源和上节相同，如需了解请下载源码查看。&lt;/p&gt;&lt;p&gt;当然在这里我们可以分为获取数据模板原始控件和获取数据模板当前行控件两种。&lt;/p&gt;&lt;p&gt;一：获取数据模板原始控件。即通过&amp;ldquo;lbTempName.LoadContent()&amp;rdquo;的方式获取到原始数据模板的根元素（所有的DataTemplate数据模板都只有一个根元素，否则会报错）&lt;/p&gt;&lt;p&gt;a.Xaml代码如下：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt; &amp;lt;ListBox x:Name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;lbResTemp&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; ItemsSource=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;{Binding ArticleList}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;br/&gt;                 HorizontalAlignment&lt;/span&gt;=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Left&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; VerticalAlignment=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Top&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;                  Height&lt;/span&gt;=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;400&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Margin=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;410 0 0 0 &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &amp;gt;&lt;br/&gt;            &amp;lt;ListBox.ItemTemplate&amp;gt;&lt;br/&gt;                &amp;lt;DataTemplate x:Name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;lbTempName&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br/&gt;                    &amp;lt;StackPanel Orientation=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Vertical&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &amp;gt;&lt;br/&gt;                        &amp;lt;StackPanel Orientation=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Horizontal&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Margin=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;5&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Width=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;380&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br/&gt;                            &amp;lt;TextBox Text=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;{Binding ArtContent}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Margin=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;5&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&amp;lt;/TextBox&amp;gt;&lt;br/&gt;                            &amp;lt;TextBlock Text=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;{Binding ArtName}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Margin=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;5 10 0 0&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&amp;lt;/TextBlock&amp;gt;&lt;br/&gt;                            &amp;lt;TextBlock Text=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;{Binding ArtUpdateTime}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Margin=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;5 10 0 0&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&amp;lt;/TextBlock&amp;gt;&lt;br/&gt;                            &amp;lt;TextBox Text=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;{Binding ArtAuthor}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Margin=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;5&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&amp;lt;/TextBox&amp;gt;&lt;br/&gt;                            &amp;lt;Button Content=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;展开&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Width=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;60&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Height=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;26&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; x:Name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;btnShow&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;br/&gt;                            HorizontalAlignment&lt;/span&gt;=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Right&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;  Click=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;btnShow_Click&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;/&amp;gt;&lt;br/&gt;                        &amp;lt;/StackPanel&amp;gt;&lt;br/&gt;                        &amp;lt;StackPanel Orientation=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Horizontal&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;  x:Name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;hidPanel&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &amp;gt;&lt;br/&gt;                            &amp;lt;TextBox Text=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;{Binding ArtContent}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Width=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;280&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&amp;lt;/TextBox&amp;gt;&lt;br/&gt;                        &amp;lt;/StackPanel&amp;gt;&lt;br/&gt;                    &amp;lt;/StackPanel&amp;gt;&lt;br/&gt;                &amp;lt;/DataTemplate&amp;gt;&lt;br/&gt;            &amp;lt;/ListBox.ItemTemplate&amp;gt;&lt;br/&gt;        &amp;lt;/ListBox&amp;gt;&lt;/div&gt;&lt;p&gt;b.Cs代码如下,使用注意事项在代码注释内标明：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;        &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; btnShow_Click(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt;&lt;span style="color: #000000;"&gt; sender, RoutedEventArgs e)&lt;br/&gt;        {&lt;br/&gt;            Button btn &lt;/span&gt;= sender &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt;&lt;span style="color: #000000;"&gt; Button;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;1.在这里必须是直接在ListBox.ItemTemplate下写的DataTemplate才能使用此LoadContent()方法&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;2.如果是使用ItemTemplate="{StaticResource lbTmp}"的方式则无法获取&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;3.此种方式获取到的是模板中初始情况的控件名单。而非当前列的控件名单&lt;/span&gt;&lt;br/&gt;            StackPanel panel = (StackPanel)&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;&lt;span style="color: #000000;"&gt;.lbTempName.LoadContent();&lt;br/&gt;            StackPanel hidPanel &lt;/span&gt;= VisualTreeHelper.GetChild(panel, &lt;span style="color: #800080;"&gt;1&lt;/span&gt;) &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt;&lt;span style="color: #000000;"&gt; StackPanel;&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;设置动作无法成功并且反馈到界面，因为它是获取到源模板，而非当前列控件&lt;/span&gt;&lt;br/&gt;            hidPanel.Visibility =&lt;span style="color: #000000;"&gt;&lt;br/&gt;                hidPanel.Visibility &lt;/span&gt;== Visibility.Visible ?&lt;span style="color: #000000;"&gt; Visibility.Collapsed : Visibility.Visible;&lt;br/&gt;        }&lt;/span&gt;&lt;/div&gt;&lt;p&gt;二：获取数据模板当前行控件。根据点击行按钮事件等方式，通过&amp;nbsp;VisualTreeHelper.GetParent(触发事件的按钮对象)的方式去获取当前行模板的根元素，然后通过该根元素使用&amp;nbsp;VisualTreeHelper.GetChild(spParent2, 1)或者&amp;nbsp;spParent1.FindName("tbName")的方式获取其他子控件。&lt;/p&gt;&lt;p&gt;a.Xaml代码如下：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;    &amp;lt;UserControl.Resources&amp;gt;&lt;br/&gt;        &amp;lt;local:ArtList x:Key=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;SourceList&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&amp;lt;/local:ArtList&amp;gt;&lt;br/&gt;        &amp;lt;DataTemplate x:Key=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;lbTmp&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br/&gt;            &amp;lt;StackPanel Orientation=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Vertical&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &amp;gt;&lt;br/&gt;                &amp;lt;StackPanel Orientation=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Horizontal&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Margin=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;5&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Width=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;380&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br/&gt;                    &amp;lt;TextBlock Text=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;{Binding ArtName}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Margin=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;5 10 0 0&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&amp;lt;/TextBlock&amp;gt;&lt;br/&gt;                    &amp;lt;TextBox Text=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;{Binding ArtContent}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;tbName&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Margin=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;5&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&amp;lt;/TextBox&amp;gt;&lt;br/&gt;                    &amp;lt;TextBox Text=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;{Binding ArtAuthor}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Margin=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;5&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&amp;lt;/TextBox&amp;gt;&lt;br/&gt;                    &amp;lt;TextBlock Text=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;{Binding ArtUpdateTime}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Margin=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;5 10 0 0&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&amp;lt;/TextBlock&amp;gt;&lt;br/&gt;                    &amp;lt;Button Content=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;展开&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Width=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;60&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Height=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;26&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; x:Name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;btnShow&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;br/&gt;                            HorizontalAlignment&lt;/span&gt;=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Right&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;  Click=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Button_Click&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; /&amp;gt;&lt;br/&gt;                &amp;lt;/StackPanel&amp;gt;&lt;br/&gt;                &amp;lt;StackPanel Orientation=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Horizontal&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;  Visibility=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Collapsed&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br/&gt;                    &amp;lt;TextBox Text=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;{Binding ArtContent}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Width=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;280&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&amp;lt;/TextBox&amp;gt;&lt;br/&gt;                &amp;lt;/StackPanel&amp;gt;&lt;br/&gt;            &amp;lt;/StackPanel&amp;gt;&lt;br/&gt;        &amp;lt;/DataTemplate&amp;gt;&lt;br/&gt;    &amp;lt;/UserControl.Resources&amp;gt;&lt;br/&gt;    &amp;lt;Grid x:Name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;LayoutRoot&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Background=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;White&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; DataContext=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;{StaticResource SourceList}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br/&gt;        &amp;lt;ListBox x:Name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;lbRes&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; ItemsSource=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;{Binding ArticleList}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;br/&gt;                 ItemTemplate&lt;/span&gt;=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;{StaticResource lbTmp}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Margin=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;0 0 0 0 &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;                 HorizontalAlignment&lt;/span&gt;=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Left&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; VerticalAlignment=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Top&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;                  Height&lt;/span&gt;=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;400&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &amp;gt;&lt;br/&gt;        &amp;lt;/ListBox&amp;gt;&lt;br/&gt;    &amp;lt;/Grid&amp;gt;&lt;/div&gt;&lt;p&gt;b.Cs代码如下：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;        &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; Button_Click(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt;&lt;span style="color: #000000;"&gt; sender, RoutedEventArgs e)&lt;br/&gt;        {&lt;br/&gt;            Button btn&lt;/span&gt;=sender &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt;&lt;span style="color: #000000;"&gt; Button;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;获取父级StackPanel&lt;/span&gt;&lt;br/&gt;            StackPanel spParent1 = VisualTreeHelper.GetParent(btn) &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt;&lt;span style="color: #000000;"&gt; StackPanel;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;通过名字找到当前Item列的tbName元素&lt;/span&gt;&lt;br/&gt;            TextBox tb = spParent1.FindName(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;tbName&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;) &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt;&lt;span style="color: #000000;"&gt; TextBox;&lt;br/&gt;            tb.Text &lt;/span&gt;= tb.Text + &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;点击&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;获得祖父级StackPanel&lt;/span&gt;&lt;br/&gt;            StackPanel spParent2 = VisualTreeHelper.GetParent(spParent1) &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt;&lt;span style="color: #000000;"&gt; StackPanel;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;获取到其子元素&lt;/span&gt;&lt;br/&gt;            StackPanel hidPanel = VisualTreeHelper.GetChild(spParent2, &lt;span style="color: #800080;"&gt;1&lt;/span&gt;) &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt;&lt;span style="color: #000000;"&gt; StackPanel;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;设置动作&lt;/span&gt;&lt;br/&gt;            btn.Content = btn.Content.ToString() == &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;展开&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; ? &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;隐藏&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; : &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;展开&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;            hidPanel.Visibility &lt;/span&gt;=&lt;span style="color: #000000;"&gt;&lt;br/&gt;                hidPanel.Visibility &lt;/span&gt;== Visibility.Visible ?&lt;span style="color: #000000;"&gt; Visibility.Collapsed : Visibility.Visible;&lt;br/&gt;        }&lt;/span&gt;&lt;/div&gt;&lt;p&gt;如需源码请点击&amp;nbsp;&lt;a href="http://files.cnblogs.com/chengxingliang/SLDataTemplate2.zip"&gt;SLDataTemplate2.zip&lt;/a&gt; 下载。下面是效果图：&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/140041/2012050518261891.png" alt="" /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/chengxingliang/aggbug/2487115.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/chengxingliang/archive/2012/05/08/2487115.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/chengxingliang/archive/2012/05/07/2482892.html</id><title type="text">Silverlight实用窍门系列：65.Silverlight的数据模板DataTemplate(一)使用数据模板</title><summary type="text">在Silverlight中，我们的数据列表显示控件有ListBox、DataGrid等。对于显示出来的数据条目样式外观的管理是通过DataTemplate（数据模板）来完成的。本节将从DataTemplate基础说起如何使用DataTemplate。</summary><published>2012-05-07T03:25:00Z</published><updated>2012-05-07T03:25:00Z</updated><author><name>程兴亮</name><uri>http://www.cnblogs.com/chengxingliang/</uri></author><link rel="alternate" href="http://www.cnblogs.com/chengxingliang/archive/2012/05/07/2482892.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/chengxingliang/archive/2012/05/07/2482892.html"/><content type="html">&lt;p&gt;在Silverlight中，我们的数据列表显示控件有ListBox、DataGrid等。对于显示出来的数据条目样式外观的管理是通过DataTemplate（数据模板）来完成的。本节将从DataTemplate基础说起如何使用DataTemplate。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;首先我们准备数据源如下:&lt;/strong&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;    &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 文章Model&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; ArticleModel&lt;br/&gt;    {&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; ArtName { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;&lt;span style="color: #000000;"&gt;; }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; ArtContent { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;&lt;span style="color: #000000;"&gt;; }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; ArtAuthor { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;&lt;span style="color: #000000;"&gt;; }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; ArtUpdateTime { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;&lt;span style="color: #000000;"&gt;; }&lt;br/&gt;    }&lt;br/&gt;&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 文章列表&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; ArtList&lt;br/&gt;    {&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; ArtList()&lt;br/&gt;        {&lt;br/&gt;            ArticleList &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; List&amp;lt;ArticleModel&amp;gt;&lt;span style="color: #000000;"&gt;();&lt;br/&gt;            ArticleList.Add(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; ArticleModel() { ArtName = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;成都&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, ArtContent = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;天府之国&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;, &lt;br/&gt;                ArtAuthor &lt;/span&gt;= &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;leung&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, ArtUpdateTime = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;2012-04-05 11:12:36&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt; });&lt;br/&gt;            ArticleList.Add(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; ArticleModel() { ArtName = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;上海&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, ArtContent = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;翡翠明珠&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;, &lt;br/&gt;                ArtAuthor &lt;/span&gt;= &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;aiLen&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, ArtUpdateTime = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;2012-05-16 21:32:10&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt; });&lt;br/&gt;            ArticleList.Add(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; ArticleModel() { ArtName = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;广州&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, ArtContent = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;沿海城市&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;br/&gt;                ArtAuthor &lt;/span&gt;= &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;minghe&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, ArtUpdateTime = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;2012-01-17 05:01:45&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt; });&lt;br/&gt;            ArticleList.Add(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; ArticleModel() { ArtName = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;西藏&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, ArtContent = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;高原城市&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;, &lt;br/&gt;                ArtAuthor &lt;/span&gt;= &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;weifeng&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, ArtUpdateTime = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;2012-03-22 09:30:14&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt; });&lt;br/&gt;        }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 文章列表属性&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;br/&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; List&amp;lt;ArticleModel&amp;gt; ArticleList { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;&lt;span style="color: #000000;"&gt;; }&lt;br/&gt;    }&lt;/span&gt;&lt;/div&gt;&lt;p&gt;如何在前台控件中绑定数据源呢？如同上一节所述，设置一个静态资源&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;    //&lt;span style="background-color: #339966;"&gt;引用域名空间&lt;/span&gt; &lt;br /&gt;   xmlns:local=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;clr-namespace:SLDataTemplate&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br/&gt;//&lt;span style="background-color: #339966;"&gt;初始化为静态资源&lt;/span&gt;&lt;br /&gt;      &amp;lt;UserControl.Resources&amp;gt;&lt;br/&gt;        &amp;lt;local:ArtList x:Key=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;SourceList&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&amp;lt;/local:ArtList&amp;gt;&lt;br/&gt;      &amp;lt;/UserControl.Resources&amp;gt;&lt;br/&gt;   //&lt;span style="background-color: #339966;"&gt;设置为数据上下文&lt;/span&gt;&lt;br /&gt;    &amp;lt;Grid x:Name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;LayoutRoot&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Background=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;White&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; DataContext=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;{StaticResource SourceList}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br/&gt;　 //&lt;span style="background-color: #339966;"&gt;设置数据源绑定&lt;/span&gt;&lt;br /&gt;        &amp;lt;ListBox  x:Name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;lbArt&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; ItemsSource=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;{Binding ArticleList}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; /&amp;gt;&lt;br/&gt;    &amp;lt;/Grid&amp;gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;其次以ListBox为例，在本文中有三种方式：&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;一、在ListBox.ItemTemplate中直接添加DataTemplate。&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;        &amp;lt;ListBox  x:Name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;lbArt&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; ItemsSource=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;{Binding ArticleList}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;  Width=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;350&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;                  Height&lt;/span&gt;=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;300&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; HorizontalAlignment=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Left&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; VerticalAlignment=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Top&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &amp;gt;&lt;br/&gt;            &amp;lt;ListBox.ItemTemplate&amp;gt;&lt;br/&gt;                &amp;lt;DataTemplate&amp;gt;&lt;br/&gt;                    &amp;lt;StackPanel Orientation=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Horizontal&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br/&gt;                        &amp;lt;TextBlock Text=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;{Binding ArtName}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&amp;lt;/TextBlock&amp;gt;&lt;br/&gt;                        &amp;lt;TextBox Text=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;{Binding ArtContent}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&amp;lt;/TextBox&amp;gt;&lt;br/&gt;                        &amp;lt;TextBox Text=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;{Binding ArtAuthor}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&amp;lt;/TextBox&amp;gt;&lt;br/&gt;                        &amp;lt;TextBlock Text=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;{Binding ArtUpdateTime}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&amp;lt;/TextBlock&amp;gt;&lt;br/&gt;                    &amp;lt;/StackPanel&amp;gt;&lt;br/&gt;                &amp;lt;/DataTemplate&amp;gt;&lt;br/&gt;            &amp;lt;/ListBox.ItemTemplate&amp;gt;&lt;br/&gt;        &amp;lt;/ListBox&amp;gt;&lt;/div&gt;&lt;p&gt;二、将DataTemplate作为Resources，ListBox中属性&amp;nbsp;ItemTemplate="{StaticResource lbTmp}"引用。&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;    &amp;lt;UserControl.Resources&amp;gt;&lt;br/&gt;        &amp;lt;DataTemplate x:Key=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;lbTmp&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br/&gt;            &amp;lt;StackPanel Orientation=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Horizontal&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br/&gt;                &amp;lt;TextBlock Text=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;{Binding ArtName}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&amp;lt;/TextBlock&amp;gt;&lt;br/&gt;                &amp;lt;TextBox Text=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;{Binding ArtContent}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&amp;lt;/TextBox&amp;gt;&lt;br/&gt;                &amp;lt;TextBox Text=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;{Binding ArtAuthor}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&amp;lt;/TextBox&amp;gt;&lt;br/&gt;                &amp;lt;TextBlock Text=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;{Binding ArtUpdateTime}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&amp;lt;/TextBlock&amp;gt;&lt;br/&gt;            &amp;lt;/StackPanel&amp;gt;&lt;br/&gt;        &amp;lt;/DataTemplate&amp;gt;&lt;br/&gt;    &amp;lt;/UserControl.Resources&amp;gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;        &amp;lt;ListBox x:Name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;lbRes&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; ItemsSource=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;{Binding ArticleList}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;br/&gt;                 ItemTemplate&lt;/span&gt;=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;{StaticResource lbTmp}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Margin=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;370 0 0 0 &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;                 HorizontalAlignment&lt;/span&gt;=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Left&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; VerticalAlignment=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Top&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;                 Width&lt;/span&gt;=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;350&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Height=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;300&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &amp;gt;&lt;br/&gt;        &amp;lt;/ListBox&amp;gt;&lt;/div&gt;&lt;p&gt;三、将DataTemplate在后台代码编写，然后在后台代码中指定。&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt; 　 //&lt;span style="background-color: #339966;"&gt;前台代码&lt;/span&gt;&lt;br /&gt;       &amp;lt;ListBox x:Name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;lbCsRet&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Margin=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;0 370 0 0 &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; HorizontalAlignment=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Left&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;                 VerticalAlignment&lt;/span&gt;=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Top&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Width=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;350&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Height=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;300&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &amp;gt;&lt;br/&gt;        &amp;lt;/ListBox&amp;gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt; //&lt;span style="background-color: #339966;"&gt;后台代码&lt;br/&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; MainPage()&lt;br/&gt;        {&lt;br/&gt;            InitializeComponent();&lt;br/&gt;            DataTemplate dtemp &lt;/span&gt;=&lt;span style="color: #000000;"&gt; GetTemplate();&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.lbCsRet.ItemTemplate =&lt;span style="color: #000000;"&gt; dtemp;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.lbCsRet.ItemsSource = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; ArtList().ArticleList;&lt;br/&gt;        }&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;private&lt;/span&gt;&lt;span style="color: #000000;"&gt; DataTemplate GetTemplate()&lt;br/&gt;        {&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; xamlString = &lt;span style="color: #800000;"&gt;@"&lt;/span&gt;&lt;span style="color: #800000;"&gt;&amp;lt;DataTemplate       &lt;br/&gt;            xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""   &lt;br/&gt;            xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml""&amp;gt;&lt;br/&gt;                &amp;lt;StackPanel Orientation=""Horizontal""&amp;gt;&lt;br/&gt;                    &amp;lt;TextBlock Text=""{Binding ArtName}""&amp;gt;&amp;lt;/TextBlock&amp;gt;&lt;br/&gt;                    &amp;lt;TextBox Text=""{Binding ArtContent}""&amp;gt;&amp;lt;/TextBox&amp;gt;&lt;br/&gt;                    &amp;lt;TextBox Text=""{Binding ArtAuthor}""&amp;gt;&amp;lt;/TextBox&amp;gt;&lt;br/&gt;                    &amp;lt;TextBlock Text=""{Binding ArtUpdateTime}""&amp;gt;&amp;lt;/TextBlock&amp;gt;&lt;br/&gt;                &amp;lt;/StackPanel&amp;gt;   &lt;br/&gt;            &amp;lt;/DataTemplate&amp;gt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; (DataTemplate)XamlReader.Load(xamlString);&lt;br/&gt;        }&lt;/span&gt;&lt;/div&gt;&lt;p&gt;最后我们可以看看同样在DataGrid中使用DataTemplate。&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;        &amp;lt;sdk:DataGrid ItemsSource=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;{Binding ArticleList}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Margin=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;370 370 0 0 &lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;                      HorizontalAlignment&lt;/span&gt;=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Left&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; VerticalAlignment=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Top&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;br/&gt;                      Width&lt;/span&gt;=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;350&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Height=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;300&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; AutoGenerateColumns=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;False&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &amp;gt;&lt;br/&gt;            &amp;lt;sdk:DataGrid.Columns&amp;gt;&lt;br/&gt;                &amp;lt;sdk:DataGridTemplateColumn Header=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;列表&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; CellTemplate=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;{StaticResource lbTmp}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br/&gt;                &amp;lt;/sdk:DataGridTemplateColumn&amp;gt;&lt;br/&gt;            &amp;lt;/sdk:DataGrid.Columns&amp;gt;&lt;br/&gt;        &amp;lt;/sdk:DataGrid&amp;gt;&lt;/div&gt;&lt;p&gt;下面我们来看看运行效果，如需源码请点击&amp;nbsp;&lt;a href="http://files.cnblogs.com/chengxingliang/SLDataTemplate.zip"&gt;SLDataTemplate.zip&lt;/a&gt; 下载。&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/140041/2012050416134232.png" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/chengxingliang/aggbug/2482892.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/chengxingliang/archive/2012/05/07/2482892.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/chengxingliang/archive/2012/04/23/2464952.html</id><title type="text">Silverlight实用窍门系列：64.Silverlight中的DataContext和ItemsSource</title><summary type="text">在Silverlight中我们经常看到数据绑定源由DataContext或者ItemsSource指定，那么他们之间的区别有哪些呢？DataContext：从英文字母意思是数据上下文，在Silverlight中某个父级元素设置了DataContext，那么其子元素将可以继承并且使用DataContext中的属性。DataContext绑定的数据源可以是实体集合、实体、属性等。ItemsSource:其数据源通常是实体集合（一列数据），无法让其子元素继承使用。下面我们以一个实例主要讲解DataContext的用法，其中在父级元素Grid设置了一个DataContext属性绑定实体，该实体内部有一个属性为实体集合，此实体集合用于Grid的子元素ListBox的ItemsSource属性绑定</summary><published>2012-04-23T04:30:00Z</published><updated>2012-04-23T04:30:00Z</updated><author><name>程兴亮</name><uri>http://www.cnblogs.com/chengxingliang/</uri></author><link rel="alternate" href="http://www.cnblogs.com/chengxingliang/archive/2012/04/23/2464952.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/chengxingliang/archive/2012/04/23/2464952.html"/><content type="html">&lt;p&gt;在Silverlight中我们经常看到数据绑定源由DataContext或者ItemsSource指定，那么他们之间的区别有哪些呢？&lt;/p&gt;&lt;p&gt;&lt;strong&gt;DataContext&lt;/strong&gt;：从英文字母意思是数据上下文，在Silverlight中某个父级元素设置了DataContext，那么其子元素将可以继承并且使用DataContext中的属性。DataContext绑定的数据源可以是实体集合、实体、属性等。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;ItemsSource&lt;/strong&gt;:其数据源通常是实体集合（多列数据），无法让其子元素继承使用。&lt;/p&gt;&lt;p&gt;下面我们以一个实例主要讲解DataContext的用法，其中在父级元素Grid设置了一个DataContext属性绑定实体，该实体内部有一个属性为实体集合，此实体集合用于Grid的子元素ListBox的ItemsSource属性绑定。代码如下：&lt;/p&gt;&lt;p&gt;首先我们看两个实体，其中一个实体属性为List&amp;lt;&amp;gt;:&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; ClaModel&lt;br/&gt;    {&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; ClaModel()&lt;br/&gt;        {&lt;br/&gt;            ClaName &lt;/span&gt;= &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;五年级三班&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;            ClaInfo &lt;/span&gt;= &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;全校最好的班级，获得多项荣誉&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br/&gt;            StuList &lt;/span&gt;= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; List&amp;lt;StuModel&amp;gt;&lt;span style="color: #000000;"&gt;()&lt;br/&gt;            {&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; StuModel(){StuName=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;刘三&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, StuAge=&lt;span style="color: #800080;"&gt;15&lt;/span&gt;, StuInfo=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;他很勤奋&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;},&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; StuModel(){StuName=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;李四&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, StuAge=&lt;span style="color: #800080;"&gt;14&lt;/span&gt;, StuInfo=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;他很懒惰&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;},&lt;br/&gt;                &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; StuModel(){StuName=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;王五&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, StuAge=&lt;span style="color: #800080;"&gt;16&lt;/span&gt;, StuInfo=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;他很聪明&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;}&lt;br/&gt;            };&lt;br/&gt;        }&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; ClaName { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;&lt;span style="color: #000000;"&gt;; }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; ClaInfo { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;&lt;span style="color: #000000;"&gt;; }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; List&amp;lt;StuModel&amp;gt; StuList { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;&lt;span style="color: #000000;"&gt;; }&lt;br/&gt;    }&lt;br/&gt;&lt;br/&gt;    &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; StuModel&lt;br/&gt;    {&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; StuName { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;&lt;span style="color: #000000;"&gt;; }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; StuAge { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;&lt;span style="color: #000000;"&gt;; }&lt;br/&gt;&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; StuInfo { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;&lt;span style="color: #000000;"&gt;; }&lt;br/&gt;&lt;br/&gt;    }&lt;/span&gt;&lt;/div&gt;&lt;p&gt;其次我们来看Xaml代码绑定如下：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&amp;lt;UserControl x:Class=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;SLDataContext.MainPage&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;    xmlns&lt;/span&gt;=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;http://schemas.microsoft.com/winfx/2006/xaml/presentation&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;    xmlns:x&lt;/span&gt;=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;http://schemas.microsoft.com/winfx/2006/xaml&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;    xmlns:d&lt;/span&gt;=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;http://schemas.microsoft.com/expression/blend/2008&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;    xmlns:mc&lt;/span&gt;=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;http://schemas.openxmlformats.org/markup-compatibility/2006&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;    xmlns:local&lt;/span&gt;=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;clr-namespace:SLDataContext&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;    mc:Ignorable&lt;/span&gt;=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;d&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;    d:DesignHeight&lt;/span&gt;=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;300&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; d:DesignWidth=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;400&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br/&gt;    &amp;lt;!--第一种方式--&amp;gt;&lt;br/&gt;    &amp;lt;UserControl.Resources&amp;gt;&lt;br/&gt;        &amp;lt;local:ClaModel x:Key=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;ClaSource&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; /&amp;gt;&lt;br/&gt;    &amp;lt;/UserControl.Resources&amp;gt;&lt;br/&gt;    &amp;lt;Grid x:Name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;LayoutRoot&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Background=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;White&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; DataContext=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;{StaticResource ClaSource}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br/&gt;        &amp;lt;TextBlock FontWeight=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Bold&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Width=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;60&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Height=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;30&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Text=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;{Binding ClaName}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;br/&gt;                   VerticalAlignment&lt;/span&gt;=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Top&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; HorizontalAlignment=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Left&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;   /&amp;gt;&lt;br/&gt;        &amp;lt;TextBlock FontStyle=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Italic&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;  Width=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;160&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Height=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;30&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Text=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;{Binding ClaInfo}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;                   VerticalAlignment&lt;/span&gt;=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Top&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Margin=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;70 0 0 0&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; HorizontalAlignment=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Left&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;  /&amp;gt;&lt;br/&gt;        &amp;lt;ListBox Height=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;239&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; HorizontalAlignment=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Left&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;lbDetail&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br/&gt;                 VerticalAlignment&lt;/span&gt;=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Top&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Width=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;343&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; ItemsSource=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;{Binding StuList}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;br/&gt;                 SelectedValuePath&lt;/span&gt;=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;StuAge&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; DisplayMemberPath=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;StuName&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Margin=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;27,61,0,0&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; /&amp;gt;&lt;br/&gt;    &amp;lt;/Grid&amp;gt;&lt;br/&gt;&amp;lt;/UserControl&amp;gt;&lt;/div&gt;&lt;p&gt;最后我们看看另外一种后台绑定DataContext的方式。&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;partial&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt; MainPage : UserControl&lt;br/&gt;    {&lt;br/&gt;        &lt;/span&gt;&lt;span style="color: #0000ff;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; MainPage()&lt;br/&gt;        {&lt;br/&gt;            InitializeComponent();&lt;br/&gt;&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;第二种方式：也可以用后台代码绑定DataContext&lt;br/&gt;            &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;this.LayoutRoot.DataContext = new ClaModel();&lt;/span&gt;&lt;br/&gt;&lt;span style="color: #000000;"&gt;        }&lt;br/&gt;    }&lt;/span&gt;&lt;/div&gt;&lt;p&gt;如需源码请点击&amp;nbsp;&lt;a href="http://files.cnblogs.com/chengxingliang/SLDataContext.zip"&gt;SLDataContext.zip&lt;/a&gt; 下载 ，效果图如下：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;img src="http://pic002.cnblogs.com/images/2012/140041/2012042214302730.jpg" alt="" /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/chengxingliang/aggbug/2464952.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/chengxingliang/archive/2012/04/23/2464952.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/chengxingliang/archive/2012/04/16/2438438.html</id><title type="text">Silverlight实用窍门系列：63.Silverlight中的Command，自定义简单Command</title><summary type="text"> 在Silverlight中的MVVM模式下将前台页面和ViewModel界面交互分离开是通过本节所要讲述的Command实现的。我们自定义一个Command需要继承于ICommand接口并且实现这个接口。它有CanExecute()、Execute()方法和CanExecuteChanged事件组成。 CanExecute()：判断是否继续执行操作。 Execute()：执行操作的内容。 CanExecuteChanged：当出现影响是否应执行该命令的更改时发生。首先：自定义的一个btnCommand。</summary><published>2012-04-16T06:16:00Z</published><updated>2012-04-16T06:16:00Z</updated><author><name>程兴亮</name><uri>http://www.cnblogs.com/chengxingliang/</uri></author><link rel="alternate" href="http://www.cnblogs.com/chengxingliang/archive/2012/04/16/2438438.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/chengxingliang/archive/2012/04/16/2438438.html"/><content type="html">&lt;p&gt;在Silverlight中的MVVM模式下将前台页面和ViewModel界面交互分离开是通过本节所要讲述的Command实现的。我们自定义一个Command需要继承于ICommand接口并且实现这个接口。它有CanExecute()、Execute()方法和CanExecuteChanged事件组成。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &lt;strong&gt;CanExecute()：&lt;/strong&gt;判断是否继续执行操作。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &lt;strong&gt;Execute()：&lt;/strong&gt;执行操作的内容。&lt;/p&gt;&lt;p&gt;&amp;nbsp; &lt;strong&gt;CanExecuteChanged：&lt;/strong&gt;当出现影响是否应执行该命令的更改时发生。&lt;/p&gt;&lt;p&gt;首先：自定义的一个btnCommand。&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; btnCommand:ICommand&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt; canExe;&lt;br /&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 构造函数设置是否执行操作&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="canexe"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; btnCommand(&lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt; canexe)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.canExe = canexe; &lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 判断是否执行操作&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="parameter"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;bool&lt;/span&gt; CanExecute(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; parameter)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (canExe)&lt;br /&gt;            {&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;;               &lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 是否执行操作的变更发生时&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;event&lt;/span&gt; EventHandler CanExecuteChanged;&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 执行操作的内容，可以变为Action行为&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="parameter"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; Execute(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; parameter)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (parameter != &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;)&lt;br /&gt;            { MessageBox.Show(parameter.ToString()); }&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                MessageBox.Show(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;未设置CommandParameter&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;    }&lt;/div&gt;&lt;p&gt;其次：定义一个ViewModel，并且在构造函数中初始化两个Command属性。&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; BtnViewModel&lt;br /&gt;    {&lt;br /&gt;        &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;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; ICommand BtnCommand { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;; }&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; ICommand BtnCommandTrue { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;; }&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; BtnViewModel()&lt;br /&gt;        {&lt;br /&gt;            &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;            BtnCommand = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; btnCommand(&lt;span style="color: #0000ff;"&gt;false&lt;/span&gt;);&lt;br /&gt;            BtnCommandTrue = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; btnCommand(&lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;);&lt;br /&gt;        }&lt;br /&gt;    }&lt;/div&gt;&lt;p&gt;再次将ViewModel初始化为页面数据源&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;    &amp;lt;UserControl.DataContext&amp;gt;&lt;br /&gt;        &amp;lt;local:BtnViewModel /&amp;gt;&lt;br /&gt;    &amp;lt;/UserControl.DataContext&amp;gt;&lt;/div&gt;&lt;p&gt;最后：前台的两个按钮绑定Command&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;    &amp;lt;Grid x:Name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;LayoutRoot&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Background=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;White&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br /&gt;        &amp;lt;Button Content=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;第一个&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Height=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;23&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; HorizontalAlignment=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Left&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;                Command=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;{Binding BtnCommand}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; CommandParameter=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;第一个Command&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;                Margin=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;94,80,0,0&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;button1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; VerticalAlignment=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Top&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Width=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;75&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; /&amp;gt;&lt;br /&gt;        &amp;lt;Button Command=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;{Binding BtnCommandTrue}&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; CommandParameter=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;第二个Command&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &lt;br /&gt;                Content=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;第二个&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Height=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;23&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; HorizontalAlignment=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Left&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Margin=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;94,140,0,0&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;                Name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;button2&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; VerticalAlignment=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Top&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Width=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;75&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; /&amp;gt;&lt;br /&gt;    &amp;lt;/Grid&amp;gt;&lt;/div&gt;&lt;p&gt;如需源码请点击&amp;nbsp;&lt;a href="http://files.cnblogs.com/chengxingliang/SLICommand.zip"&gt;SLICommand.zip&lt;/a&gt; 下载，下面是效果图。有一个按钮CanExecute，有一个不能点击。&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/140041/2012040610461717.jpg" alt="" /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/chengxingliang/aggbug/2438438.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/chengxingliang/archive/2012/04/16/2438438.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/chengxingliang/archive/2012/04/09/2438435.html</id><title type="text">Silverlight实用窍门系列：62.Silverlight中的Action动作TargetedTriggerAction、TriggerAction</title><summary type="text"> 在Silverlight中的Action是指动作的意思，在Trigger触发器触发的时候，执行Action动作。在我们自定义Action的时候可以定义两种Action分别是继承于TargetedTriggerAction和TriggerAction的。TriggerAction：继承于此的自定义Action动作的操作对象是关联采用此Action的对象。TargetedTriggerAction：继承于此的自定义Action动作的操作对象可以是其他对象，由TagetName指定的对象。      本文在前一篇文章的实例基础上增加了一个自定义的Action。继承于TriggerAction和TargetedTriggerAction都可以重写以下三个方法：OnAttached()、OnDetachi</summary><published>2012-04-09T02:36:00Z</published><updated>2012-04-09T02:36:00Z</updated><author><name>程兴亮</name><uri>http://www.cnblogs.com/chengxingliang/</uri></author><link rel="alternate" href="http://www.cnblogs.com/chengxingliang/archive/2012/04/09/2438435.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/chengxingliang/archive/2012/04/09/2438435.html"/><content type="html">&lt;p&gt;在Silverlight中的Action是指动作的意思，在Trigger触发器触发的时候，执行Action动作。在我们自定义Action的时候可以定义两种Action分别是继承于TargetedTriggerAction&amp;lt;T&amp;gt;和TriggerAction&amp;lt;T&amp;gt;的。&lt;/p&gt;&lt;p&gt;TriggerAction&amp;lt;T&amp;gt;：继承于此的自定义Action动作的操作对象是关联采用此Action的对象。&lt;/p&gt;&lt;p&gt;TargetedTriggerAction&amp;lt;T&amp;gt;：继承于此的自定义Action动作的操作对象可以是其他对象，由TagetName指定的对象。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 本文在前一篇文章的实例基础上增加了一个自定义的Action。继承于TriggerAction和TargetedTriggerAction都可以重写以下三个方法：OnAttached()、OnDetaching()、Invoke(object parameter)，其中TargetedTriggerAction还需要另外多重写一个OnTargetChanged(UIElement oldTarget, UIElement newTarget)方法，以便在设置了TargetName属性的时候能够将操作对象设置为指定的其他对象。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 继承于TriggerAction&amp;lt;T&amp;gt;的Action代码如下：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;    &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;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; InvokeAction : TriggerAction &amp;lt;UIElement&amp;gt;&lt;br /&gt;    {&lt;br /&gt;        &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;        &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; Invoke(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; parameter)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (ToInvoke != &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;)&lt;br /&gt;            {&lt;br /&gt;                ToInvoke(parameter, &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; RoutedEventArgs() { });&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;delegate&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; Handler(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; sender, RoutedEventArgs e);&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;event&lt;/span&gt; Handler ToInvoke;&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 装载对象&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; OnAttached()&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;base&lt;/span&gt;.OnAttached();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 卸载对象&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; OnDetaching()&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;base&lt;/span&gt;.OnDetaching();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;    }&lt;/div&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 继承于TargetedTriggerAction&amp;lt;T&amp;gt;的Action代码如下：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; InvokeTargetAction : TargetedTriggerAction&amp;lt;UIElement&amp;gt;&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; UIElement element;&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 装载对象&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; OnAttached()&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;base&lt;/span&gt;.OnAttached();&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (Target != &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;)&lt;br /&gt;            {&lt;br /&gt;                element = Target;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 卸载对象&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; OnDetaching()&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;base&lt;/span&gt;.OnDetaching();&lt;br /&gt;            element = &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;;&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 当此Action的TargetName属性赋值为某个按钮名称时出发此事件&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="oldTarget"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="newTarget"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; OnTargetChanged(UIElement oldTarget, UIElement newTarget)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;base&lt;/span&gt;.OnTargetChanged(oldTarget, newTarget);&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (element == &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;)&lt;br /&gt;            {&lt;br /&gt;                element = newTarget;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 当触发器触发时运行此函数&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="parameter"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; Invoke(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; parameter)&lt;br /&gt;        {&lt;br /&gt;            ButtonBase btn = element &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; ButtonBase;&lt;br /&gt;            AutomationPeer peer = FrameworkElementAutomationPeer.CreatePeerForElement(btn); ;&lt;br /&gt;            IInvokeProvider invokeProvider = peer.GetPattern(PatternInterface.Invoke) &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; IInvokeProvider;&lt;br /&gt;            invokeProvider.Invoke();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;    }&lt;/div&gt;&lt;p&gt;MainPage.xaml代码如下，使用两种Action：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&amp;lt;UserControl x:Class=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;SLTrigger.MainPage&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;    xmlns=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;http://schemas.microsoft.com/winfx/2006/xaml/presentation&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;    xmlns:x=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;http://schemas.microsoft.com/winfx/2006/xaml&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;    xmlns:d=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;http://schemas.microsoft.com/expression/blend/2008&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;    xmlns:mc=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;http://schemas.openxmlformats.org/markup-compatibility/2006&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;    xmlns:i=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;    xmlns:me=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;clr-namespace:SLTrigger&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;    mc:Ignorable=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;d&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;    d:DesignHeight=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;300&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; d:DesignWidth=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;800&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;Grid x:Name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;LayoutRoot&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Background=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;White&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br /&gt;        &amp;lt;Image Width=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;300&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Source=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;/SLTrigger;component/chun.jpg&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Margin=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;20,43,480,68&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br /&gt;            &amp;lt;i:Interaction.Triggers&amp;gt;&lt;br /&gt;                &amp;lt;me:PaggerTrigger&amp;gt;&lt;br /&gt;                    &amp;lt;me:InvokeAction ToInvoke=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;PageClickHandler&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; /&amp;gt;&lt;br /&gt;                &amp;lt;/me:PaggerTrigger&amp;gt;&lt;br /&gt;            &amp;lt;/i:Interaction.Triggers&amp;gt;&lt;br /&gt;        &amp;lt;/Image&amp;gt;&lt;br /&gt;         &amp;lt;Image Margin=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;395,43,105,68&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Source=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;/SLTrigger;component/chun.jpg&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Width=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;300&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br /&gt;            &amp;lt;i:Interaction.Triggers&amp;gt;&lt;br /&gt;                &amp;lt;i:EventTrigger EventName=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;MouseLeftButtonDown&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br /&gt;                    &amp;lt;me:InvokeTargetAction TargetName=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;btnShow&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; /&amp;gt;&lt;br /&gt;                &amp;lt;/i:EventTrigger&amp;gt;&lt;br /&gt;            &amp;lt;/i:Interaction.Triggers&amp;gt;&lt;br /&gt;        &amp;lt;/Image&amp;gt;&lt;br /&gt;        &amp;lt;Button Content=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Button&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Height=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;23&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &lt;br /&gt;                 Name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;btnShow&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; VerticalAlignment=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Top&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Width=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;75&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Click=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;button1_Click&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; /&amp;gt;&lt;br /&gt;    &amp;lt;/Grid&amp;gt;&lt;br /&gt;&amp;lt;/UserControl&amp;gt;&lt;/div&gt;&lt;p&gt;MainPage.xaml.cs代码如下：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;partial&lt;/span&gt; &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;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;        &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; PageClickHandler(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; sender, RoutedEventArgs e)&lt;br /&gt;        {&lt;br /&gt;            PageEnum pageEnum = (PageEnum)sender;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; info = &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;.Empty;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (pageEnum == PageEnum.PageLeft)&lt;br /&gt;            {&lt;br /&gt;                info = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;向左翻页&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;else&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (pageEnum == PageEnum.PageRight)&lt;br /&gt;            {&lt;br /&gt;                info = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;向右翻页&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;            }&lt;br /&gt;            MessageBox.Show(info);&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; button1_Click(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; sender, RoutedEventArgs e)&lt;br /&gt;        {&lt;br /&gt;            MessageBox.Show(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;TargetedTriggerAction行为触发的事件&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;);&lt;br /&gt;        }&lt;br /&gt;    }&lt;/div&gt;&lt;p&gt;当然还有一个自定义的Trigger代码没有贴出来，您可以点击&amp;nbsp;&lt;a href="http://files.cnblogs.com/chengxingliang/SLAction.zip"&gt;SLAction.zip&lt;/a&gt; 下载源文件，效果图如下：&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/140041/2012032910261233.png" alt="" /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/chengxingliang/aggbug/2438435.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/chengxingliang/archive/2012/04/09/2438435.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/chengxingliang/archive/2012/03/26/2415588.html</id><title type="text">Silverlight实用窍门系列：61.Silverlight中的Trigger触发器,自定义翻页触发器</title><summary type="text">   在Silverlight应用程序和客户进行交互工作的时候可以不用写后台代码而通过Xaml代码来实现，在本文我们将学习了解Trigger触发器。    Trigger触发器：引发动作的因素，比如鼠标点击、键盘输入、鼠标双击、键盘Enter键敲入、鼠标中键滚动等等，这些都是触发动作交互的条件。    Trigger分为以下两类：一、系统定义好的如EventTrigger、PropertyTrigger等。二、用户自定义的Trigger，例如在SL4中是没有鼠标双击事件的，这时我们可以新建一个DoubleClickTrriger，通过定时器检测当点击页面同一个地方的时间间隔小于300毫秒的都属于鼠标触发动作。 EventTrigger主要是指定触发的事件名称，如下例是在MouseLeftButto</summary><published>2012-03-26T03:13:00Z</published><updated>2012-03-26T03:13:00Z</updated><author><name>程兴亮</name><uri>http://www.cnblogs.com/chengxingliang/</uri></author><link rel="alternate" href="http://www.cnblogs.com/chengxingliang/archive/2012/03/26/2415588.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/chengxingliang/archive/2012/03/26/2415588.html"/><content type="html">&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在Silverlight应用程序和客户进行交互工作的时候可以不用写后台代码而通过Xaml代码来实现，在本文我们将学习了解Trigger触发器。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Trigger触发器：引发动作的因素，比如鼠标点击、键盘输入、鼠标双击、键盘Enter键敲入、鼠标中键滚动等等，这些都是触发动作交互的条件。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Trigger分为以下两类：&lt;/p&gt;&lt;p&gt;一、系统定义好的如EventTrigger、PropertyTrigger等。&lt;/p&gt;&lt;p&gt;二、用户自定义的Trigger，例如在SL4中是没有鼠标双击事件的，这时我们可以新建一个DoubleClickTrriger，通过定时器检测当点击页面同一个地方的时间间隔小于300毫秒的都属于鼠标触发动作。&lt;/p&gt;&lt;p&gt; &lt;strong&gt;EventTrigger&lt;/strong&gt;主要是指定触发的事件名称，如下例是在MouseLeftButtonUp的时候触发ChangePropertyAction动作，在本例中不作详细讲述：&amp;nbsp;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;        &amp;lt;Rectangle Width=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;300&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br /&gt;            &amp;lt;i:Interaction.Triggers&amp;gt;&lt;br /&gt;                &amp;lt;i:EventTrigger EventName=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;MouseLeftButtonUp&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br /&gt;                    &amp;lt;ei:ChangePropertyAction /&amp;gt;&lt;br /&gt;                &amp;lt;/i:EventTrigger&amp;gt;&lt;br /&gt;            &amp;lt;/i:Interaction.Triggers&amp;gt;&lt;br /&gt;        &amp;lt;/Rectangle&amp;gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 自定义Trigger:本实例中我们自定义一个翻页的触发器，它通过在指定对象上按下按钮，然后滑动鼠标向左或者向右移动然后放开鼠标，自动检测是向左翻页还是向右翻页。自定义Trigger和Behavior一样只需要重写OnAttached和OnDetaching方法即可，自定义Trigger需要继承于TriggerBase&amp;lt;T&amp;gt;类。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 自定义Trigger代码如下：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; PaggerTrigger : TriggerBase&amp;lt;UIElement&amp;gt;&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; Point _downPosition;&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; OnAttached()&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;base&lt;/span&gt;.OnAttached();&lt;br /&gt;            &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;            AssociatedObject.MouseLeftButtonDown += &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; MouseButtonEventHandler(AssociatedObject_MouseLeftButtonDown);&lt;br /&gt;            AssociatedObject.MouseLeftButtonUp += &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; MouseButtonEventHandler(AssociatedObject_MouseLeftButtonUp);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; AssociatedObject_MouseLeftButtonDown(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; sender, MouseButtonEventArgs e)&lt;br /&gt;        {&lt;br /&gt;            UIElement element = sender &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; UIElement;&lt;br /&gt;            _downPosition = e.GetPosition(element);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; AssociatedObject_MouseLeftButtonUp(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; sender, MouseButtonEventArgs e)&lt;br /&gt;        {&lt;br /&gt;            UIElement element = sender &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; UIElement;&lt;br /&gt;            Point position = e.GetPosition(element);&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;double&lt;/span&gt; X_Content =  position.X - _downPosition.X ;&lt;br /&gt;            PageEnum pageEnum = PageEnum.PageLeft;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (Math.Abs(X_Content) &amp;gt; &lt;span style="color: #800080;"&gt;10&lt;/span&gt;)&lt;br /&gt;            {&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (X_Content &amp;gt; &lt;span style="color: #800080;"&gt;0&lt;/span&gt;)&lt;br /&gt;                {&lt;br /&gt;                    pageEnum = PageEnum.PageRight;&lt;br /&gt;                }&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;br /&gt;                {&lt;br /&gt;                    pageEnum = PageEnum.PageLeft;&lt;br /&gt;                }&lt;br /&gt;                InvokeActions(pageEnum);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; OnDetaching()&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;base&lt;/span&gt;.OnDetaching();&lt;br /&gt;            &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;            AssociatedObject.MouseLeftButtonDown -= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; MouseButtonEventHandler(AssociatedObject_MouseLeftButtonDown);&lt;br /&gt;            AssociatedObject.MouseLeftButtonUp -= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; MouseButtonEventHandler(AssociatedObject_MouseLeftButtonUp);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 指示翻页方向枚举&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;enum&lt;/span&gt; PageEnum&lt;br /&gt;    { &lt;br /&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 左翻页&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;        PageLeft,&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 右翻页&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;        PageRight&lt;br /&gt;    }&lt;/div&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 自定义的Action代码如下，注意Action是触发器被触发时执行的动作，下一篇会详细讲述，其代码如下：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;    &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;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; InvokeAction : TargetedTriggerAction&amp;lt;UIElement&amp;gt;&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; Invoke(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; parameter)&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (ToInvoke != &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;)&lt;br /&gt;            {&lt;br /&gt;                ToInvoke(parameter, &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; RoutedEventArgs() { });&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;delegate&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; Handler(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; sender, RoutedEventArgs e);&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;event&lt;/span&gt; Handler ToInvoke;&lt;br /&gt;&lt;br /&gt;    }&lt;/div&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在主页面调用的时候其Xaml代码如下：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&amp;lt;UserControl x:Class=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;SLTrigger.MainPage&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;    xmlns=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;http://schemas.microsoft.com/winfx/2006/xaml/presentation&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;    xmlns:x=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;http://schemas.microsoft.com/winfx/2006/xaml&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;    xmlns:d=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;http://schemas.microsoft.com/expression/blend/2008&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;    xmlns:mc=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;http://schemas.openxmlformats.org/markup-compatibility/2006&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;    xmlns:i=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;          xmlns:ei=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;clr-namespace:Microsoft.Expression.Interactivity.Core;assembly=Microsoft.Expression.Interactions&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;  &lt;br /&gt;             xmlns:me=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;clr-namespace:SLTrigger&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;    mc:Ignorable=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;d&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;    d:DesignHeight=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;300&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; d:DesignWidth=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;400&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;Grid x:Name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;LayoutRoot&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Background=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;White&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br /&gt;        &amp;lt;Image Width=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;300&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Source=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;/SLTrigger;component/chun.jpg&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Margin=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;50,127,50,-16&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br /&gt;            &amp;lt;i:Interaction.Triggers&amp;gt;&lt;br /&gt;                &amp;lt;me:PaggerTrigger&amp;gt;&lt;br /&gt;                    &amp;lt;me:InvokeAction ToInvoke=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;PageClickHandler&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; /&amp;gt;&lt;br /&gt;                &amp;lt;/me:PaggerTrigger&amp;gt;&lt;br /&gt;            &amp;lt;/i:Interaction.Triggers&amp;gt;&lt;br /&gt;        &amp;lt;/Image&amp;gt;&lt;br /&gt;    &amp;lt;/Grid&amp;gt;&lt;br /&gt;&amp;lt;/UserControl&amp;gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在Xaml.cs代码如下：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;partial&lt;/span&gt; &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;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;        &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; PageClickHandler(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; sender, RoutedEventArgs e)&lt;br /&gt;        {&lt;br /&gt;            PageEnum pageEnum = (PageEnum)sender;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; info = &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt;.Empty;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (pageEnum == PageEnum.PageLeft)&lt;br /&gt;            {&lt;br /&gt;                info = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;向左翻页&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;else&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (pageEnum == PageEnum.PageRight)&lt;br /&gt;            {&lt;br /&gt;                info = &lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;向右翻页&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;;&lt;br /&gt;            }&lt;br /&gt;            MessageBox.Show(info);&lt;br /&gt;        }&lt;br /&gt;    }&lt;/div&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 最后如需源码请点击&amp;nbsp;&lt;a href="http://files.cnblogs.com/chengxingliang/SLTrigger.zip"&gt;SLTrigger.zip&lt;/a&gt; 下载，需要引用System.Windows.Interactivity.dll&amp;nbsp;。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/chengxingliang/aggbug/2415588.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/chengxingliang/archive/2012/03/26/2415588.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/chengxingliang/archive/2012/03/19/2403331.html</id><title type="text">Silverlight实用窍门系列：60.Silverlight中自定义Behavior，实现图片动画渐变Behavior</title><summary type="text">      在Silverlight中我们需要了解Behavior行为，它可以将一些常用的行为、效果等封装起来，在我们需要调用的时候可以非常方便的调用，主要需要引用System.Windows.Interactivity.DLL。它的运行本质是为采用了Behavior行为的源对象自动加载处理事件。    我们自定义一个Behavior行为需要做到以下三点方可成功。    一、继承于System.Windows.Interactivity.DLL中的Behavior类，其中的T可以更换为Image、TextBox、Label等所有的元素对象甚至是DependencyObject，表示这个自定义的Behavior可以作用于哪种控件。    二、重写覆盖OnAttached方法，在这个方法中需要为添加Behavior</summary><published>2012-03-19T03:14:00Z</published><updated>2012-03-19T03:14:00Z</updated><author><name>程兴亮</name><uri>http://www.cnblogs.com/chengxingliang/</uri></author><link rel="alternate" href="http://www.cnblogs.com/chengxingliang/archive/2012/03/19/2403331.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/chengxingliang/archive/2012/03/19/2403331.html"/><content type="html">&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在Silverlight中我们需要了解Behavior行为，它可以将一些常用的行为、效果等封装起来，在需要调用的时候可以非常方便的调用，主要需要引用&lt;span style="color: #ff0000;"&gt;&lt;strong&gt;System.Windows.Interactivity.DLL。&lt;/strong&gt;&lt;span style="color: #000000;"&gt;它的运行本质是为采用了Behavior行为的源对象自动加载处理事件。&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 我们自定义一个Behavior行为需要做到以下三点方可成功。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;一、继承于System.Windows.Interactivity.DLL中的Behavior&amp;lt;T&amp;gt;类，其中的T可以更换为Image、TextBox、Label等所有的元素对象甚至是DependencyObject，表示这个自定义的Behavior可以作用于哪种控件。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;二、重写覆盖OnAttached方法，在这个方法中需要为添加Behavior行为的对象附加事件.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;三、重写覆盖OnDetaching方法，在这个方法中需要为删除Behavior行为的对象卸载事件.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 定义好Behavior行为之后，在界面上需要如以下方式使用：&lt;/span&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;&amp;lt;UserControl x:Class=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;SLBehavior.MainPage&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;    xmlns=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;http://schemas.microsoft.com/winfx/2006/xaml/presentation&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;    xmlns:x=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;http://schemas.microsoft.com/winfx/2006/xaml&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;    xmlns:d=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;http://schemas.microsoft.com/expression/blend/2008&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;    xmlns:mc=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;http://schemas.openxmlformats.org/markup-compatibility/2006&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;   &lt;span style="color: #0000ff;"&gt; &lt;strong&gt;xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;             xmlns:me=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;clr-namespace:SLBehavior&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;    mc:Ignorable=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;d&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;    d:DesignHeight=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;300&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; d:DesignWidth=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;800&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;Grid x:Name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;LayoutRoot&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Background=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;White&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br /&gt;        &amp;lt;Image  Source=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;lv.jpg&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; HorizontalAlignment=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Left&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Width=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;352&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Height=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;318&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;br /&gt;                Margin=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;27,27,0,0&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;  x:Name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;img1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &amp;gt;&lt;br /&gt;           &lt;span style="color: #0000ff;"&gt;&lt;strong&gt; &amp;lt;i:Interaction.Behaviors&amp;gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt; &amp;lt;me:OpacityBehavior From="1" To="0.7"/&amp;gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt; &amp;lt;/i:Interaction.Behaviors&amp;gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;        &amp;lt;/Image&amp;gt;&lt;br /&gt;&lt;br /&gt;        &amp;lt;Image  Source=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;hua.jpg&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; HorizontalAlignment=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Left&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Width=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;221&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Margin=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;402,0,0,-33&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;  x:Name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;img2&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &amp;gt;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;&lt;strong&gt;&amp;lt;i:Interaction.Behaviors&amp;gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt; &amp;lt;me:OpacityBehavior From="1" To="0.5"/&amp;gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt; &amp;lt;/i:Interaction.Behaviors&amp;gt;&lt;/strong&gt;&lt;/span&gt;&lt;br /&gt;        &amp;lt;/Image&amp;gt;&lt;br /&gt;    &amp;lt;/Grid&amp;gt;&lt;br /&gt;&amp;lt;/UserControl&amp;gt;&lt;/div&gt;&lt;p&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 自定义的Behavior行为代码如下，是一个控制图片透明度的动画效果。&lt;/span&gt;&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; OpacityBehavior : Behavior&amp;lt;Image&amp;gt;&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;double&lt;/span&gt; _From = &lt;span style="color: #800080;"&gt;1&lt;/span&gt;;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;double&lt;/span&gt; _To = &lt;span style="color: #800080;"&gt;0.6&lt;/span&gt;;&lt;br /&gt;        &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;装载DoubleAnimation动画的故事板&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;        Storyboard sboard = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Storyboard();&lt;br /&gt;        DoubleAnimation danima = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; DoubleAnimation();&lt;br /&gt;        Image img;&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 透明度从多少开始&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;double&lt;/span&gt; From&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt; { &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; _From; }&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt; { _From = value; }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 透明度到多少结尾&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;double&lt;/span&gt; To&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt; { &lt;span style="color: #0000ff;"&gt;return&lt;/span&gt; _To; }&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt; { _To = value; }&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 在为某个对象添加Behavior行为时附加事件&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; OnAttached()&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;base&lt;/span&gt;.OnAttached();&lt;br /&gt;&lt;br /&gt;            &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;            img = &lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.AssociatedObject &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; Image;&lt;br /&gt;            sboard.Children.Clear();&lt;br /&gt;            img.Resources.Clear();&lt;br /&gt;            &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;设置img控件的透明度的Double类型数字变化&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            danima.SetValue(Storyboard.TargetNameProperty, img.Name);&lt;br /&gt;            danima.SetValue(Storyboard.TargetPropertyProperty, &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; PropertyPath(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;UIElement.Opacity&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;));&lt;br /&gt;            danima.Duration = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Duration(&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; TimeSpan(&lt;span style="color: #800080;"&gt;0&lt;/span&gt;, &lt;span style="color: #800080;"&gt;0&lt;/span&gt;, &lt;span style="color: #800080;"&gt;1&lt;/span&gt;));&lt;br /&gt;            sboard.Children.Add(danima);&lt;br /&gt;            img.Resources.Add(&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;Storyboard&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;, sboard);&lt;br /&gt;&lt;br /&gt;            &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;            img.MouseEnter += &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; MouseEventHandler(img_MouseEnter);&lt;br /&gt;            img.MouseLeave += &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; MouseEventHandler(img_MouseLeave);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 在为某个对象移除Behavior行为时注销事件&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;override&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; OnDetaching()&lt;br /&gt;        {&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;base&lt;/span&gt;.OnDetaching();&lt;br /&gt;            img.MouseEnter -= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; MouseEventHandler(img_MouseEnter);&lt;br /&gt;            img.MouseLeave -= &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; MouseEventHandler(img_MouseLeave);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; img_MouseEnter(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; sender, MouseEventArgs e)&lt;br /&gt;        {&lt;br /&gt;            danima.From = &lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.From;&lt;br /&gt;            danima.To = &lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.To;&lt;br /&gt;            sboard.Begin();&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; img_MouseLeave(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; sender, MouseEventArgs e)&lt;br /&gt;        {&lt;br /&gt;            danima.From = &lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.To;&lt;br /&gt;            danima.To = &lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.From;&lt;br /&gt;            sboard.Begin();&lt;br /&gt;        }&lt;br /&gt;    }&lt;/div&gt;&lt;p&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 注意：A: &amp;nbsp;AssociatedObject属性是使用此行为的对象。B:在行为中定义的属性可以在Xaml界面直接赋值。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 最后，如需源码请点击 &lt;a href="http://files.cnblogs.com/chengxingliang/SLBehavior.zip"&gt;SLBehavior.zip&lt;/a&gt; 下载，效果如下两张图所示：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/140041/2012031716265890.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/140041/2012031716264478.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/chengxingliang/aggbug/2403331.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/chengxingliang/archive/2012/03/19/2403331.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/chengxingliang/archive/2012/03/13/2390404.html</id><title type="text">Silverlight实用窍门系列：59.多个中心点联动多线的可拖动控件扩展为拓扑图</title><summary type="text">   在本系列的第17篇文章中“Silverlight实用窍门系列：17.中心点联动多线的可拖动控件（绘制工程图、拓扑图基础） ”，制作了基本的中心联动图标。有园友对此图的扩展不是很清晰，所以在本文中我们将在那基础上做一个简易的拓扑图。    首先：将黄球为中心，绿球为圆圈的节点封装为一个子控件，然后提供一个接口，该接口可以接收一条外部的直线，并且这个接口可以指定在子控件中外部链接线的起始点还是结束点。</summary><published>2012-03-13T06:09:00Z</published><updated>2012-03-13T06:09:00Z</updated><author><name>程兴亮</name><uri>http://www.cnblogs.com/chengxingliang/</uri></author><link rel="alternate" href="http://www.cnblogs.com/chengxingliang/archive/2012/03/13/2390404.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/chengxingliang/archive/2012/03/13/2390404.html"/><content type="html">&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在本系列的第17篇文章中&amp;ldquo;&lt;a class="titlelink" href="http://www.cnblogs.com/chengxingliang/archive/2011/03/02/1968832.html"&gt;Silverlight实用窍门系列：17.中心点联动多线的可拖动控件（绘制工程图、拓扑图基础）&lt;/a&gt;&amp;nbsp;&amp;rdquo;，制作了基本的中心联动图标。有园友对此图的扩展不是很清晰，所以在本文中我们将在那基础上做一个简易的拓扑图。&lt;/p&gt;&lt;p&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;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;partial&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; UCCircle : UserControl&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; UCCircle(&lt;span style="color: #0000ff;"&gt;double&lt;/span&gt; lineCount, &lt;span style="color: #0000ff;"&gt;double&lt;/span&gt; lineLenth, &lt;span style="color: #0000ff;"&gt;double&lt;/span&gt; centerX, &lt;span style="color: #0000ff;"&gt;double&lt;/span&gt; centerY)&lt;br /&gt;        {&lt;br /&gt;            InitializeComponent();&lt;br /&gt;            &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;让img1图片控件具有MouseDragElementBehavior行为，且为让此控件在拖动过程中执行dragBehavior_Dragging事件。&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            dragBehavior.Attach(&lt;span style="color: #0000ff;"&gt;this&lt;/span&gt;.img1);&lt;br /&gt;            dragBehavior.Dragging += &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; MouseEventHandler(dragBehavior_Dragging);&lt;br /&gt;            &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;设置img1可见，设置其初始位置。&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            img1.SetValue(Canvas.LeftProperty, centerX - &lt;span style="color: #800080;"&gt;22.0&lt;/span&gt;);&lt;br /&gt;            img1.SetValue(Canvas.TopProperty, centerY - &lt;span style="color: #800080;"&gt;22.0&lt;/span&gt;);&lt;br /&gt;            AddChirldren(lineCount, lineLenth, centerX, centerY);&lt;br /&gt;        }&lt;br /&gt;        MouseDragElementBehavior dragBehavior = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; MouseDragElementBehavior();&lt;br /&gt;        &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;        &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; List&amp;lt;ucLine&amp;gt; ucLineList = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; List&amp;lt;ucLine&amp;gt;();&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;private&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; AddChirldren(&lt;span style="color: #0000ff;"&gt;double&lt;/span&gt; lineCount, &lt;span style="color: #0000ff;"&gt;double&lt;/span&gt; lineLenth, &lt;span style="color: #0000ff;"&gt;double&lt;/span&gt; centerX, &lt;span style="color: #0000ff;"&gt;double&lt;/span&gt; centerY)&lt;br /&gt;        {&lt;br /&gt;            &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;            &lt;span style="color: #0000ff;"&gt;double&lt;/span&gt; angle = &lt;span style="color: #800080;"&gt;360.0&lt;/span&gt; / lineCount;&lt;br /&gt;            &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;            &lt;span style="color: #0000ff;"&gt;for&lt;/span&gt; (&lt;span style="color: #0000ff;"&gt;int&lt;/span&gt; i = &lt;span style="color: #800080;"&gt;0&lt;/span&gt;; i &amp;lt; lineCount; i++)&lt;br /&gt;            {&lt;br /&gt;                ucLine dline = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; ucLine();&lt;br /&gt;                &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;                dline.R = lineLenth;&lt;br /&gt;                &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;                dline.CenterX = centerX;&lt;br /&gt;                dline.CenterY = centerY;&lt;br /&gt;                XX = centerX;&lt;br /&gt;                YY = centerY;&lt;br /&gt;                &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;                dline.AngleAll = angle * (i);&lt;br /&gt;                CanvasDevice.Children.Add(dline);&lt;br /&gt;                &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;                ucLineList.Add(dline);&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 设置连接两个圈中心的线条&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; SetLinkLine(LinkLineModel lineModel)&lt;br /&gt;        {&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (lineModel.PointType == PoiType.StartPoint)&lt;br /&gt;            {&lt;br /&gt;                lineModel.LinkLine.X1 = XX;&lt;br /&gt;                lineModel.LinkLine.Y1 = YY;&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;br /&gt;            {&lt;br /&gt;                lineModel.LinkLine.X2 = XX;&lt;br /&gt;                lineModel.LinkLine.Y2 = YY;&lt;br /&gt;            }&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (LinkLineList == &lt;span style="color: #0000ff;"&gt;null&lt;/span&gt;)&lt;br /&gt;                LinkLineList = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; List&amp;lt;LinkLineModel&amp;gt;();&lt;br /&gt;            LinkLineList.Add(lineModel);&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 中心点连接线的列表&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; List&amp;lt;LinkLineModel&amp;gt; LinkLineList { &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;; &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;; }&lt;br /&gt;&lt;br /&gt;        &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;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;double&lt;/span&gt; XX { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;; }&lt;br /&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;double&lt;/span&gt; YY { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;; }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; img1被拖动的时候触发的事件&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="sender"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;param name="e"&amp;gt;&amp;lt;/param&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;void&lt;/span&gt; dragBehavior_Dragging(&lt;span style="color: #0000ff;"&gt;object&lt;/span&gt; sender, MouseEventArgs e)&lt;br /&gt;        {&lt;br /&gt;            MouseDragElementBehavior dragBehavior2 = sender &lt;span style="color: #0000ff;"&gt;as&lt;/span&gt; MouseDragElementBehavior;&lt;br /&gt;            &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;            &lt;span style="color: #0000ff;"&gt;double&lt;/span&gt; x1 = dragBehavior2.X + &lt;span style="color: #800080;"&gt;22&lt;/span&gt;;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;double&lt;/span&gt; y1 = dragBehavior2.Y + &lt;span style="color: #800080;"&gt;22&lt;/span&gt;;&lt;br /&gt;            XX = x1;&lt;br /&gt;            YY = y1;&lt;br /&gt;            &lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt; (ucLine dline &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt; ucLineList)&lt;br /&gt;            {&lt;br /&gt;                &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;设置lineD线的起点坐标为移动后的坐标位置&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;                dline.LineD.X1 = x1;&lt;br /&gt;                dline.LineD.Y1 = y1;&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;            &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;            &lt;span style="color: #0000ff;"&gt;foreach&lt;/span&gt; (LinkLineModel linemodel &lt;span style="color: #0000ff;"&gt;in&lt;/span&gt; LinkLineList)&lt;br /&gt;            {&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;if&lt;/span&gt; (linemodel.PointType == PoiType.StartPoint)&lt;br /&gt;                {&lt;br /&gt;                    linemodel.LinkLine.X1 = XX;&lt;br /&gt;                    linemodel.LinkLine.Y1 = YY;&lt;br /&gt;                }&lt;br /&gt;                &lt;span style="color: #0000ff;"&gt;else&lt;/span&gt;&lt;br /&gt;                {&lt;br /&gt;                    linemodel.LinkLine.X2 = XX;&lt;br /&gt;                    linemodel.LinkLine.Y2 = YY;&lt;br /&gt;                }&lt;br /&gt;            }&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;    }&lt;/div&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; UCCircle.Xaml代码如下：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;    &amp;lt;Grid x:Name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;LayoutRoot&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Background=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;White&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&lt;br /&gt;        &amp;lt;Canvas x:Name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;CanvasDevice&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; &amp;gt;&lt;br /&gt;&lt;br /&gt;            &amp;lt;Image x:Name=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;img1&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Source=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;yellow.png&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Width=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;44&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Canvas.ZIndex=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;300&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt; Height=&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&lt;span style="color: #800000;"&gt;44&lt;/span&gt;&lt;span style="color: #800000;"&gt;"&lt;/span&gt;&amp;gt;&amp;lt;/Image&amp;gt;&lt;br /&gt;        &amp;lt;/Canvas&amp;gt;&lt;br /&gt;    &amp;lt;/Grid&amp;gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 接口中指定线条是起始点还是终结点，以供子控件识别并且随时改变两个子控件中的连接线位置。&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;class&lt;/span&gt; LinkLineModel&lt;br /&gt;    {&lt;br /&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 起点线还是终点线&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; PoiType PointType { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;; }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 线&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; Line LinkLine { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;; }&lt;br /&gt;&lt;br /&gt;        &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 线条名字&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;        &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;string&lt;/span&gt; LineName { &lt;span style="color: #0000ff;"&gt;get&lt;/span&gt;; &lt;span style="color: #0000ff;"&gt;set&lt;/span&gt;; }&lt;br /&gt;    }&lt;/div&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 定义了一个枚举如下：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;    &lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;summary&amp;gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt;&lt;span style="color: #008000;"&gt; 指定点的类型是起始点还是终结点&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #808080;"&gt;///&lt;/span&gt; &lt;span style="color: #808080;"&gt;&amp;lt;/summary&amp;gt;&lt;/span&gt;&lt;span style="color: #808080;"&gt;&lt;br /&gt;&lt;/span&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;enum&lt;/span&gt; PoiType&lt;br /&gt;    { &lt;br /&gt;        StartPoint,&lt;br /&gt;        EndPoint&lt;br /&gt;    }&lt;/div&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 最后看MainPage.xaml.cs代码如下，构造了三个子控件，两条子控件之间的连接线：&lt;/p&gt;&lt;div style="background-color: #F5F5F5;border: 1px solid #CCCCCC;padding:10px;"&gt;    &lt;span style="color: #0000ff;"&gt;public&lt;/span&gt; &lt;span style="color: #0000ff;"&gt;partial&lt;/span&gt; &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;            CanvasDevice.Children.Clear();&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;连接uc和uc1的线条&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            Line line = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Line();&lt;br /&gt;            line.Stroke = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; SolidColorBrush(Color.FromArgb(&lt;span style="color: #800080;"&gt;255&lt;/span&gt;, &lt;span style="color: #800080;"&gt;255&lt;/span&gt;, &lt;span style="color: #800080;"&gt;0&lt;/span&gt;, &lt;span style="color: #800080;"&gt;0&lt;/span&gt;));&lt;br /&gt;            line.AllowDrop = &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;连接uc1和uc2的线条&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            Line line2 = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; Line();&lt;br /&gt;            line2.Stroke = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; SolidColorBrush(Color.FromArgb(&lt;span style="color: #800080;"&gt;255&lt;/span&gt;, &lt;span style="color: #800080;"&gt;255&lt;/span&gt;, &lt;span style="color: #800080;"&gt;0&lt;/span&gt;, &lt;span style="color: #800080;"&gt;0&lt;/span&gt;));&lt;br /&gt;            line2.AllowDrop = &lt;span style="color: #0000ff;"&gt;true&lt;/span&gt;;&lt;br /&gt;&lt;br /&gt;            &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;            UCCircle uc = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; UCCircle(&lt;span style="color: #800080;"&gt;5&lt;/span&gt;, &lt;span style="color: #800080;"&gt;100&lt;/span&gt;, &lt;span style="color: #800080;"&gt;250&lt;/span&gt;, &lt;span style="color: #800080;"&gt;150&lt;/span&gt;);&lt;br /&gt;            UCCircle uc1 = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; UCCircle(&lt;span style="color: #800080;"&gt;6&lt;/span&gt;, &lt;span style="color: #800080;"&gt;100&lt;/span&gt;, &lt;span style="color: #800080;"&gt;160&lt;/span&gt;, &lt;span style="color: #800080;"&gt;370&lt;/span&gt;);&lt;br /&gt;            UCCircle uc2 = &lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; UCCircle(&lt;span style="color: #800080;"&gt;6&lt;/span&gt;, &lt;span style="color: #800080;"&gt;100&lt;/span&gt;, &lt;span style="color: #800080;"&gt;450&lt;/span&gt;, &lt;span style="color: #800080;"&gt;400&lt;/span&gt;);&lt;br /&gt;&lt;br /&gt;            &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;            uc.SetLinkLine(&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; LinkLineModel() { LinkLine= line, PointType= PoiType.StartPoint });&lt;br /&gt;            uc1.SetLinkLine(&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; LinkLineModel() { LinkLine = line, PointType = PoiType.EndPoint });&lt;br /&gt;&lt;br /&gt;            &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;            uc1.SetLinkLine(&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; LinkLineModel() { LinkLine = line2, PointType = PoiType.StartPoint });&lt;br /&gt;            uc2.SetLinkLine(&lt;span style="color: #0000ff;"&gt;new&lt;/span&gt; LinkLineModel() { LinkLine = line2, PointType = PoiType.EndPoint });&lt;br /&gt;&lt;br /&gt;            &lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;将线条和子空间添加到Canvas中&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;            CanvasDevice.Children.Add(line);&lt;br /&gt;            CanvasDevice.Children.Add(line2);&lt;br /&gt;            CanvasDevice.Children.Add(uc);&lt;br /&gt;            CanvasDevice.Children.Add(uc1);&lt;br /&gt;            CanvasDevice.Children.Add(uc2);&lt;br /&gt;        }&lt;br /&gt;    }&lt;/div&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 如需源码请点击 &lt;a href="http://files.cnblogs.com/chengxingliang/SLLinkLine.rar"&gt;SLLinkLine.rar&lt;/a&gt; 下载。下面是效果图，建议下载源码之后观看。&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2012/140041/2012031118062270.jpg" alt="" /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/chengxingliang/aggbug/2390404.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/chengxingliang/archive/2012/03/13/2390404.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
