<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_快乐的博客</title><subtitle type="text">Beauty leads to happiness,happiness leads to productivity,Thus,Beauty leads to productivity </subtitle><id>http://feed.cnblogs.com/blog/u/74831/rss</id><updated>2012-05-20T14:30:43Z</updated><author><name>快乐之王</name><uri>http://www.cnblogs.com/hielvis/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hielvis/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/74831/rss"/><entry><id>http://www.cnblogs.com/hielvis/archive/2011/11/09/2241910.html</id><title type="text">《Windows Fun 7》四：修改ListBox的模板，视觉状态，及状态过渡</title><summary type="text">明天要去交大讲Expression Blend的课，做了一个教程，也整理到博客园分享一下：本示例的目的是：修改ListBox的模板修改ListBoxItem的视觉状态添加ListBoxItem视觉状态之间的过渡步骤：1. 添加一个Windows Phone页面2. 添加示例数据：3.通过数据创建ListBox4.设置，将ListBox调制剧中的位置5. 编辑模板6.修改模板的样式，可以复制以下代码：&lt;DataTemplate x:Key="ItemTemplate"&gt;&lt;Grid Height="100" Margin="0,1</summary><published>2011-11-08T18:20:00Z</published><updated>2011-11-08T18:20:00Z</updated><author><name>快乐之王</name><uri>http://www.cnblogs.com/hielvis/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hielvis/archive/2011/11/09/2241910.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hielvis/archive/2011/11/09/2241910.html"/><content type="html">&lt;p&gt;明天要去交大讲Expression Blend的课，做了一个教程，也整理到博客园分享一下：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hielvis/201111/201111090217146296.jpg"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="op" src="http://images.cnblogs.com/cnblogs_com/hielvis/201111/201111090217152260.jpg" alt="op" width="239" height="444" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;本示例的目的是：&lt;/p&gt;&lt;ol&gt;&lt;li&gt;修改ListBox的模板&lt;/li&gt;&lt;li&gt;修改ListBoxItem的视觉状态&lt;/li&gt;&lt;li&gt;添加ListBoxItem视觉状态之间的过渡&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;步骤：&lt;/p&gt;&lt;p&gt;1. 添加一个Windows Phone页面&lt;/p&gt;&lt;p&gt;2. 添加示例数据：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hielvis/201111/201111090217189945.jpg"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="22" src="http://images.cnblogs.com/cnblogs_com/hielvis/201111/201111090217213585.jpg" alt="22" width="648" height="361" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;3.通过数据创建ListBox&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hielvis/201111/201111090217248795.jpg"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="23" src="http://images.cnblogs.com/cnblogs_com/hielvis/201111/20111109021727449.jpg" alt="23" width="651" height="363" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;4.设置，将ListBox调制剧中的位置&lt;/p&gt;&lt;p&gt;5. 编辑模板&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hielvis/201111/201111090217293283.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="Picture1" src="http://images.cnblogs.com/cnblogs_com/hielvis/201111/201111090217312246.png" alt="Picture1" width="486" height="104" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;6.修改模板的样式，可以复制以下代码：&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;&amp;lt;DataTemplate x:Key="ItemTemplate"&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;lt;Grid Height="100" Margin="0,10,0,0" Width="400"&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;lt;Image Source="{Binding BackImage}" HorizontalAlignment="Left" Width="400"/&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;lt;Rectangle Fill="#FF131523" HorizontalAlignment="Left" Height="40" Margin="0" Stroke="Black" Width="400" VerticalAlignment="Bottom" StrokeThickness="0" Opacity="0.79" d:LayoutOverrides="VerticalAlignment"/&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;lt;/Grid&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;lt;/DataTemplate&amp;gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hielvis/201111/201111090217391637.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="Picture2" src="http://images.cnblogs.com/cnblogs_com/hielvis/201111/201111090217478369.png" alt="Picture2" width="280" height="463" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;7.修改ListBoxItem的样式，通过以下方式调出ListBoxItem模板进行编辑：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hielvis/201111/201111090217517101.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="Picture3" src="http://images.cnblogs.com/cnblogs_com/hielvis/201111/201111090217535408.png" alt="Picture3" width="565" height="140" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;8.修改ListBoxItem的容器为Grid，这是为了便于后面做动画&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hielvis/201111/201111090217577869.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="Picture4" src="http://images.cnblogs.com/cnblogs_com/hielvis/201111/201111090217595063.png" alt="Picture4" width="364" height="237" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;9.添加2个TextBlock，分别用于显示两个绑定字段，注意这里没有将这两个元素定义在前面的ItemTemplate中，是因为，在ListBox中，ItemTemplate只是作为ListBoxItem的一个内容控件，所以如果需要处理状态过渡，则在ListBoxItem的状态中是找不到这些元素的，这些状态是由ListBoxItem提供而不是ItemTemplate提供，所以，如果需要处理过渡则不能依赖于ItemTemplate，Blend提供一种方式直接调出ListBoxItem，作为一个补充，也为了更好的定制化ListBox&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hielvis/201111/201111090218127364.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="Picture5" src="http://images.cnblogs.com/cnblogs_com/hielvis/201111/201111090218176769.png" alt="Picture5" width="592" height="335" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;10，但是，这样就需要手动绑定TextBlock&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hielvis/201111/201111090218286759.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="Picture6" src="http://images.cnblogs.com/cnblogs_com/hielvis/201111/201111090218351016.png" alt="Picture6" width="565" height="319" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;11.绑定&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hielvis/201111/201111090218374722.jpg"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="df" src="http://images.cnblogs.com/cnblogs_com/hielvis/201111/201111090218385637.jpg" alt="df" width="557" height="313" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;12.设置两个文本元素，值看起来如下图：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hielvis/201111/201111090218504382.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="Picture7" src="http://images.cnblogs.com/cnblogs_com/hielvis/201111/201111090218587145.png" alt="Picture7" width="245" height="392" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;13.修改视觉状态，首先删除ListBox选中默认的背景变换：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hielvis/201111/201111090219117153.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="Picture8" src="http://images.cnblogs.com/cnblogs_com/hielvis/201111/201111090219172655.png" alt="Picture8" width="443" height="357" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;14.变换name元素，使在选中的时候向右滑动：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hielvis/201111/201111090219295304.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="Picture9" src="http://images.cnblogs.com/cnblogs_com/hielvis/201111/20111109021935773.png" alt="Picture9" width="683" height="301" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;15.title元素相反向左滑动：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hielvis/201111/201111090219463521.png"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="Picture10" src="http://images.cnblogs.com/cnblogs_com/hielvis/201111/201111090219509961.png" alt="Picture10" width="690" height="287" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;16,修改状态变换：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hielvis/201111/201111090219532762.jpg"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="sds" src="http://images.cnblogs.com/cnblogs_com/hielvis/201111/201111090219556642.jpg" alt="sds" width="702" height="400" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;19.大功告成&lt;/p&gt;&lt;p&gt;20.源代码：&lt;a title="http://files.cnblogs.com/hielvis/HelloBlend.rar" href="http://files.cnblogs.com/hielvis/HelloBlend.rar" target="_blank"&gt;http://files.cnblogs.com/hielvis/HelloBlend.rar&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/hielvis/aggbug/2241910.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hielvis/archive/2011/11/09/2241910.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hielvis/archive/2011/09/28/2194848.html</id><title type="text">《Windows Fun 7》三：Metro风格的图标按钮</title><summary type="text">Windows Phone中的Metro风格大家都比较熟悉了，其中ApplicationBar中Button的风格更是独特于iphone和Android，这样的图标我们在地铁商场随处可见，如下： ApplicationBar中的图标有一个特点，它看起来像两张图片的切换，当手按下去的时候它会呈现相反的颜色。但实际上我们在使用中知道，它其实只有一张图片，这张图片具有以下特点：背景透明前景色纯白没有外边的圆框，ApplicationBar在显示的时候自动加上当手按下去的时候，系统会替换图标和背景颜色 这看起来很酷，它通过颜色变化给用户操作反馈，而且统一到Metro风格设计中。 但是我们发现，只有在.</summary><published>2011-09-28T14:17:00Z</published><updated>2011-09-28T14:17:00Z</updated><author><name>快乐之王</name><uri>http://www.cnblogs.com/hielvis/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hielvis/archive/2011/09/28/2194848.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hielvis/archive/2011/09/28/2194848.html"/><content type="html">&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Windows Phone中的Metro风格大家都比较熟悉了，其中ApplicationBar中Button的风格更是独特于iphone和Android，这样的图标我们在地铁商场随处可见，如下：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hielvis/201109/20110928221649849.jpg"&gt;&lt;img style="display: inline;" title="9292" alt="9292" src="http://images.cnblogs.com/cnblogs_com/hielvis/201109/201109282216504371.jpg" width="536" height="154" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ApplicationBar中的图标有一个特点，它看起来像两张图片的切换，当手按下去的时候它会呈现相反的颜色。但实际上我们在使用中知道，它其实只有一张图片，这张图片具有以下特点：&lt;/p&gt;&lt;ol&gt;&lt;li&gt;背景透明&lt;/li&gt;&lt;li&gt;前景色纯白&lt;/li&gt;&lt;li&gt;没有外边的圆框，ApplicationBar在显示的时候自动加上&lt;/li&gt;&lt;li&gt;当手按下去的时候，系统会替换图标和背景颜色&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 这看起来很酷，它通过颜色变化给用户操作反馈，而且统一到Metro风格设计中。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 但是我们发现，只有在ApplicationBar中才可以这样使用，而在PhoneApplicationPage的区域，要实现类似的效果，有时候我们不得不做两张图片切换，而且要有多种颜色更要更多的图片。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 这样的地方也经常用到，系统的电话记录就是其中一种，历史记录的列表左边有一个拨打电话的图标，它和ApplicationBar中的风格一致。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 所以，我们怎么实现一个类似的图标按钮呢？这就是本文的任务。&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hielvis/201109/20110928221650684.jpg"&gt;&lt;img style="display: inline;" title="005" alt="005" src="http://images.cnblogs.com/cnblogs_com/hielvis/201109/201109282216512537.jpg" width="604" height="416" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 使用本文提供的控件，我们像ApplicationBar中的Button一样使用：&lt;/p&gt;&lt;ol&gt;&lt;li&gt;可以指定前景色和背景色，自动切换&lt;/li&gt;&lt;li&gt;只需要指定一张图片&lt;/li&gt;&lt;li&gt;可以更换图片，实现像IE9中的刷新和停止的效果。&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 我们来分析下实现的思路是什么，我们首先看对图标的要求，要求图标的背景透明，而前景色是纯色，而图片实际上是由一个一个的像素点组成，所以我们就可以在程序中分析出哪些像素点是纯色图标，哪些是背景色，这样我们就可以修改纯色的部分，实现各种不同的颜色。并且可以在手按下的状态变换颜色，原理就是这里简单。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 剩下的问题就是，我们怎样得到这些像素点呢？答案是WriteableBitmap，他有一个Pixels属性，可以获取所有像素点的颜色值，一个颜色值实际上对应一个十六进制，从而对应一个整数，这里剩下的问题就是整数以及颜色值之间的转换，颜色到整数之间的转换：&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;byte alpha = (byte)(pixel &amp;gt;&amp;gt; 24); &lt;br /&gt;var a = alpha + 1; &lt;br /&gt;var col = (alpha &amp;lt;&amp;lt; 24) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | ((byte)((color.R * a) &amp;gt;&amp;gt; 8) &amp;lt;&amp;lt; 16) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | ((byte)((color.G * a) &amp;gt;&amp;gt; 8) &amp;lt;&amp;lt; 8) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | ((byte)((color.B * a) &amp;gt;&amp;gt; 8));&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 我们这里只需要这个转换即可，没有反向的转换。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 使用的方式非常简单：&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;&amp;lt;metro:MetroImage&amp;nbsp;&amp;nbsp;Source="Images/appbar.sync.rest.png"&amp;nbsp;BackgroundColor="Red" ForegroundColor="Green"/&amp;gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 是不是跟ApplicationBar的一样的呢？呵呵&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 比较简单，大家可以下载源代码。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://files.cnblogs.com/hielvis/WriteableBitmap.rar"&gt;http://files.cnblogs.com/hielvis/WriteableBitmap.rar&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://techappy.net"&gt;http://techappy.net&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/hielvis/aggbug/2194848.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hielvis/archive/2011/09/28/2194848.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hielvis/archive/2011/09/10/2173294.html</id><title type="text">《Windows Fun 7》 二：Windows Phone怎样实现一个水平切换Page的Transition</title><summary type="text">前言 重置过Windows Phone 7手机的朋友，一定记得，重置之后第一件要做的事是设置语言，时区，时间，Live ID等信息。我们也一定记得那是一种水平切换的动画。当我们点击下一步时，页面从右向左滑动。有点类似iphone主页菜单的左右滑动效果。 前段时间QQ群有人在问这种效果。这样的效果有时候会用到，比如街旁WP7客户端开始的引导用户使用的几个页面，类似教程，就可以做成这种效果。还有，如果需要在客户端注册，也可以把几个注册过程做成这样的效果，还有比如翻书的效果，也可以这样平移…… 我们可以看下一下效果，它是从右向左连贯的水平滑动，本篇就分析这样的思路以及实现原理，并给出源代码下载：1.</summary><published>2011-09-10T11:39:00Z</published><updated>2011-09-10T11:39:00Z</updated><author><name>快乐之王</name><uri>http://www.cnblogs.com/hielvis/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hielvis/archive/2011/09/10/2173294.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hielvis/archive/2011/09/10/2173294.html"/><content type="html">&lt;p&gt;前言&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 重置过Windows Phone 7手机的朋友，一定记得，重置之后第一件要做的事是设置语言，时区，时间，Live ID等信息。我们也一定记得那是一种水平切换的动画。当我们点击下一步时，页面从右向左滑动。有点类似iphone主页菜单的左右滑动效果。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 前段时间QQ群有人在问这种效果。这样的效果有时候会用到，比如街旁WP7客户端开始的引导用户使用的几个页面，类似教程，就可以做成这种效果。还有，如果需要在客户端注册，也可以把几个注册过程做成这样的效果，还有比如翻书的效果，也可以这样平移&amp;hellip;&amp;hellip;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 我们可以看下一下效果，它是从右向左连贯的水平滑动，本篇就分析这样的思路以及实现原理，并给出源代码下载：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hielvis/201109/201109101939117122.jpg"&gt;&lt;img style="display: inline;" title="page" alt="page" src="http://images.cnblogs.com/cnblogs_com/hielvis/201109/20110910193911535.jpg" width="711" height="382" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #9b00d3; font-size: medium; background-color: #ffffff;" color="#9b00d3" size="4"&gt;&lt;strong&gt;1.你的思路&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 如果我猜的没错，你已经有了大概的思路：设置一个Canvas，按每个页面实际的位置布局，然后每次修改每个元素的Canvas.Left&amp;hellip;&amp;hellip;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 确实，以前我也这么干过！&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 这样虽然可行，但是有点显得我们不够专业，而且所有页面需要一次实例化，如果页面过多，那会影响第一次加载时间。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 那怎么办呢？不急，我们一步一步来慢慢分析。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color: #ff0000; font-size: medium;" color="#ff0000" size="4"&gt;2.Silverlight中的简单导航&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 切换，切换，切换，该怎么切换呢？&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 想想，在Silverlight中，我们要由一个UI页面切换到另一个UI页面，在不借助Frame的时候，会怎么办呢。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 最简单的，就是将容器的Content给替换成另一个对象，没错就是这样。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 所以，页面切换的最简单模型就是，最外层放置一个ContentControl，第一次显示的时候给他的Content赋值一个页面实例，在用户点击导航按钮之后，用另一个页面实例替换。如下的模型：&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hielvis/201109/201109101939112520.jpg"&gt;&lt;img style="display: inline;" title="aaa" alt="aaa" src="http://images.cnblogs.com/cnblogs_com/hielvis/201109/201109101939128093.jpg" width="500" height="283" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #00ff00; font-size: medium;" color="#00ff00" size="4"&gt;&lt;strong&gt;3.Frame+Page&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 其实，没错啦，页面切换的基本模型就是这么简单。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Silverlight提供了一个Frame+Page的导航模型，它其实仍然是这样的原理。我们首先看下Frame的定义：&lt;/p&gt;&lt;div class="csharpcode"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; Frame : ContentControl, INavigate&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;span class="lnum"&gt;   3:  &lt;/span&gt;   &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; CanGoBack { get; &lt;span class="kwrd"&gt;internal&lt;/span&gt; set; }&lt;span class="lnum"&gt;   4:  &lt;/span&gt;   &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; CanGoForward { get; &lt;span class="kwrd"&gt;internal&lt;/span&gt; set; }&lt;span class="lnum"&gt;   5:  &lt;/span&gt;   &lt;span class="kwrd"&gt;public&lt;/span&gt; Uri CurrentSource { get; &lt;span class="kwrd"&gt;internal&lt;/span&gt; set; }&lt;span class="lnum"&gt;   6:  &lt;/span&gt;   &lt;span class="kwrd"&gt;public&lt;/span&gt; Uri Source { get; set; }&lt;span class="lnum"&gt;   7:  &lt;/span&gt;   &lt;span class="kwrd"&gt;public&lt;/span&gt; UriMapperBase UriMapper { get; set; }&lt;span class="lnum"&gt;   8:  &lt;/span&gt;   &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;event&lt;/span&gt; FragmentNavigationEventHandler FragmentNavigation;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;   &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;event&lt;/span&gt; NavigatedEventHandler Navigated;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;   &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;event&lt;/span&gt; NavigatingCancelEventHandler Navigating;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;   &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;event&lt;/span&gt; NavigationFailedEventHandler NavigationFailed;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;   &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;event&lt;/span&gt; NavigationStoppedEventHandler NavigationStopped;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;   &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; GoBack();&lt;span class="lnum"&gt;  14:  &lt;/span&gt;   &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; GoForward();&lt;span class="lnum"&gt;  15:  &lt;/span&gt;   &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;bool&lt;/span&gt; Navigate(Uri source);&lt;span class="lnum"&gt;  16:  &lt;/span&gt;   &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; StopLoading();&lt;span class="lnum"&gt;  17:  &lt;/span&gt;}&lt;/div&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Frame首先是一个ContentControl，那么每个Page就是一个页面了。不同的是不需要我们去替换Content，我们只需要指定一个XAML文件的地址，Frame会根据路径找到这个页面，然后实例化，然后自己替换它的Content。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 相比我们前面得出的最简单的模型，它仅仅是提供了一些导航事件，使得我们可以做出一些处理。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 我们看到，Frame模型简化了我们开发中的页面导航。还是很有用的。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color: #9b00d3; font-size: medium;" color="#9b00d3" size="4"&gt;4.Windows Phone 7中的Transitions&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Nice！但是页面切换太突兀了，一下子就换过来，一点都不符合Silverlight的风格，Silverlight可是做动画的啊，Silverlight可是替换Flash的啊，为什么要像HTML一样导航呢。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Windows Phone 7操作系统出来后，Metro横空出世，Metro强调流畅，强调平滑，强调每户的每个操作和响应都能通过一些视觉变换反馈给用户。因此，给Page之间的过度加入了Transition。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 不过默认的PhoneApplicationFrame并没有加入Transition的功能，我们需要去分析Toolkit里面的TransitionFrame代码。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 对TransitionFrame的分析以及将本实例转化为Frame的方式将会在下一篇分析。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color: #ff0000; font-size: medium;" color="#ff0000" size="4"&gt;5.本示例代码分析&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 本实例实际上来源于PDC大会上介绍Expression Blend 4时官方演示的源代码示例。其中我把导航的部分抽取出来。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 和Frame+Page的模型类似，本实例也由两部分组成：TransitionContentControl和SlideShow。其中TransitionContentControl类似于Frame的功能，而SlideShow类似于Page，不同的是SlideShow是继承于ItemsControl，它首先就会取得所有页面并实例化，这在页面多得时候不是很可取，后面我会将它进行改造。&lt;/p&gt;&lt;div class="csharpcode"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; TransitionContentControl : Control &lt;span class="lnum"&gt;   2:  &lt;/span&gt;{ &lt;span class="lnum"&gt;   3:  &lt;/span&gt;   &lt;span class="kwrd"&gt;private&lt;/span&gt; ContentControl currentWrappedContent = &lt;span class="kwrd"&gt;null&lt;/span&gt;; &lt;span class="lnum"&gt;   4:  &lt;/span&gt;   &lt;span class="kwrd"&gt;private&lt;/span&gt; Grid grid = &lt;span class="kwrd"&gt;null&lt;/span&gt;; &lt;span class="lnum"&gt;   5:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;   &lt;span class="kwrd"&gt;public&lt;/span&gt; Style TransitionStyle { get; set;} &lt;span class="lnum"&gt;   7:  &lt;/span&gt;   &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;object&lt;/span&gt; Content{ get; set;} &lt;span class="lnum"&gt;   8:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;   &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; ContentPropertyChanged(&lt;span class="kwrd"&gt;object&lt;/span&gt; o, DependencyPropertyChangedEventArgs args); &lt;span class="lnum"&gt;  10:  &lt;/span&gt;   &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; TransitionStylePropertyChanged(&lt;span class="kwrd"&gt;object&lt;/span&gt; o, DependencyPropertyChangedEventArgs args); }&amp;nbsp;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 和前面的Frame没有太大区别,神奇之处在于多了一个TransitionStyle依赖属性,这个Style也没什么区别,神奇之处在于多了一个LayoutStates&lt;/p&gt;&lt;div class="csharpcode"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&amp;lt;Style x:Key=&lt;span class="str"&gt;"SlideTemplate"&lt;/span&gt; TargetType=&lt;span class="str"&gt;"ContentControl"&lt;/span&gt;&amp;gt;&lt;span class="lnum"&gt;   2:  &lt;/span&gt;    &amp;lt;Setter Property=&lt;span class="str"&gt;"Template"&lt;/span&gt;&amp;gt;&lt;span class="lnum"&gt;   3:  &lt;/span&gt;        &amp;lt;Setter.Value&amp;gt;&lt;span class="lnum"&gt;   4:  &lt;/span&gt;           &amp;lt;ControlTemplate TargetType=&lt;span class="str"&gt;"ContentControl"&lt;/span&gt;&amp;gt;&lt;span class="lnum"&gt;   5:  &lt;/span&gt;              &amp;lt;Grid x:Name=&lt;span class="str"&gt;"grid"&lt;/span&gt; Background=&lt;span class="str"&gt;"{TemplateBinding Background}"&lt;/span&gt;&amp;gt;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;                 &amp;lt;VisualStateManager.VisualStateGroups&amp;gt;&lt;span class="lnum"&gt;   7:  &lt;/span&gt;                    &amp;lt;VisualStateGroup x:Name=&lt;span class="str"&gt;"LayoutStates"&lt;/span&gt;&amp;gt;&lt;span class="lnum"&gt;   8:  &lt;/span&gt;                       &amp;lt;VisualState x:Name=&lt;span class="str"&gt;"BeforeLoaded"&lt;/span&gt;&amp;gt;&lt;span class="lnum"&gt;   9:  &lt;/span&gt;                       &amp;lt;VisualState x:Name=&lt;span class="str"&gt;"AfterLoaded"&lt;/span&gt;/&amp;gt;&lt;span class="lnum"&gt;  10:  &lt;/span&gt;                       &amp;lt;VisualState x:Name=&lt;span class="str"&gt;"BeforeUnloaded"&lt;/span&gt;&amp;gt;&lt;span class="lnum"&gt;  11:  &lt;/span&gt;                    &amp;lt;/VisualStateManager.VisualStateGroups&amp;gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;                    &amp;lt;Grid.RenderTransform&amp;gt;&lt;span class="lnum"&gt;  13:  &lt;/span&gt;                       &amp;lt;CompositeTransform/&amp;gt;&lt;span class="lnum"&gt;  14:  &lt;/span&gt;                    &amp;lt;/Grid.RenderTransform&amp;gt;&lt;span class="lnum"&gt;  15:  &lt;/span&gt;                    &amp;lt;ContentPresenter x:Name=&lt;span class="str"&gt;"contentPresenter"&lt;/span&gt; ContentTemplate=&lt;span class="str"&gt;"{TemplateBinding                                    ContentTemplate}"&lt;/span&gt; Content=&lt;span class="str"&gt;"{TemplateBinding Content}"&lt;/span&gt;}"/&amp;gt;&lt;span class="lnum"&gt;  16:  &lt;/span&gt;             &amp;lt;/Grid&amp;gt;&lt;span class="lnum"&gt;  17:  &lt;/span&gt;          &amp;lt;/ControlTemplate&amp;gt;&lt;span class="lnum"&gt;  18:  &lt;/span&gt;       &amp;lt;/Setter.Value&amp;gt;&lt;span class="lnum"&gt;  19:  &lt;/span&gt;   &amp;lt;/Setter&amp;gt;&lt;span class="lnum"&gt;  20:  &lt;/span&gt;&amp;lt;/Style&amp;gt;&amp;nbsp;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 关于LayoutStates，我之前的一篇文章有介绍：&lt;a title="http://www.cnblogs.com/hielvis/archive/2010/10/09/1846046.html" href="http://www.cnblogs.com/hielvis/archive/2010/10/09/1846046.html"&gt;http://www.cnblogs.com/hielvis/archive/2010/10/09/1846046.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 其实也很简单，它定义了三个状态BeforeLoaded，AfterLoaded，BeforeUnloaded。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; BeforeLoaded就是一个页面加载之前的状态，如果页面是从右向左滑动，那么它应该是在屏幕右边看不见：&lt;/p&gt;&lt;div class="csharpcode"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&amp;lt;VisualState x:Name=&lt;span class="str"&gt;"BeforeLoaded"&lt;/span&gt;&amp;gt; &lt;span class="lnum"&gt;   2:  &lt;/span&gt;   &amp;lt;Storyboard&amp;gt; &lt;span class="lnum"&gt;   3:  &lt;/span&gt;      &amp;lt;DoubleAnimation Duration=&lt;span class="str"&gt;"0"&lt;/span&gt; To=&lt;span class="str"&gt;"1000"&lt;/span&gt; &lt;span class="lnum"&gt;   4:  &lt;/span&gt;             Storyboard.TargetProperty=&lt;span class="str"&gt;"(UIElement.RenderTransform).(CompositeTransform.TranslateX)"&lt;/span&gt; &lt;span class="lnum"&gt;   5:  &lt;/span&gt;             Storyboard.TargetName=&lt;span class="str"&gt;"grid"&lt;/span&gt;/&amp;gt; &lt;span class="lnum"&gt;   6:  &lt;/span&gt;      &amp;lt;DoubleAnimation Duration=&lt;span class="str"&gt;"0"&lt;/span&gt; To=&lt;span class="str"&gt;"0"&lt;/span&gt; &lt;span class="lnum"&gt;   7:  &lt;/span&gt;             Storyboard.TargetProperty=&lt;span class="str"&gt;"(UIElement.Opacity)"&lt;/span&gt; &lt;span class="lnum"&gt;   8:  &lt;/span&gt;             Storyboard.TargetName=&lt;span class="str"&gt;"grid"&lt;/span&gt;/&amp;gt; &lt;span class="lnum"&gt;   9:  &lt;/span&gt;   &amp;lt;/Storyboard&amp;gt; &lt;span class="lnum"&gt;  10:  &lt;/span&gt;&amp;lt;/VisualState&amp;gt; &amp;nbsp;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 我们看到这个状态，其CompositeTransform.TranslateX被设置到屏幕后边的位置，并且透明度为0，不可见。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 与BeforeLoaded状态相反，BeforeUnloaded如下：&lt;/p&gt;&lt;div class="csharpcode"&gt;&lt;div class="csharpcode"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&amp;lt;VisualState x:Name=&lt;span class="str"&gt;"BeforeUnloaded"&lt;/span&gt;&amp;gt;   &lt;span class="lnum"&gt;   2:  &lt;/span&gt;   &amp;lt;Storyboard&amp;gt;   &lt;span class="lnum"&gt;   3:  &lt;/span&gt;     &amp;lt;DoubleAnimation Duration=&lt;span class="str"&gt;"0"&lt;/span&gt; To=&lt;span class="str"&gt;"-1000"&lt;/span&gt;   &lt;span class="lnum"&gt;   4:  &lt;/span&gt;                 Storyboard.TargetProperty=&lt;span class="str"&gt;"(UIElement.RenderTransform).(CompositeTransform.TranslateX)"&lt;/span&gt;                       &lt;span class="lnum"&gt;   5:  &lt;/span&gt;                 Storyboard.TargetName=&lt;span class="str"&gt;"grid"&lt;/span&gt;/&amp;gt;    &lt;span class="lnum"&gt;   6:  &lt;/span&gt;      &amp;lt;DoubleAnimation Duration=&lt;span class="str"&gt;"0"&lt;/span&gt; To=&lt;span class="str"&gt;"0"&lt;/span&gt;                         &lt;span class="lnum"&gt;   7:  &lt;/span&gt;                Storyboard.TargetProperty=&lt;span class="str"&gt;"(UIElement.Opacity)"&lt;/span&gt;   &lt;span class="lnum"&gt;   8:  &lt;/span&gt;                Storyboard.TargetName=&lt;span class="str"&gt;"grid"&lt;/span&gt;/&amp;gt;   &lt;span class="lnum"&gt;   9:  &lt;/span&gt;   &amp;lt;/Storyboard&amp;gt;  &lt;span class="lnum"&gt;  10:  &lt;/span&gt;&amp;lt;/VisualState&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 而AfterLoaded就是一个页面正常显示的状态，那为什么它是空的没有设置呢，那是因为它和正常状态一样，没有修改任何元位置，下面就是正常状态：&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/div&gt;&lt;/div&gt;&lt;div class="csharpcode"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&amp;lt;Grid.RenderTransform&amp;gt; &lt;span class="lnum"&gt;   2:  &lt;/span&gt;    &amp;lt;CompositeTransform/&amp;gt; &lt;span class="lnum"&gt;   3:  &lt;/span&gt;&amp;lt;/Grid.RenderTransform&amp;gt; &amp;nbsp;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 好了，由此我们不难明白，由BeforeLoaded状态过度到AfterLoaded状态，就是新页面由右向左滑入的动画；而由AfterLoaded状态过度到BeforeUnloaded状态，就实现了页面向左淡出的动画效果。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 那么你会问，这两个状态过度如何同时进行的。实际上，这两个动画不是同时作用在一个元素上，通过前面简单的模型，我们知道Frame实际上控制着两个页面实例，在切换的时候，它将两个不同的状态过度分别作用的两个页面上，具体的代码在OnContentChanged方法中：&lt;/p&gt;&lt;div class="csharpcode"&gt;&lt;span class="lnum"&gt;   1:  &lt;/span&gt;&lt;span class="kwrd"&gt;protected&lt;/span&gt; &lt;span class="kwrd"&gt;virtual&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; OnContentChanged(&lt;span class="kwrd"&gt;object&lt;/span&gt; oldContent, &lt;span class="kwrd"&gt;object&lt;/span&gt; newContent)&lt;span class="lnum"&gt;   2:  &lt;/span&gt;{&lt;span class="lnum"&gt;   3:  &lt;/span&gt;    ContentControl oldWrapper = &lt;span class="kwrd"&gt;this&lt;/span&gt;.currentWrappedContent;   &lt;span class="kwrd"&gt;if&lt;/span&gt; (oldWrapper != &lt;span class="kwrd"&gt;null&lt;/span&gt;)&lt;span class="lnum"&gt;   4:  &lt;/span&gt;    {&lt;span class="lnum"&gt;   5:  &lt;/span&gt;        VisualStateGroup layoutStatesGroup = FindNameInWrapper(oldWrapper, &lt;span class="str"&gt;"LayoutStates"&lt;/span&gt;) &lt;span class="kwrd"&gt;as&lt;/span&gt; VisualStateGroup;&lt;span class="lnum"&gt;   6:  &lt;/span&gt;        &lt;span class="kwrd"&gt;if&lt;/span&gt; (layoutStatesGroup == &lt;span class="kwrd"&gt;null&lt;/span&gt;)&lt;span class="lnum"&gt;   7:  &lt;/span&gt;        {&lt;span class="lnum"&gt;   8:  &lt;/span&gt;             &lt;span class="kwrd"&gt;this&lt;/span&gt;.grid.Children.Remove(oldWrapper);&lt;span class="lnum"&gt;   9:  &lt;/span&gt;             SetContent(oldWrapper, &lt;span class="kwrd"&gt;null&lt;/span&gt;);&lt;span class="lnum"&gt;  10:  &lt;/span&gt;        }&lt;span class="lnum"&gt;  11:  &lt;/span&gt;        &lt;span class="kwrd"&gt;else&lt;/span&gt;&lt;span class="lnum"&gt;  12:  &lt;/span&gt;        {&lt;span class="lnum"&gt;  13:  &lt;/span&gt;           layoutStatesGroup.CurrentStateChanged += &lt;span class="kwrd"&gt;delegate&lt;/span&gt;(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, VisualStateChangedEventArgs args)&lt;span class="lnum"&gt;  14:  &lt;/span&gt;            {&lt;span class="lnum"&gt;  15:  &lt;/span&gt;                 &lt;span class="kwrd"&gt;this&lt;/span&gt;.grid.Children.Remove(oldWrapper);&lt;span class="lnum"&gt;  16:  &lt;/span&gt;                 SetContent(oldWrapper, &lt;span class="kwrd"&gt;null&lt;/span&gt;);&lt;span class="lnum"&gt;  17:  &lt;/span&gt;             };&lt;span class="lnum"&gt;  18:  &lt;/span&gt;           VisualStateManager.GoToState(oldWrapper, &lt;span class="kwrd"&gt;this&lt;/span&gt;.Reversed ? &lt;span class="str"&gt;"BeforeLoaded"&lt;/span&gt; : &lt;span class="str"&gt;"BeforeUnloaded"&lt;/span&gt;, &lt;span class="kwrd"&gt;true&lt;/span&gt;);&lt;span class="lnum"&gt;  19:  &lt;/span&gt;         }&lt;span class="lnum"&gt;  20:  &lt;/span&gt;      }&lt;span class="lnum"&gt;  21:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  22:  &lt;/span&gt;      ContentControl newWrapper = &lt;span class="kwrd"&gt;new&lt;/span&gt; ContentControl();&lt;span class="lnum"&gt;  23:  &lt;/span&gt;      newWrapper.Style = &lt;span class="kwrd"&gt;this&lt;/span&gt;.TransitionStyle;&lt;span class="lnum"&gt;  24:  &lt;/span&gt;      newWrapper.HorizontalContentAlignment = HorizontalAlignment.Stretch;&lt;span class="lnum"&gt;  25:  &lt;/span&gt;      newWrapper.VerticalContentAlignment = VerticalAlignment.Stretch;&lt;span class="lnum"&gt;  26:  &lt;/span&gt;&amp;nbsp;&lt;span class="lnum"&gt;  27:  &lt;/span&gt;      &lt;span class="kwrd"&gt;this&lt;/span&gt;.grid.Children.Add(newWrapper);&lt;span class="lnum"&gt;  28:  &lt;/span&gt;      newWrapper.ApplyTemplate();&lt;span class="lnum"&gt;  29:  &lt;/span&gt;      &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;this&lt;/span&gt;.TransitionStyle != &lt;span class="kwrd"&gt;null&lt;/span&gt;)&lt;span class="lnum"&gt;  30:  &lt;/span&gt;      {&lt;span class="lnum"&gt;  31:  &lt;/span&gt;         SetContent(newWrapper, newContent);&lt;span class="lnum"&gt;  32:  &lt;/span&gt;         &lt;span class="kwrd"&gt;if&lt;/span&gt; (oldWrapper != &lt;span class="kwrd"&gt;null&lt;/span&gt;)&lt;span class="lnum"&gt;  33:  &lt;/span&gt;         {&lt;span class="lnum"&gt;  34:  &lt;/span&gt;             VisualStateManager.GoToState(newWrapper, &lt;span class="kwrd"&gt;this&lt;/span&gt;.Reversed ? &lt;span class="str"&gt;"BeforeUnloaded"&lt;/span&gt; : &lt;span class="str"&gt;"BeforeLoaded"&lt;/span&gt;, &lt;span class="kwrd"&gt;false&lt;/span&gt;);&lt;span class="lnum"&gt;  35:  &lt;/span&gt;             VisualStateManager.GoToState(newWrapper, &lt;span class="str"&gt;"AfterLoaded"&lt;/span&gt;, &lt;span class="kwrd"&gt;true&lt;/span&gt;);&lt;span class="lnum"&gt;  36:  &lt;/span&gt;         }&lt;span class="lnum"&gt;  37:  &lt;/span&gt;     }&lt;span class="lnum"&gt;  38:  &lt;/span&gt;     &lt;span class="kwrd"&gt;this&lt;/span&gt;.currentWrappedContent = newWrapper;}&amp;nbsp;这个方法实际上是本示例最核心的部分，它分别将两种状态切换作用在两个页面实例上，然后两个动画同时作用，就形成了页面由右向左滑入的效果。这里也提前指出TransitionFrame的一个缺点，它不能像这样两个动画同时作用。我后面将要改造的Frame会加上LayoutStates的支持。&amp;nbsp;此示例其实代码非常精简，思路也很清晰。以上我分析了核心部分。&amp;nbsp;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color: #ff0000; font-size: medium;" color="#ff0000" size="4"&gt;6.下一篇内容&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在此基础上，我相信你已经大概知道TransitionFrame的实现思路了，是的，至少思想是类似的。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 但是TransitionFrame要复杂得多，我将在下一篇分析。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 本实例实际上有很多缺陷：&lt;/p&gt;&lt;ol&gt;&lt;li&gt;所有页面第一次全部实例化，不能像Frame可以在导航的时候加载页面&lt;/li&gt;&lt;li&gt;不能结合PhoneApplicationPage响应回退键，需要响应后退事件还需要手工做一些事情&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 后续，我将把次功能整合进TransitionFrame或者自定义一个Frame，那是就会分析一下Frame，这样就可以把这种效果与Back事件集成。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff00ff;"&gt;&lt;strong&gt;&lt;span style="font-size: 14px;"&gt;7.源代码下载&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 源代码：&lt;a href="http://files.cnblogs.com/hielvis/TecHappy.WindowsPhone.Toolkit.rar"&gt;http://files.cnblogs.com/hielvis/TecHappy.WindowsPhone.Toolkit.rar&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Xap包：&lt;a href="http://files.cnblogs.com/hielvis/TecHappy.WindowsPhone.Sample.xap"&gt;http://files.cnblogs.com/hielvis/TecHappy.WindowsPhone.Sample.xap&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color: #0000ff; font-size: medium;" color="#0000ff" size="4"&gt;8.Windows Phone 7技术沙龙&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;&lt;span style="color: #ff0000;" color="#ff0000"&gt;9月17号&lt;/span&gt;&lt;/strong&gt;，我们将在微软亚太研发集团举办Windows Phone 7的技术沙龙，将有一些大家熟悉的一线开发人员分享实战经验。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 微博报名：&lt;a href="http://event.weibo.com/199979"&gt;http://event.weibo.com/199979&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 我们官方宣传页：&lt;a href="http://www.techappy.net/"&gt;http://www.techappy.net/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/hielvis/201109/201109081200294821.jpg" /&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #a5a5a5; font-size: xx-large;" color="#a5a5a5" size="7"&gt;特邀嘉宾&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hielvis/201109/20110910193912634.jpg"&gt;&lt;img style="display: inline;" title="ray" alt="ray" src="http://images.cnblogs.com/cnblogs_com/hielvis/201109/201109101939131256.jpg" width="695" height="370" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/hielvis/aggbug/2173294.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hielvis/archive/2011/09/10/2173294.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hielvis/archive/2011/09/08/2171189.html</id><title type="text">《Windows fun 7》一：MVVM for Windows Phone 7</title><summary type="text">每个Silverlight程序员都有一段痛苦的MVVM经历，MVVM是Silverlight开发永恒的话题。 完美的概念后面是没有标准框架，网络上所能找到的例子也并没有深入介绍，使用过程中一定会接触深层次的问题，并且各个开源框架也是实现方式各异，叫我们Silverlight程序员情何以堪？ 网络上一搜MVVM关键字，最常出现的就是MSDN上的一篇：http://msdn.microsoft.com/en-us/magazine/dd419663.aspx 但实际这篇只讲述一般应用场景，实际在使用中还有很多问题需要自己解决。 MVVM的概念最早由Josh Smith于2005年提出：http:.</summary><published>2011-09-08T04:01:00Z</published><updated>2011-09-08T04:01:00Z</updated><author><name>快乐之王</name><uri>http://www.cnblogs.com/hielvis/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hielvis/archive/2011/09/08/2171189.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hielvis/archive/2011/09/08/2171189.html"/><content type="html">&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 每个Silverlight程序员都有一段痛苦的MVVM经历，MVVM是Silverlight开发永恒的话题。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 完美的概念后面是没有标准框架，网络上所能找到的例子也并没有深入介绍，使用过程中一定会接触深层次的问题，并且各个开源框架也是实现方式各异，叫我们Silverlight程序员情何以堪？&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 网络上一搜MVVM关键字，最常出现的就是MSDN上的一篇：&lt;a title="http://msdn.microsoft.com/en-us/magazine/dd419663.aspx" href="http://msdn.microsoft.com/en-us/magazine/dd419663.aspx" target="_blank"&gt;http://msdn.microsoft.com/en-us/magazine/dd419663.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 但实际这篇只讲述一般应用场景，实际在使用中还有很多问题需要自己解决。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MVVM的概念最早由Josh Smith于2005年提出：&lt;a title="http://blogs.msdn.com/b/johngossman/archive/2005/10/08/478683.aspx" href="http://blogs.msdn.com/b/johngossman/archive/2005/10/08/478683.aspx" target="_blank"&gt;http://blogs.msdn.com/b/johngossman/archive/2005/10/08/478683.aspx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 网络上比较完善比较经典的可能是唯一比较全面的教程也是他那本只有54页的《Advanced MVVM》，这本Google上能找到PDF链接。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 不过，经仔细阅读和分析之后发现，这个例子仍是讲述一般场景，真正开发仍然还有很多问题留给开发者自己解决。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 我的安排是首先我们来总结一下到底哪些问题令我们痛苦，然后分析MVVM的起因，最后我们谈谈怎样消除这些痛苦。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff0000; font-size: medium;" color="#ff0000" size="4"&gt;&lt;strong&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1.MVVM到底有哪些令人痛苦的问题？&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 我这里总结一下，你也可以一起思考，自己有没有遇到过这些问题，或者正在思考这些问题。&lt;/p&gt;&lt;ol&gt;&lt;li&gt;设计时和运行时支持？XAML需要设计时支持，很多MVVM框架直接将ViewModel定义在Xaml资源中，这不是View引用了ViewModel吗？&lt;/li&gt;&lt;li&gt;如果View不能引用ViewModel，那么View怎样取得ViewModel作为上下文？有很多框架都是直接在CodeBehind中加载ViewModel对象？&lt;/li&gt;&lt;li&gt;ViewModel的定义好像很乱，标准的ViewModel应该怎样定义？&lt;/li&gt;&lt;li&gt;ViewModel应该怎样加载数据？&lt;/li&gt;&lt;li&gt;在导航的时候，怎样赋予另一个页面一个ViewModel上下文？有View来指定ViewModel实例还是另外的方式&lt;/li&gt;&lt;li&gt;ViewModel的构造函数应不应该有参数？&lt;/li&gt;&lt;li&gt;一个方法有多个参数，View应该怎么样传递这些参数？&lt;/li&gt;&lt;li&gt;View的CodeBehind中应不应该有代码？&lt;/li&gt;&lt;li&gt;很多时候，ViewModel中的一个方法都要对应View中的一个UI操作，或则切换状态，或者修改属性，ViewModel怎样触发UI变化？&lt;/li&gt;&lt;li&gt;ViewModel怎样调用需要在CodeBehind中执行的方法，比如有些控件的操作不能通过属性修改，而只能在CodeBehind中调用这个控件的某个方法，比如弹出一个ChildWindows，或者MessageBox？比如VisualStateManager.GotoState就只能在CodeBehind中执行？&lt;/li&gt;&lt;li&gt;上述问题：ViewModel怎样切换状态？&lt;/li&gt;&lt;li&gt;多线程？&lt;/li&gt;&lt;li&gt;Windows Phone 7上的ViewModel怎样切换多个Application bar？&lt;/li&gt;&lt;li&gt;Windows Phone 7中ViewModel如何处理回退和导航？&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 看看吧，你有没有遇到活思考过这些问题？&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="color: #0000ff; font-size: medium;" color="#0000ff" size="4"&gt;&lt;strong&gt;2.MVVM的由来&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 其实，这些大多数问题都是有由来的，我们来分析一下。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 大多数知道MVVM的人，都可能知道它和MVC有些联系？然而是什么联系和区别？为什么一般人很容易理解和使用ASP.NET MVC，却始终不会应用MVVM？可能都说不清楚。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 事实上，拿MVC和MVVM比较并没有多大意义，反而会使人糊涂。在ASP.NET MVC中的View只承担显示数据的作用，它和Controller的交互是通过用户重新发起一起请求，这个请求和View几乎没有关系。并且MVC中得HTML是解释性的，服务器端按View的定义，顺序解释，替换掉相应的数据即可。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 然而，Xaml却不是那么简单的，Xaml不仅定义了UI（渲染引擎按照Xaml语言的定义计算和排列元素），Xaml更是一棵对象树，Xaml对象树的概念十分重要，以至于我们应该时时记住Xaml中的每个节点都是一个对象，这些对象由Xaml解析器实例化，并由Silverlight的UI渲染引擎根据布局原理将UI元素绘制到屏幕的相应位置。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 可以看到，这和ASP.NET MVC的机制是完全不一样的，虽然都是基于控件事件模型，但是ASP.NET中对象数实例化和显示是分开的，而Silverlight的UI元素对象树就是实际显示在屏幕的UI元素，它们是一个东西，因为Silverlight中这些UI元素和程序的交互和联系就十分重要和强大。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在Silverlight中，可以说最重要的是引入Xaml编程模型，使我们很好和很方便的定义UI元素和对象树，加上它的Xaml解析器，顺序的解析Xaml中的一个一个对象，Xaml解析器通过调用每个节点对应的类型的够构造函数来构造对象树，而Xaml能够识别每个节点的类型，能够识别像INotifyChanged这样的类型，所以Silverlight加入依赖属性，绑定这样一些概念。这都跟Xaml特点是有关的。Xaml是一种强大的编程模型，据悉Xaml团队已经加入Windows 8 Team，所以可以预见Windows 8的应用程序跟Xaml有很大的关系。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 因此，MVVM基本上是Xaml这种编程模型催生出来的。它和MVC除了分离的思想外没有什么可比的意义。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;&lt;span style="color: #f79646; font-size: medium;" color="#f79646" size="4"&gt;3.MVVM痛苦的根节点&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 然而，不管怎么样，Silverlight终究还是基于事件模型，事件的编程模型是一种极简的编程模式，它让开发者很容易的处理用户的输入（文本或者事件）。不管是Windows Form，Web Form还是Silverlight，都是基于这种编程模型。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 可是事件编程模型有一个很大的缺点，开发者很容易将业务逻辑混在UI操作中，这经常被称为Codebehind的文件。这样的后果是容易使开发者将注意力放到一些表现层的细节上，而且，很容易将业务逻辑与一些表现的细节耦合在一起，更严重的是，由于大多数控件对象的不可构造，对程序的可测试性带来很大挑战。它也使美工和开发的分工很不明确。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 因此，早期有分层的思想，分层实际上就是将某一抽象级别的业务封装。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 而在分层的接近UI层面，也出现分离的思想，它企图将UI彻底分离出来。MVC即是一种方案，可惜的是VS对ASP.BET MVC的设计时支持不够好。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 而在Silverlight开发中，Blend能支持很好的设计时。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 可是问题是，Xaml并不是为MVVM设计的，它的核心思想任然是控件和事件。所以MVVM试图将View和ViewModel分开，它需要将用户事件转化为ViewModel的方法，它需要在ViewModel中驱动一个UI变换，而View有各种各样的事件和控件，View也有各种各样的变换。因此原本在Codebehind中轻松搞定的事情，在MVVM模式下需要做大量的事情。我承认Codebehind的方式让业务有点混乱，但是MVVM实在是很麻烦，有时候你会觉得MVVM实际上把一件事情搞复杂了。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;&lt;span style="color: #00ff00; font-size: medium;" color="#00ff00" size="4"&gt;5.MVVM痛苦级别&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; MVVM的痛苦级别，取决于你想让Codebehind有多干净，这也有需求方面的考量。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1. 如果你仅仅是为了易于测试，业务清晰，这很简单，你只要注意把业务尽量移到ViewModel即可，View引用ViewModel都无所谓，在Codebehind中调用ViewModel中方法也无所谓，这实际上跟一般的分层没多大区别。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2. 如果View和ViewModel都是你在设计，不需要View和ViewModel严格分离，你可以大部分使用各个MVVM框架的标准做法，但是，你知道的，每个MVVM框架都有很难完全分离的方面，这个时候可以在CodeBehind中处理，因为转换到ViewModel中需要增加很大的工作量和理解上的复杂度。这也是我推荐的，或者说这是一个折中。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3. 如果你想完全将View交给另一个你甚至不认识的家伙去设计。你将挑战最难的MVVM设计--将事件模型完美转化为MVVM模型，你将不得不去解决所有问题，包括我上面列举出的一些问题。这样应该很少。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;&lt;span style="color: #111111; font-size: medium;" color="#111111" size="4"&gt;6.MVVM核心技术和思想&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1.附加属性和Binding&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; 附加属性是WPF提出的一个全新的属性系统，它用来支持绑定，变更通知，以及Xaml的样式Style系统，在ＭＶＶＭ中主要是View和ViewModel之间的数据绑定和传输。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2.附加属性&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; 不可否认，Xaml编程模型，最强大和最重要的概念是附加属性。&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; Blend中最强大的Behavior，Action，Trigger，VisualState等等，绝大部分特性都和附加属性有关。要使View和ViewModel完全分开，必须有一层抽象层作为两者之间的桥梁。&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; Xaml对于附加属性的支持，使得这个中间层（附加属性所属的类）可以得到一个被附加的对象的引用，这个中间层拿到引用之后就可以做一些翻译，比如一个ButtonCommand就是一个中间层，它拿到一个Button对象之后，订阅这个Button的Click事件到一个方法，并让CanExecute方法执行时，去修改Button的IsEnable属性。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 还有比如你要想在ViewModel控制PhoneApplicationPage的导航和回退，Application Bar的切换等，都可以通过类似的思路来实现。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 总之，你记住附加属性是Silverlight最重要的知识点。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 3.上诉情景有时候也可以用扩展方法来代替，这个扩展方法就充当中间层，但是这种情况下要假设这个中间层能够根据某种规则找到ViewModel对象，并且需要在Codebehind中调用扩展方法。不过这种方式有时候确实有一定的好处。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 总之，掌握上述两点你能应付大部分场景，并且在遇到问题之后可以想办法去解决，核心思想就是一个中间层，它要么是利用附加属性，要么是利用扩展方法。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;strong&gt;&lt;span style="color: #ff0000; font-size: medium;" color="#ff0000" size="4"&gt; 7.MVVM技术分享&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 9月17号，我们将在微软亚太研发集团举办Windows Phone 7的技术沙龙，将会详细分享MVVM的知识和经验。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 详情见这里：&lt;a title="http://event.weibo.com/199979" href="http://event.weibo.com/199979" target="_blank"&gt;http://event.weibo.com/199979&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 我们官方宣传页：&lt;a title="http://www.techappy.net/" href="http://www.techappy.net/" target="_blank"&gt;http://www.techappy.net/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.techappy.net/" target="_blank"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="fenx" border="0" alt="fenx" src="http://images.cnblogs.com/cnblogs_com/hielvis/201109/201109081200294821.jpg" width="702" height="362" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.techappy.net/" target="_blank"&gt;&lt;img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="rich" border="0" alt="rich" src="http://images.cnblogs.com/cnblogs_com/hielvis/201109/201109081200307362.jpg" width="704" height="407" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/hielvis/aggbug/2171189.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hielvis/archive/2011/09/08/2171189.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hielvis/archive/2011/08/28/2156533.html</id><title type="text">快乐技术沙龙 for Windows Phone 7</title><summary type="text">官方主页：http://www.techappy.net/</summary><published>2011-08-28T15:06:00Z</published><updated>2011-08-28T15:06:00Z</updated><author><name>快乐之王</name><uri>http://www.cnblogs.com/hielvis/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hielvis/archive/2011/08/28/2156533.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hielvis/archive/2011/08/28/2156533.html"/><content type="html">&lt;p&gt;&lt;img alt="" src="http://pic002.cnblogs.com/images/2011/140818/2011082822564490.png" width="794" height="363" /&gt;&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://pic002.cnblogs.com/images/2011/140818/2011082823022322.png" width="796" height="408" /&gt;&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://pic002.cnblogs.com/images/2011/140818/2011082823024949.png" width="796" height="416" /&gt;&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://pic002.cnblogs.com/images/2011/140818/2011082823030928.png" width="794" height="456" /&gt;&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://pic002.cnblogs.com/images/2011/140818/2011082823034066.png" width="795" height="407" /&gt;&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://pic002.cnblogs.com/images/2011/140818/2011082823040250.png" width="767" height="419" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 14pt;"&gt;官方主页：&lt;a href="http://www.techappy.net/"&gt;http://www.techappy.net/&lt;/a&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/hielvis/aggbug/2156533.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hielvis/archive/2011/08/28/2156533.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hielvis/archive/2011/05/24/2054935.html</id><title type="text">5月29号,望京微软,北京快乐技术沙龙,Blend设计示例提前看(Silverlight)</title><summary type="text">你在开发Silverlight/WPF/WP7应用程序？你不怎么会使用Blend？你们公司没有Blend设计师？你想做出更流程炫丽的界面？-5月29号，与你分享Blend设计，内容贯穿：深刻理解XAMl，附加属性，Behavior，Trigger&amp;&amp;Action，VSM，FluidMoveBehavior，FluidLayout，LayoutStates，FluidMoveTagSetBehavi...</summary><published>2011-05-24T01:29:00Z</published><updated>2011-05-24T01:29:00Z</updated><author><name>快乐之王</name><uri>http://www.cnblogs.com/hielvis/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hielvis/archive/2011/05/24/2054935.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hielvis/archive/2011/05/24/2054935.html"/><content type="html">&lt;style type="text/css"&gt; html {     height: 100%;     overflow: auto; } body {     height: 100%;     padding: 0;     margin: 0; } #silverlightControlHost {     height: 100%; } &lt;/style&gt;&lt;script type="text/javascript" src="Silverlight.js"&gt;&lt;/script&gt;&lt;script type="text/javascript"&gt;        function onSilverlightError(sender, args) {                    var appSource = "";            if (sender != null &amp;&amp; sender != 0) {                appSource = sender.getHost().Source;            }             var errorType = args.ErrorType;            var iErrorCode = args.ErrorCode;                        if (errorType == "ImageError" || errorType == "MediaError")                return;                        var errMsg = "Silverlight 应用程序中出现未处理的错误 " +  appSource + "\n" ;            errMsg += "Code: "+ iErrorCode + "    \n";            errMsg += "Category: " + errorType + "       \n";            errMsg += "Message: " + args.ErrorMessage + "     \n";            if (errorType == "ParserError")            {                errMsg += "File: " + args.xamlFile + "     \n";                errMsg += "Line: " + args.lineNumber + "     \n";                errMsg += "Position: " + args.charPosition + "     \n";            }            else if (errorType == "RuntimeError")            {                           if (args.lineNumber != 0)                {                    errMsg += "Line: " + args.lineNumber + "     \n";                    errMsg += "Position: " +  args.charPosition + "     \n";                }                errMsg += "MethodName: " + args.methodName + "     \n";            }            throw new Error(errMsg);        }    &lt;/script&gt;&lt;div id="silverlightControlHost"&gt;&lt;object data="data:application/x-oleobject;base64,QfXq3+HzJEysrJnDBxUISgAJAACeSgAAAz4AAAwAAAB3AGgAaQB0AGUAAAAAAAAAAAAAAAAAAAB+AAAAaAB0AHQAcAA6AC8ALwBmAGkAbABlAHMALgBjAG4AYgBsAG8AZwBzAC4AYwBvAG0ALwBoAGkAZQBsAHYAaQBzAC8AVABlAGMASABhAHAAcAB5AC4ATgBlAHQALgBTAGUAYwBvAG4AZAAuAEIAbABlAG4AZAAuAHgAYQBwAAAAPAAAAAAAAAAmAAAAbwBuAFMAaQBsAHYAZQByAGwAaQBnAGgAdABFAHIAcgBvAHIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAYAAAANAAuADAALgA1ADAAOAAyADYALgAwAAAACgAAAHQAcgB1AGUAAAAAAAAAAAAAAAAAAAA=" width="100%" height="600" type="application/x-silverlight-2"&gt;   &lt;param name="source" value="http://files.cnblogs.com/hielvis/TecHappy.Net.Second.Blend.xap" /&gt;   &lt;param name="onerror" value="onSilverlightError" /&gt;   &lt;param name="background" value="white" /&gt;   &lt;param name="minRuntimeVersion" value="4.0.50826.0" /&gt;   &lt;param name="autoUpgrade" value="true" /&gt;   &lt;a href="http://go.microsoft.com/fwlink/?LinkID=149156&amp;v=4.0.50826.0" style="text-decoration: none;"&gt;    &lt;img src="http://go.microsoft.com/fwlink/?LinkID=161376" alt="获取 Microsoft Silverlight" style="border-style: none" /&gt;   &lt;/a&gt;  &lt;/object&gt;&lt;iframe style="border-bottom: 0px; border-left: 0px; width: 0px; height: 0px; visibility: hidden; border-top: 0px; border-right: 0px" id="_sl_historyFrame"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;p&gt;你在开发Silverlight/WPF/WP7应用程序？&lt;/p&gt;&lt;p&gt;你不怎么会使用Blend？&lt;/p&gt;&lt;p&gt;你们公司没有Blend设计师？&lt;/p&gt;&lt;p&gt;你想做出更流程炫丽的界面？&lt;/p&gt;&lt;p&gt;-&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff00ff; font-size: 24pt"&gt;&lt;strong&gt;5月29号，与你分享Blend设计，内容贯穿：&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;深刻理解XAMl，附加属性，Behavior，Trigger&amp;amp;&amp;amp;Action，VSM，FluidMoveBehavior，FluidLayout，LayoutStates，FluidMoveTagSetBehavior，PathListBox&lt;/p&gt;&lt;p&gt;-&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff00ff; font-size: 24pt"&gt;&lt;strong&gt;我的Silverlight&amp;amp;Blend系列文章：&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;Behavior：&lt;a href="http://www.cnblogs.com/hielvis/archive/2010/10/06/1806813.html"&gt;http://www.cnblogs.com/hielvis/archive/2010/10/06/1806813.html&lt;/a&gt; &lt;/p&gt;&lt;p&gt;&amp;nbsp;Silverlight布局：&lt;a href="http://www.cnblogs.com/hielvis/archive/2010/10/12/1847025.html"&gt;http://www.cnblogs.com/hielvis/archive/2010/10/12/1847025.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;Blend模板设计：&lt;a href="http://www.cnblogs.com/hielvis/archive/2010/10/21/1857415.html"&gt;http://www.cnblogs.com/hielvis/archive/2010/10/21/1857415.html&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;XAML那些事儿：&lt;a href="http://www.cnblogs.com/hielvis/archive/2011/02/27/1966201.html"&gt;&lt;font color="#0066cc"&gt;http://www.cnblogs.com/hielvis/archive/2011/02/27/1966201.html&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;Blend 4：&lt;a href="http://www.cnblogs.com/hielvis/archive/2010/10/09/1846046.html"&gt;http://www.cnblogs.com/hielvis/archive/2010/10/09/1846046.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;-&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff00ff; font-size: 24pt"&gt;&lt;strong&gt;熟悉的名字：&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/nowpaper/" target="_blank"&gt;nowpaper&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/alexis/" target="_blank"&gt;Alexis&lt;/a&gt;&lt;/p&gt;&lt;p&gt;田永智(Windows Phone 7中文输入法作者)&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/chenkai/" target="_blank"&gt;chenkai&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/jyk/" target="_blank"&gt;金色海洋&lt;/a&gt;&lt;/p&gt;&lt;p&gt;.....&lt;/p&gt;&lt;p&gt;-&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff00ff; font-size: 24pt"&gt;&lt;strong&gt;特别嘉宾：&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;黄继佳：黄继佳是平台及工具事业部资深开发技术顾问负责Silverlight和IE项目&lt;/p&gt;&lt;p&gt;严飞，严飞是平台及工具事业部资深开发技术顾问负责WindowsPhone7项目&lt;/p&gt;&lt;p&gt;&amp;nbsp;-&lt;/p&gt;&lt;p&gt;&lt;img border="0" alt="" align="right" src="http://images.cnblogs.com/cnblogs_com/hielvis/last.jpg" width="803" height="247" /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff00ff; font-size: 24pt"&gt;&lt;strong&gt;活动详情：&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hielvis/archive/2011/05/18/2049521.html"&gt;http://www.cnblogs.com/hielvis/archive/2011/05/18/2049521.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/hielvis/aggbug/2054935.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hielvis/archive/2011/05/24/2054935.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hielvis/archive/2011/05/18/2049521.html</id><title type="text">【5月29号】北京快乐技术沙龙第二期活动【微软站】</title><summary type="text">联合举办！北京中游在线科技有限公司是无端化领域的网络游戏开发公司，是微软中国战略合作伙伴，开发有全球首款SilverlightMMORPG《窝窝世界》，是全国非商业性质推广.Net技术的先锋组织！！--一，本次活动详情 活动时间：2011-5-29 活动地点：：北京市朝阳区望京街8号利星行广场C座，微软大厦316 活动联系人：秦春林（186 1024 8500） 活动开始时间：下午1点 活动结束时间：下午5点-二，活动主题 本次活动主要分两个场次： 13:00-14:30：交流环节，每个人简短介绍自己，介绍自己的工作经验，希望学习了解的技术等等，不限形 式，让大家之间相互认识。 14:40-1</summary><published>2011-05-17T22:27:00Z</published><updated>2011-05-17T22:27:00Z</updated><author><name>快乐之王</name><uri>http://www.cnblogs.com/hielvis/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hielvis/archive/2011/05/18/2049521.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hielvis/archive/2011/05/18/2049521.html"/><content type="html">&lt;p&gt;&lt;span style="color: #000000; font-size: 18pt;"&gt;&lt;strong&gt;&amp;nbsp;&lt;/strong&gt;&lt;/span&gt;&lt;span style="color: #000000; font-size: 12px;"&gt;&lt;a target="_blank" href="http://www.techappy.net"&gt;&lt;img height="78" width="244" src="http://pic002.cnblogs.com/images/2011/140818/2011051808310280.jpg" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="color: #ff00ff; font-size: 15px;"&gt;&lt;strong&gt;&lt;span style="color: #888888;"&gt;&lt;span style="color: #000000;"&gt;&amp;nbsp;&lt;a target="_blank" href="http://www.nxria.com"&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/140818/2011051808312566.png" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;span style="color: #888888;"&gt;&lt;span style="color: #000000;"&gt;联合举办！&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff00ff; font-size: 15px;"&gt;&lt;strong&gt;&lt;span style="color: #888888;"&gt;&lt;span style="color: #000000;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&amp;nbsp;&lt;span style="color: #000000;"&gt;&lt;em&gt;&lt;span style="font-size: 14px;"&gt;&lt;a target="_blank" href="http://www.nxria.com"&gt;北京中游在线科技有限公司&lt;/a&gt;是无端化领域的网络游戏开发公司，是微软中国战略合作伙伴，开发有全球首款SilverlightMMORPG《窝窝世界》，是全国非商业性质推广.Net技术的先锋组织！！&lt;/span&gt;&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff00ff; font-size: 18pt;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff00ff; font-size: 18pt;"&gt;&lt;strong&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/140818/2011051806262531.jpg" /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff00ff; font-size: 18pt;"&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/span&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000000; font-size: 12px;"&gt;-&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #000000; font-size: 12px;"&gt;-&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff00ff; font-size: 18pt;"&gt;&lt;strong&gt;一，本次活动详情&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 活动时间：2011-5-29&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 活动地点：：北京市朝阳区望京街8号利星行广场C座，微软大厦316&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 活动联系人：秦春林（186 1024 8500）&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 活动开始时间：下午1点&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 活动结束时间：下午5点&lt;/p&gt;&lt;p&gt;-&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff0000;"&gt;&lt;strong&gt;&lt;span style="font-size: 18pt;"&gt;二，活动主题&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 本次活动主要分两个场次：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 13:00-14:30：交流环节，每个人简短介绍自己，介绍自己的工作经验，希望学习了解的技术等等，不限形&amp;nbsp;&amp;nbsp; 式，让大家之间相互认识。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 14:40-17:00：技术环节，示例讲解Blend的各个方面的使用和设计，每个知识点会有一个比较擅长的人讲解和操作一个小例子：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; XAML及Blend设计器设计时（10-20分钟）&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 行为（Behavior）和触发器（20-30分钟）&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 模板和修改控件样式（20-30分钟）&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 控件自定义（10-30分钟）&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 状态设计（状态管理器，缓动函数等）（20-30分钟）&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Blend中的一般行为介绍和分析（10-20分钟）&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 总结：Blend可以设计大部分与UI相关的界面和行为动画（无需Code）&lt;/p&gt;&lt;p&gt;-&lt;/p&gt;&lt;p&gt;&lt;span style="color: #0000ff;"&gt;&lt;strong&gt;&lt;span style="font-size: 18pt;"&gt;三，活动要求&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 正如快乐技术沙龙的主旨，我们希望每个人都能参与到活动中，将自己学习工作过程中的一些经验分享。每个人都有自己的爱好和擅长的技术，每个人都有一些经验可以分享。所以我们的主题的主要形式是每个人来讲述自己的理解和经验。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 但是，我们不会要求每个人准备一份PPT或者演讲稿什么的，你只需要那么几分钟时间简单描述你擅长的技术或者思想就行。当然我们希望经验丰富的朋友能够多分享一点给其他朋友。&lt;/p&gt;&lt;p&gt;如果你觉得自己啥都不会，或者不能讲，那么你一定遇到困难，请讲出你遇到的困难或者迷惑。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 总之，希望每个人都参与讨论和分享。&lt;/p&gt;&lt;p&gt;-&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff00ff;"&gt;&lt;strong&gt;&lt;span style="font-size: 18pt;"&gt;四，警告&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 很牛不屑于分享的人不能参见&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 很菜又很自卑的人不能参加&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 只想当听众的人不能参加&lt;/p&gt;&lt;p&gt;&amp;nbsp;-&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff0000;"&gt;&lt;strong&gt;&lt;span style="font-size: 24pt;"&gt;五，报名方式&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 因为我们每个人都需要参与主题讨论和分享，所以我们需要提前了解一下每个人的大概情况，以便于控制和推动活动有序进行，请按一下格式发送Email到 &lt;span style="color: #0000ff;"&gt;Tech.Happy@live.com &lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background-color: #c0c0c0;"&gt;唯一标识符(URI)：网名，QQ昵称，或者博客园ID，或者真实姓名&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background-color: #c0c0c0;"&gt;工作年限：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background-color: #c0c0c0;"&gt;擅长技术或领域（可以为我们分享的内容）：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background-color: #c0c0c0;"&gt;期望学习和了解的技术：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background-color: #c0c0c0;"&gt;联系方式(可选)：便于我们有事联系你。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;另外，也很欢迎附上你对活动的建议，^_^&lt;/p&gt;&lt;p&gt;-&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff6600;"&gt;&lt;strong&gt;&lt;span style="font-size: 18pt;"&gt;六，乘车路线&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;活动地点：北京市朝阳区望京街8号 利星行广场C座，微软大厦316&lt;/p&gt;&lt;p&gt;乘车路线：乘地铁15号线至望京站下，然后打车（5分钟）或步行（15分钟）至微软大厦&lt;/p&gt;&lt;p&gt;-&lt;/p&gt;&lt;p&gt;完整活动文档下载：&lt;/p&gt;&lt;p&gt;&lt;a href="http://files.cnblogs.com/hielvis/Techappy_Blend.pdf"&gt;http://files.cnblogs.com/hielvis/Techappy_Blend.pdf&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/hielvis/aggbug/2049521.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hielvis/archive/2011/05/18/2049521.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hielvis/archive/2011/05/03/2034649.html</id><title type="text">北京快乐技术沙龙5月8号活动介绍</title><summary type="text">一，北京"快乐技术沙龙"简介北京"快乐技术沙龙"是由博客园"快乐之王"(http://hielvis.cnblogs.com) 发起的，主要面向.NET技术开发者的不定期举行的线下讨论交流活动。2011年5月8号活动是该技术沙龙的第一期活动。"快乐技术沙龙"不定期举行：1. 地点不固定：地点可以是由一些软件或其他公司提供，也可以根据大家协定在一些公共场所，如咖啡厅，或者其他休闲场所。甚至可以是户外的形式。2. 形式不固定：可以是单纯的演讲式，可以是讨论式，可以是类似电视节目主持的方式等等。3. 内容不固定：主要针对</summary><published>2011-05-03T01:25:00Z</published><updated>2011-05-03T01:25:00Z</updated><author><name>快乐之王</name><uri>http://www.cnblogs.com/hielvis/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hielvis/archive/2011/05/03/2034649.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hielvis/archive/2011/05/03/2034649.html"/><content type="html">&lt;p&gt;&lt;span style="color: #ff00ff; font-size: 14pt;"&gt;&lt;strong&gt;一，北京"快乐技术沙龙"简介&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;北京"快乐技术沙龙"是由博客园"快乐之王"(&lt;a href="http://hielvis.cnblogs.com/"&gt;http://hielvis.cnblogs.com&lt;/a&gt;) 发起的，主要面向.NET技术开发者的不定期举行的线下讨论交流活动。2011年5月8号活动是该技术沙龙的第一期活动。&lt;/p&gt;&lt;p&gt;"快乐技术沙龙"不定期举行：&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1. 地点不固定：&lt;/strong&gt;地点可以是由一些软件或其他公司提供，也可以根据大家协定在一些公共场所，如咖啡厅，或者其他休闲场所。甚至可以是户外的形式。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2. 形式不固定：&lt;/strong&gt;可以是单纯的演讲式，可以是讨论式，可以是类似电视节目主持的方式等等。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;3. 内容不固定：&lt;/strong&gt;主要针对.NET技术，但是内容不固定。可以是前端，可以是数据库，架构或者某一类具体技术等。但是每一期会有几个协定的主题内容。会提前告知每个参与者。&lt;/p&gt;&lt;p&gt;&amp;nbsp;北京有许许多多的技术沙龙，有大公司主持的，有大的社区网站主持等等，然而快乐技术沙龙的出发点和宗旨不一样。&lt;/p&gt;&lt;p&gt;一般的技术沙龙主要由几场演讲组成，每一场的演讲者是某个领域的牛人。整场活动围绕这几个牛人展开，会议期间很少有人提问，参与者之间也缺乏足够的交流。整个流程就是&amp;ldquo;进会场&amp;rdquo;-&amp;ldquo;听演讲&amp;rdquo;-&amp;ldquo;离开会场&amp;rdquo;。而且事实上，除非很专业的沙龙，一般演讲的内容都是很基础的。&lt;/p&gt;&lt;p&gt;快乐技术沙龙，关注开发人员的成长，主要围绕以下两方面展开：&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color: #ff00ff;"&gt;1.快乐生活：&lt;/span&gt;&lt;/strong&gt;&amp;nbsp;我们一般都是来自异地，远离家乡和亲人在外面打工。然而现在大都市人与人之间的距离很远。我们缺乏朋友，因此生活有些单调。&lt;/p&gt;&lt;p&gt;可是既然我们大部分时间要在这里度过，为什么我们不过的更快乐一些呢！&lt;/p&gt;&lt;p&gt;在一个城市快乐的生活，我觉得首要的是朋友。我们需要一些知心的朋友，可以一起玩，一起聊天，一起学习，一起交流。朋友之间也会相互影响，跟优秀的人在一起，你也会走向优秀；更积极的人在一起，你也会更有激情。而这些朋友对我们的生活和职业发展都是有益处的。&lt;/p&gt;&lt;p&gt;所以，在我们的活动中，我们重点强调每个参与者的交流，分享自己的技术经验，学习方法等。我们的活动内容不是某个牛人的指点，而是所有参与者的经验分享。以此增进每个人的了解，也许他们会成为你的一个朋友。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color: #ff00ff;"&gt;2.快乐工作：&lt;/span&gt;&lt;/strong&gt;有时候我们觉得技术日新月异，感叹自己跟不上技术的发展，总是在追逐技术的变化，并且感到这种变化太快，总是觉得技术的生活过得很累，感到前途黯淡。&lt;/p&gt;&lt;p&gt;然而也有一种现象是，我们看到国外，其实包括台湾，有一些技术大牛，不但技术很牛，并且感觉他们过得很开心，不像我们过得那么痛苦。&lt;/p&gt;&lt;p&gt;然而，几乎可以看得出，这些悲观的态度里面有很多是对自己技术没有信心，而不是对行业没有信心。所以既然这样，与其没有结果的抱怨，不如我们来真正的提高自己。&lt;/p&gt;&lt;p&gt;所以，我们希望在技术交流中，你能够不光了解一种技术。更重要的是了解不同人的学习方法，技术经验和一些思想。这些相比于技术细节，也许是更能真正使你技术提高的。&amp;nbsp; &lt;/p&gt;&lt;p&gt;所以，从生活和工作两个方面，通过结交朋友和学习技术经验两个方面，快乐技术沙龙真正在乎的结果，其实是每个人的成长。我们希望每个人都在一个城市快乐生活，快乐成长。&lt;/p&gt;&lt;p&gt;所以，在快乐技术沙龙中，每个人都是主角，每个人都应该积极分享自己的经验。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;span lang="zh-CN" style="font-family: 微软雅黑;"&gt;费用原则上&lt;/span&gt;&lt;span lang="en-US" style="font-family: Calibri;"&gt;AA&lt;/span&gt;&lt;span lang="zh-CN" style="font-family: 微软雅黑;"&gt;，不过有时候会有公司赞助。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span lang="zh-CN" style="font-family: 微软雅黑;"&gt;联系方式，目前以&lt;/span&gt;&lt;span lang="en-US" style="font-family: Calibri;"&gt;QQ&lt;/span&gt;&lt;span lang="zh-CN" style="font-family: 微软雅黑;"&gt;群&lt;/span&gt;&lt;span lang="en-US" style="font-family: 微软雅黑;"&gt;(&lt;/span&gt;&lt;span lang="zh-CN" style="font-family: 微软雅黑;"&gt;51825601&lt;/span&gt;&lt;span lang="en-US" style="font-family: 微软雅黑;"&gt;)&lt;/span&gt;&lt;span lang="zh-CN" style="font-family: 微软雅黑;"&gt;为主，后面会建立相关站点。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span lang="zh-CN" style="font-family: 微软雅黑;"&gt;Emial: &lt;a href="mailto:Tech.Happy@live.com"&gt;Tech.Happy@live.com&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span lang="zh-CN" style="font-family: 微软雅黑;"&gt;-&lt;/span&gt;&lt;/p&gt;&lt;p&gt;二，活动详情&lt;/p&gt;&lt;p&gt;&lt;span lang="zh-CN" style="font-family: 微软雅黑;"&gt;活动时间：&lt;/span&gt;&lt;span lang="en-US" style="font-family: 微软雅黑;"&gt;2011-5&lt;/span&gt;&lt;span lang="en-US" style="font-family: Calibri;"&gt;-8&lt;/span&gt;&lt;/p&gt;&lt;p&gt;活动地点：北京市海淀区上地七街八维教育内金和软件（后附乘车路线）&lt;/p&gt;&lt;p&gt;活动联系人：快乐之王（186 1024 8500）&lt;/p&gt;&lt;p&gt;&lt;span lang="zh-CN" style="font-family: 微软雅黑;"&gt;活动开始时间：上午&lt;/span&gt;&lt;span lang="en-US" style="font-family: Calibri;"&gt;10&lt;/span&gt;&lt;span lang="zh-CN" style="font-family: 微软雅黑;"&gt;点至&lt;/span&gt;&lt;span lang="en-US" style="font-family: Calibri;"&gt;10&lt;/span&gt;&lt;span lang="zh-CN" style="font-family: 微软雅黑;"&gt;点半&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span lang="zh-CN" style="font-family: 微软雅黑;"&gt;活动结束时间：下午&lt;/span&gt;&lt;span lang="en-US" style="font-family: Calibri;"&gt;4&lt;/span&gt;&lt;span lang="zh-CN" style="font-family: 微软雅黑;"&gt;点半至&lt;/span&gt;&lt;span lang="en-US" style="font-family: Calibri;"&gt;5&lt;/span&gt;&lt;span lang="zh-CN" style="font-family: 微软雅黑;"&gt;点左右&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span lang="zh-CN" style="font-family: 微软雅黑;"&gt;-&lt;/span&gt;&lt;/p&gt;&lt;p&gt;三，活动主题&lt;/p&gt;&lt;p&gt;本次活动主要分三个场次：&lt;/p&gt;&lt;p&gt;10:00-10:30：进场，介绍沙龙基本形式和内容，大家相互之间认识一下&lt;/p&gt;&lt;p&gt;10:30-12:00：主要讨论和分享Silverlight，WPF开发相关技术。包括WP7，MVVM，Blend的使用等。&lt;/p&gt;&lt;p&gt;12:30-13:30：感兴趣的根据天气可以举行一场篮球赛，也可以玩乒乓球，室内足球，飞镖等&lt;/p&gt;&lt;p&gt;13:30-15:00：主要讨论Web开发，包括前端，缓存，搜索引擎优化等内容。&lt;/p&gt;&lt;p&gt;15:00-17:00：艺街开放平台架构思路，开源方式，以及发展方向等。如果你还不了解，参见：&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://www.cnblogs.com/hielvis/archive/2011/03/30/1999366.html"&gt;http://www.cnblogs.com/hielvis/archive/2011/03/30/1999366.html&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span lang="zh-CN" style="font-family: 微软雅黑;"&gt;-&lt;/span&gt;&lt;/p&gt;&lt;p&gt;四，活动要求&lt;/p&gt;&lt;p&gt;正如快乐技术沙龙的主旨，我们希望每个人都能参与到活动中，将自己学习工作过程中的一些经验分享。每个人都有自己的爱好和擅长的技术，每个人都有一些经验可以分享。所以我们的主题的主要形式是每个人来讲述自己的理解和经验。&lt;/p&gt;&lt;p&gt;&lt;span lang="zh-CN" style="font-family: 微软雅黑;"&gt;但是，我们不会要求每个人准备一份&lt;/span&gt;&lt;span lang="en-US" style="font-family: Calibri;"&gt;PPT&lt;/span&gt;&lt;span lang="zh-CN" style="font-family: 微软雅黑;"&gt;或者演讲稿什么的，你只需要那么几分钟时间简单描述你擅长的技术或者思想就行。当然我们希望经验丰富的朋友能够多分享一点给其他朋友。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;如果你觉得自己啥都不会，或者不能讲，那么你一定遇到困难，请讲出你遇到的困难或者迷惑。&lt;/p&gt;&lt;p&gt;总之，希望每个人都参与讨论和分享。&lt;/p&gt;&lt;p&gt;-&lt;/p&gt;&lt;p&gt;五，警告&lt;/p&gt;&lt;p&gt;很牛不屑于分享的人不能参见&lt;/p&gt;&lt;p&gt;很菜又很自卑的人不能参加&lt;/p&gt;&lt;p&gt;只想当听众的人不能参加&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;另外，鉴于快乐技术沙龙这种思想和形式的首次尝试，我们不能保证效果很好，不能保证给予你太多实质上的东西。&lt;span style="font-weight: bold;"&gt;如果你承受不起这种失望，强烈建议你不要参加！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-weight: bold;"&gt;-&lt;/span&gt;&lt;/p&gt;&lt;p&gt;六，其他&lt;/p&gt;&lt;p&gt;&lt;span lang="zh-CN" style="font-family: 微软雅黑;"&gt;本次活动由北京金和软件公司&lt;/span&gt;&lt;span lang="en-US" style="font-family: Calibri;"&gt;(&lt;/span&gt;&lt;a href="http://jh0101.com/"&gt;&lt;span lang="en-US" style="font-family: Calibri;"&gt;ht&lt;/span&gt;&lt;span lang="en-US" style="font-family: 微软雅黑;"&gt;tp://jh0101.com&lt;/span&gt;&lt;/a&gt;&lt;span lang="en-US" style="font-family: Calibri;"&gt;) &lt;/span&gt;&lt;span lang="zh-CN" style="font-family: 微软雅黑;"&gt;赞助，提供糕点，茶水等。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span lang="zh-CN" style="font-family: 微软雅黑;"&gt;-&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff00ff; font-size: 16px;"&gt;&lt;strong&gt;七，报名方式&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;因为我们每个人都需要参与主题讨论和分享，所以我们需要提前了解一下每个人的大概情况，以便于控制和推动活动有序进行，请按一下格式发送Email到 &lt;strong&gt;&lt;span style="color: #ff00ff;"&gt;Tech.Happy@live.com &lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background-color: #ccffff;"&gt;唯一标识符(URI)：网名，QQ昵称，或者博客园ID，或者真实姓名&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background-color: #ccffff;"&gt;工作年限：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background-color: #ccffff;"&gt;擅长技术或领域：可以为我们分享的内容，能准备示例Demo更加，您需要花几分钟的时间分享一下，^_^&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background-color: #ccffff;"&gt;期望学习和了解的技术：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background-color: #ccffff;"&gt;联系方式(可选)：便于我们有事联系你。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background-color: #ccffff;"&gt;您对活动的建议：很欢迎附上你对活动的建议，^_^&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="background-color: #ccffff;"&gt;-&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #ff0000; font-size: 14pt;"&gt;&lt;strong&gt;八，乘车路线&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;活动地点：北京市海淀区上地七街八维教育内金和软件&lt;/p&gt;&lt;p&gt;乘车路线：城铁13号线西二旗站换乘509路公交至软件园南站或者114至软件园东站向西300米左右&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 公交站上地七街(205,114,112,717)（有个大转盘）向西直走，穿过一个十字路口过200米即是八维教育&lt;/p&gt;&lt;p&gt;&lt;img src="http://pic002.cnblogs.com/images/2011/140818/2011050308401695.gif" /&gt;&lt;/p&gt;&lt;p&gt;-&lt;/p&gt;&lt;p&gt;&lt;span style="font-size: 18pt;"&gt;&lt;strong&gt;&lt;span style="color: #ff00ff;"&gt;九，活动文档下载&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://files.cnblogs.com/hielvis/%E5%8C%97%E4%BA%AC%E5%BF%AB%E4%B9%90%E6%8A%80%E6%9C%AF%E6%B2%99%E9%BE%99.pdf"&gt;http://files.cnblogs.com/hielvis/%E5%8C%97%E4%BA%AC%E5%BF%AB%E4%B9%90%E6%8A%80%E6%9C%AF%E6%B2%99%E9%BE%99.pdf&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/hielvis/aggbug/2034649.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hielvis/archive/2011/05/03/2034649.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hielvis/archive/2011/05/03/2033114.html</id><title type="text">托管可扩展框架MEF高清视频下载+在线Silverlight流式播放+源代码+PPT</title><summary type="text">Content：这是给一些朋友介绍Managed Extensibility Framewo（MEF）的视频，第一次录制视频，请多多包涵！由于博客园不支持ifreame，所以很遗憾不能直接放到博客园播放，请点击后面的链接，该页面只有一个Silverlight播放器。刚进去需要等一点时间（应该不到一分钟）加载，请耐心等一下，视频肯定会出来的！你的网速越快，视频越清晰，反之会有点模糊！这是基于Silverlight流式加载的！在考虑有时间也做几个类似的Silverlight的视频。-Silverlight Streaming顺便介绍的是，一个这样的Silverlight视频不需要主机，只需要Azu</summary><published>2011-05-03T01:24:00Z</published><updated>2011-05-03T01:24:00Z</updated><author><name>快乐之王</name><uri>http://www.cnblogs.com/hielvis/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hielvis/archive/2011/05/03/2033114.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hielvis/archive/2011/05/03/2033114.html"/><content type="html">&lt;p&gt;&lt;span style="color: #ff00ff; font-size: 18pt;"&gt;&lt;strong&gt;Content：&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;这是给一些朋友介绍Managed Extensibility Framewo（MEF）的视频，第一次录制视频，请多多包涵！&lt;/p&gt;&lt;p&gt;由于博客园不支持ifreame，所以很遗憾不能直接放到博客园播放，请点击后面的链接，该页面只有一个Silverlight播放器。&lt;/p&gt;&lt;p&gt;刚进去需要等一点时间（应该不到一分钟）加载，请耐心等一下，视频肯定会出来的！&lt;/p&gt;&lt;p&gt;你的网速越快，视频越清晰，反之会有点模糊！这是基于Silverlight流式加载的！&lt;/p&gt;&lt;p&gt;在考虑有时间也做几个类似的Silverlight的视频。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;img src="http://pic002.cnblogs.com/images/2011/140818/2011042921161979.jpg" /&gt;&lt;/p&gt;&lt;p&gt;-&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color: #ff00ff; font-size: 18pt;"&gt;Silverlight Streaming&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;顺便介绍的是，一个这样的Silverlight视频不需要主机，只需要Azure中的Blob就能搞定，甚至不需要Azure的虚拟机，Blob的费用是很低的，很划算。如果你也想体验怎么用，参看Smarx的博客：&lt;/p&gt;&lt;p&gt;&lt;a href="http://blog.smarx.com/posts/smooth-streaming-with-windows-azure-blobs-and-cdn"&gt;http://blog.smarx.com/posts/smooth-streaming-with-windows-azure-blobs-and-cdn&lt;/a&gt;&lt;/p&gt;&lt;p&gt;-&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="color: #ff6600; font-size: 18pt;"&gt;Expression Encoder&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;另外一点就是Expression Encoder默认是不支持AVI格式的，需要下载一个解码器：&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.free-codecs.com/"&gt;http://www.free-codecs.com/&lt;/a&gt;&lt;/p&gt;&lt;p&gt;这样你就可以在Encoder中处理AVI格式的视频&lt;/p&gt;&lt;p&gt;-&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 18pt; color: #ff0000;"&gt;Downloads&lt;/span&gt;&lt;/strong&gt;&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; &lt;a href="http://egy.blob.core.windows.net/mef/Default.html"&gt;http://egy.blob.core.windows.net/mef/Default.html&lt;/a&gt;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;a href="http://files.cnblogs.com/hielvis/MEFDemo.rar"&gt;http://files.cnblogs.com/hielvis/MEFDemo.rar&lt;/a&gt;&lt;/p&gt;&lt;p&gt;PPT ：&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;a href="http://files.cnblogs.com/hielvis/MEF.pptx"&gt;http://files.cnblogs.com/hielvis/MEF.pptx&lt;/a&gt;&lt;/p&gt;&lt;p&gt;高清版视频下载(514M)： &lt;a href="http://egy.blob.core.windows.net/videos/mef.avi"&gt;http://egy.blob.core.windows.net/videos/mef.avi&lt;/a&gt;&lt;/p&gt;&lt;p&gt;-&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size: 18pt; color: #ff00ff;"&gt;快乐技术沙龙：&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;顺便提一下：上一篇提到的技术沙龙初步计划5月第一个周末（5月7号或者5月8号），感兴趣的朋友赶紧报名！&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hielvis/archive/2011/05/02/2034649.html"&gt;http://www.cnblogs.com/hielvis/archive/2011/05/02/2034649.html&lt;/a&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/hielvis/aggbug/2033114.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hielvis/archive/2011/05/03/2033114.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/hielvis/archive/2011/03/30/1999366.html</id><title type="text">艺街开放平台开源计划</title><summary type="text">相信园子里也有一部分朋友听说过艺街开放平台了，还有很多关注过她的开发过程。之前是作为自己的一个创业项目，曾经辞职4个多月时间开发，受到很多朋友的支持和鼓励。其中最感谢的要算善友了，他不仅很支持并且给予很多技术上的指点，例如最终采用的OpenID和OAuth的方案，并且我们都喜欢REST；另外还有麒麟也很支持，我们曾经深入讨论过技术方案；还有炭炭等等，以及我的QQ群的很多朋友，他们陪我度过了那4个月...</summary><published>2011-03-30T02:43:00Z</published><updated>2011-03-30T02:43:00Z</updated><author><name>快乐之王</name><uri>http://www.cnblogs.com/hielvis/</uri></author><link rel="alternate" href="http://www.cnblogs.com/hielvis/archive/2011/03/30/1999366.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/hielvis/archive/2011/03/30/1999366.html"/><content type="html">&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 相信园子里也有一部分朋友听说过艺街开放平台了，还有很多关注过她的开发过程。之前是作为自己的一个创业项目，曾经辞职4个多月时间开发，受到很多朋友的支持和鼓励。其中最感谢的要算&lt;/span&gt;&lt;a href="http://www.cnblogs.com/shanyou/"&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;善友&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;了，他不仅很支持并且给予很多技术上的指点，例如最终采用的OpenID和OAuth的方案，并且我们都喜欢REST；另外还有&lt;/span&gt;&lt;a href="http://www.cnblogs.com/zhuqil/"&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;麒麟&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;也很支持，我们曾经深入讨论过技术方案；还有&lt;/span&gt;&lt;a href="http://www.cnblogs.com/waitrabbit/"&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;炭炭&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;等等，以及我的QQ群的很多朋友，他们陪我度过了那4个月枯燥的岁月！&lt;/span&gt;&amp;nbsp; &lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 到目前艺街的思路也算完整并完成了很基础的开发。由于种种原因（后面会详细介绍），现在打算将艺街开源出来。本篇会介绍艺街的成长过程以及公布开源计划，如果你感兴趣欢迎你的加入，^_^！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;体验地址：http://elvis.egyee.com&lt;/p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;p&gt;&lt;span style="color: #0000ff; font-family: 微软雅黑; font-size: large;" face="微软雅黑" size="5" color="#0000ff"&gt;&lt;strong&gt;最初的梦想&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2010年4月左右，我初步有了这个想法。那个时候想法比较简单：我手上有一个ipod touch，感觉这样的方式使用应用程序确实很方便，很丰富，能将各种应用集中到一个地方，用户可随意选择。然而遗憾的是，你必须随时带着这个终端才能使用。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 而反观各种互联网，各种应用被分布在多个网站，每个网站都会重复建立用户的基本信息，用户需要不停地注册和记住各种各样的密码和账号，不同的网站之间几乎都有重复的功能等等。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 于是，最初的想法就是&lt;em&gt;&lt;strong&gt;能不能把一个iphone终端换成一个浏览器&lt;/strong&gt;&lt;/em&gt;！&lt;/span&gt;&lt;/p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;p&gt;&lt;span style="color: #00ff00; font-family: 微软雅黑; font-size: large;" face="微软雅黑" size="5" color="#00ff00"&gt;&lt;strong&gt;酝酿&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 这个想法其实很简单，或许你曾经也有过这样的想法。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 然而它却使我着迷和疯狂：因为凭借我当时的技术经验，很多技术问题我根本无法实现！然而，就像大多数热血沸腾的程序员一样，我们都有一颗冲动不安的心，尤其对于刚毕业半年的我，她很快就会引发你的激情，使你想到了国外的某个谁谁谁，她很快就会变成你的一个创业梦想！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 于是，我开始寻思解决方案：首先想到了用Silverlight来实现，接下来就是最大的挑战，手机终端会提供数据存储并且可以按照软件，而基于浏览器你得到为不同的应用程序提供Web服务的托管，你得为每个应用程序的Web服务提供基础的数据服务；&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 你得有一个框架，让开发者可以发布Silverlight应用程序包，这个简单；你得让开发者可以以组件的形式发布Web服务，这个方案并不知道怎么实现，它大概就是让一个WCF的集合打包成一个dll，并且需要被正确路由；你得为每个应用提供存储服务，这个没辙了&amp;hellip;&amp;hellip;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 然而，梦想和想法之间的区别就是，梦想会刺激你不断的想办法去实现它，而想法可能只是一个想法。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 那个时候刚好公司有技术顾问讲解Windows Azure，于是是否看到一些希望，那个时候Azure几乎很少中文资料，激情之下居然阅读了大部分的Azure文档和一些关于Azure的电子书，沿着自己的思路不断学习不断完善。从2010年4月到2010年9月，期间我无时无刻不在想着怎样实现它，无时无刻不在想着怎样完善它，思想和可行性都慢慢变得越来越成熟，可是期间的过程真是相当的困难，因为很多技术问题对于当时的我来说是无法完成的。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 下面这张图文件的创建日期是2010年6月15日：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hielvis/201103/201103300151217425.png"&gt;&lt;img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image_thumb[4]" border="0" alt="image_thumb[4]" src="http://images.cnblogs.com/cnblogs_com/hielvis/201103/201103300151522138.png" width="655" height="487" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 而这一张图的创建时间是2010年9月24日：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hielvis/201103/201103300151571087.jpg"&gt;&lt;img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="捕获_thumb[2]" border="0" alt="捕获_thumb[2]" src="http://images.cnblogs.com/cnblogs_com/hielvis/201103/201103300152037046.jpg" width="522" height="345" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 当它变成这一张图的时候，我辞职了：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hielvis/201103/201103300152347714.png"&gt;&lt;img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image_thumb[8]" border="0" alt="image_thumb[8]" src="http://images.cnblogs.com/cnblogs_com/hielvis/201103/201103300153099174.png" width="596" height="409" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #9b00d3; font-family: 微软雅黑; font-size: large;" face="微软雅黑" size="5" color="#9b00d3"&gt;&lt;strong&gt;辞职实现：&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2010年9月30日，我办完了离职手续，汗，工作大半年那个时候手上才8000块钱左右！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 当它的技术方案成熟之后，我的心思再也不能放在工作上，虽然那个时候没有资金。从一开始我考虑的就是首先要把它做出来，只有做出来才知道它怎么样，如果不行动结果什么都没有，所以那段时间几乎没有考虑运营和推广的事情。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 为了筹钱，还卖掉了ipod touch，开500还被刀了50，呵呵&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 辞职之后其实还算顺利，因为整个思路非常清晰了，基本上是按计划实现，之后只是技术实现的细节，虽然也会遇到一些挑战，但是大的方向没有问题的。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 那段时间体验到了一种感觉，就是你不断去解决问题，得到一点成就，然后很快就会遇到另一个问题；有些问题是令人沮丧的，因为毕竟我没有太多的技术经验。这样的感觉不断的跟着我大半年的时间直至今年初的完工！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 辞职之后也积极参与博客园技术分享，认识了善友，麒麟，谢方，已经很多加入QQ群的朋友。尤其得到善友的不少指点，真是非常感激！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 辞职之后为了节省房租，跑到了离深圳很远的一个海边小镇--南澳！300的房租还算可以，而且在海边&lt;/span&gt;&lt;/p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;经历了大概4个月的时间，大体完成了开发，你可以从这里看到演示地址，它可以托管Web服务，它可以为每个用户的每个应用程序提供标准的Windows Azure存储API，其中的ipivot应用程序便是一个真实的例子：&lt;/span&gt;&amp;nbsp;&lt;p&gt;&lt;a href="http://images.cnblogs.com/cnblogs_com/hielvis/201103/201103300153461199.png"&gt;&lt;img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image_thumb[12]" border="0" alt="image_thumb[12]" src="http://images.cnblogs.com/cnblogs_com/hielvis/201103/201103300154187482.png" width="767" height="488" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #00ff00; font-family: 微软雅黑; font-size: large;" face="微软雅黑" size="5" color="#00ff00"&gt;&lt;strong&gt;思考运作&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 之前一直只想把它实现出来。这个时候虽然东西大体出来了，但是运作却并非那么简单。技术上一些问题可以查资料学习，这个事情却没办法学习&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 也在深圳找过一些朋友一起做，但是都不太可行，他们都不可能像我一样全职做这件事情，都只能业余参与，这样肯定做不好事情的。另外，我的同学到是很多热情的愿意出点钱，但是觉得不知道怎么着手运营风险太大却不敢要他们的钱。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 也许，这就是我们缺乏各种社会经验的方面，并且这些事情不可能通过学习得到。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 想了很久无果，后来刚好看到创新工场的助跑计划。&lt;/span&gt;&lt;/p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;p&gt;&lt;span style="color: #9b00d3; font-family: 微软雅黑; font-size: large;" face="微软雅黑" size="5" color="#9b00d3"&gt;&lt;strong&gt;面试创新工场助跑计划&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在提交了创新工程助跑计划之后，2月底收到面试通知。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 在激情的半个小时演讲之后，创新工场的投资人士告诉我：&lt;/span&gt;&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;&lt;span style="color: #0000ff; font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3" color="#0000ff"&gt;&lt;em&gt;这个平台，不是你要做的事情，它是Google要做的事情，你没有用户开发者为什么在你上面开发应用程序，你没有应用程序，用户为什么使用。希望没有打击到你，再见！&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 很简洁，很干脆，原来这就是投资者！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 一个北大青鸟的老师也说：&lt;/span&gt;&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;&lt;span style="color: #0000ff; font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3" color="#0000ff"&gt;&lt;em&gt;你基于微软的云设施，你给微软钱，你赚什么钱&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #0000ff; font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3" color="#0000ff"&gt;&lt;em&gt;你这个平台如果我们来做更有实力和影响力，你凭什么做&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 后来在经济压力下，我找工作了，(&amp;gt;_&amp;lt;)&lt;/span&gt;&lt;/p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;p&gt;&lt;span style="color: #00ff00; font-family: 微软雅黑; font-size: large;" face="微软雅黑" size="5" color="#00ff00"&gt;&lt;strong&gt;开源计划&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 经受一系列打击之后，其实想想做平台也许真不是那么好做的：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Facebook到一定规模的时候才有平台，腾讯统治中国之后开始做平台，淘宝拥有大量流量之后开始平台。平台它需要一个产业链，凭空做平台的难度很大！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 另一方面，鉴于我自己的工作经验，还有许多需要学习和提高锻炼！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 但是，同时我觉得从技术上至少它是可行的，因此我决定将它开源出来。一方面将一些技术和思想和大家分享，另一方面它也可以在小范围内供一些用户使用，因为对于用户来讲它还是有一定的价值！有了这样一个平台，我们随时可以发布一个小应用，而不需要考虑存储空间和托管，并且你的应用还可以被其他人很方便的使用。&lt;/span&gt;&lt;/p&gt;&amp;nbsp;&lt;p&gt;&lt;span style="color: #ff0000; font-family: 微软雅黑; font-size: large;" face="微软雅黑" size="5" color="#ff0000"&gt;&lt;strong&gt;艺街开源团队期待你的加入&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&amp;nbsp;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 我花费了很多精力在这个平台上，所以即使开源也不是简单的贡献源代码，我希望把它做好！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 所以我会组织线下的讨论具体的开发细节和分工，不会仅仅在网上沟通，我觉得那样没有效率。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 4月份，我打算在北京组织一次技术沙龙，到时候会留出一部分时间讨论这个开源项目：&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 加入艺街团队，你将会学习和使用到：&lt;/span&gt;&lt;/p&gt;&lt;blockquote style='border:2px solid #EFEFEF;color:#333333;padding:5px 10px;'&gt;&lt;p&gt;&lt;span style="color: #0000ff; font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3" color="#0000ff"&gt;&lt;em&gt;Windows Azure相关技术&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #0000ff; font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3" color="#0000ff"&gt;&lt;em&gt;Silverlight&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #0000ff; font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3" color="#0000ff"&gt;&lt;em&gt;ASP.NET MVC&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #0000ff; font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3" color="#0000ff"&gt;&lt;em&gt;开源协议OpenID和OAuth&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #0000ff; font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3" color="#0000ff"&gt;&lt;em&gt;RESTful API&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="color: #0000ff; font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3" color="#0000ff"&gt;&lt;em&gt;等等&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; REST会让你更了解Web架构，你会更加了解Web之间的交互和通信。你会更明白HTTP传输协议，这是整个Web开发的基础和最核心的部分。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 当然，你也会结识一些朋友，互相学习交流，我希望将它做好，也希望其中有你的贡献！&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family: 微软雅黑; font-size: small;" face="微软雅黑" size="3"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 如果你感兴趣，请加QQ群：51825601（北京.NET技术沙龙），我们正在策划4月份的一次技术沙龙，到时候会有部分时间讨论开源计划。具体安排会在群内通知，这个群打算定期举行沙龙活动！欢迎加入，^_^&lt;/span&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/hielvis/aggbug/1999366.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/hielvis/archive/2011/03/30/1999366.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
