<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://community.devexpress.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Developer Express Inc.</title><link>http://community.devexpress.com/blogs/</link><description>Download - Compare - Decide</description><dc:language>en-US</dc:language><generator>CommunityServer 2007.1 SP1 (Build: 30415.43)</generator><item><title>Healthcare Information Technology (HIMformatics) - a visually stunning DevExpress-enabled ASP.NET website</title><link>http://community.devexpress.com/blogs/aspnet/archive/2012/02/03/healthcare-information-technology-himformatics-a-visually-stunning-devexpress-enabled-asp-net-website.aspx</link><pubDate>Fri, 03 Feb 2012 20:50:00 GMT</pubDate><guid isPermaLink="false">bd716303-653c-428d-8b8a-a7d998cde032:362994</guid><dc:creator>Mehul Harry (DevExpress)</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Check out this video interview with Mike Palgon who has created a very slick web portal using the &lt;a href="http://devexpress.com/asp" target="_blank"&gt;visually-stunning DevExpress ASP.NET&lt;/a&gt; products. &lt;/p&gt;  &lt;p&gt;Mike Palgon is the the lead developer at HIMformatics, a Healthcare Information Technology consulting firm. And Mike has created a very interesting web portal to help manage various aspects of HIMformatics including: employees, subcontractors, clients, projects, employee forecasting, and expense reports.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://youtu.be/mPxgNJTjOac" target="_blank"&gt;Watch the video case study with Mike Palgon here&lt;/a&gt;:&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:5ba5ae5c-d3cb-48d1-aa52-1f44cc66f405" class="wlWriterEditableSmartContent"&gt;&lt;div&gt;&lt;object width="646" height="362"&gt;&lt;param name="movie" value="http://www.youtube.com/v/mPxgNJTjOac?hl=en&amp;amp;hd=1"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/mPxgNJTjOac?hl=en&amp;amp;hd=1" type="application/x-shockwave-flash" width="646" height="362"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;div style="width:646px;clear:both;font-size:.8em;"&gt;Mehul Harry talks with Mike Palgon about HIMformatics website&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;In the video, Mike and I discuss his website design and which &lt;a href="http://devexpress.com/asp" target="_blank"&gt;DevExpress ASP.NET&lt;/a&gt; controls he&amp;#39;s using. &lt;/p&gt;  &lt;p&gt;Learn more about HIMformatics and this website here:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.devexpress.com/Home/Case-Studies/HIMformatics/"&gt;http://www.devexpress.com/Home/Case-Studies/HIMformatics/&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Thanks Mike for showing off the slick HIMformatics web portal. I love the minimalist design of his website. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;div class="dxperience-blog-block"&gt;   &lt;h4&gt;DXperience? What&amp;#39;s That?&lt;/h4&gt;    &lt;p&gt;DXperience is the .NET developer&amp;#39;s secret weapon. Get full access to a complete suite of professional components that let you instantly drop in new features, designer styles and fast performance for your applications. Try a fully-functional version of DXperience for free now: &lt;a href="http://www.devexpress.com/Downloads/NET/"&gt;http://www.devexpress.com/Downloads/NET/&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;Let&amp;#39;s see what develops…&lt;/p&gt; &lt;/div&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=362994" width="1" height="1"&gt;</description><category domain="http://community.devexpress.com/blogs/aspnet/archive/tags/Case+Study/default.aspx">Case Study</category><category domain="http://community.devexpress.com/blogs/aspnet/archive/tags/Video/default.aspx">Video</category><category domain="http://community.devexpress.com/blogs/aspnet/archive/tags/ASP.NET/default.aspx">ASP.NET</category></item><item><title>ASP.NET HTML Editor - Keyboard Shortcuts</title><link>http://community.devexpress.com/blogs/aspnet/archive/2012/02/02/asp-net-html-editor-keyboard-shortcuts.aspx</link><pubDate>Thu, 02 Feb 2012 23:45:00 GMT</pubDate><guid isPermaLink="false">bd716303-653c-428d-8b8a-a7d998cde032:363339</guid><dc:creator>Mehul Harry (DevExpress)</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;Keyboard shortcuts are great. Especially when you&amp;#39;re writing in an online HTML editor, because they don&amp;#39;t require you to take you hands off the keyboard!&lt;/p&gt;  &lt;p&gt;The DevExpress ASPxHtmlEditor editor provides many popular keyboard shortcuts as defaults.&lt;/p&gt;  &lt;p&gt;And in the latest release of DXperience v2011.2, we added the ability for you to customize these keyboard shortcuts for your end-users (&lt;a href="http://devexpress.com/issue=S38048" target="_blank"&gt;S38048&lt;/a&gt;).&amp;nbsp;We at DevExpress are not only trying to make you more productive when you use our controls from DXv2, but we&amp;#39;re also looking out for your end-users.&lt;/p&gt;  &lt;h3&gt;Default Shortcuts&lt;/h3&gt;  &lt;p&gt;Here&amp;#39;s the list of the default ASPxHtmlEditor keyboard shortcuts. &lt;/p&gt;  &lt;p&gt;Notice that the ASPxHtmlEditor provides a way for you to create links using the common &amp;#39;Control + K&amp;#39; keyboard shortcut found in many popular office products. Personally, I love that shortcut!&lt;/p&gt;  &lt;p&gt;Try it now online: &lt;a href="http://demos.devexpress.com/ASPxHTMLEditorDemos/Features/General.aspx"&gt;http://demos.devexpress.com/ASPxHTMLEditorDemos/Features/General.aspx&lt;/a&gt; &lt;/p&gt;  &lt;div style="overflow-x:hidden;overflow-y:hidden;widows:2;text-transform:none;background-color:#ffffff;text-indent:0px;width:0px;letter-spacing:normal;display:block;white-space:normal;orphans:2;height:0px;visibility:hidden;color:#000000;clear:both;word-spacing:0px;-webkit-text-size-adjust:auto;-webkit-text-stroke-width:0px;" class="dx-clear"&gt;&lt;/div&gt;  &lt;div style="widows:2;text-transform:none;background-color:#ffffff;text-indent:0px;letter-spacing:normal;font:medium &amp;#39;Segoe UI&amp;#39;, verdana, arial;white-space:normal;orphans:2;color:#000000;word-spacing:0px;-webkit-text-size-adjust:auto;-webkit-text-stroke-width:0px;" class="tablediv"&gt;   &lt;table style="border-bottom-width:1px;border-bottom-style:solid;border-left-width:1px;border-left-style:solid;padding-bottom:0px;margin-top:5px;padding-left:0px;width:auto;padding-right:0px;border-collapse:collapse;margin-bottom:5px;border-top-width:1px;border-top-style:solid;margin-right:13px;border-right-width:1px;border-right-style:solid;padding-top:0px;border-image:initial;" class="dtTABLE" cellspacing="0"&gt;       &lt;tr&gt;         &lt;th style="border-bottom:#bbbbbb 1px solid;text-align:left;border-left:#bbbbbb 1px solid;background-color:#e5e5e5;padding-left:13px;padding-right:13px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:middle;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;border-image:initial;"&gt;Shortcut&lt;/th&gt;          &lt;th style="border-bottom:#bbbbbb 1px solid;text-align:left;border-left:#bbbbbb 1px solid;background-color:#e5e5e5;padding-left:13px;padding-right:13px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:middle;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;border-image:initial;"&gt;ActionName&lt;/th&gt;          &lt;th style="border-bottom:#bbbbbb 1px solid;text-align:left;border-left:#bbbbbb 1px solid;background-color:#e5e5e5;padding-left:13px;padding-right:13px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:middle;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;border-image:initial;"&gt;Description&lt;/th&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;Ctrl+A&lt;/td&gt;          &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;selectall&lt;/td&gt;          &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;Selects the entire content&lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;Ctrl+B&lt;/td&gt;          &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;bold&lt;/td&gt;          &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;Applies bold formatting to the selected text&lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;Ctrl+C&lt;/td&gt;          &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;kbcopy&lt;/td&gt;          &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;Copies the selection&lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;Ctrl+E&lt;/td&gt;          &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;justifycenter&lt;/td&gt;          &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;Justifies text center&lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;Ctrl+G&lt;/td&gt;          &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;insertimagedialog&lt;/td&gt;          &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;Invokes the&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;a style="color:#960bb4;text-decoration:none;" href="http://documentation.devexpress.com/AspNet/CustomDocument7494.aspx"&gt;Insert Image Dialog&lt;/a&gt;&lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;Ctrl+I&lt;/td&gt;          &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;italic&lt;/td&gt;          &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;Applies italic formatting to the selected text&lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;Ctrl+J&lt;/td&gt;          &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;justifyfull&lt;/td&gt;          &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;Justifies text&lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;Ctrl+K&lt;/td&gt;          &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;insertlinkdialog&lt;/td&gt;          &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;Invokes the&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;a style="color:#960bb4;text-decoration:none;" href="http://documentation.devexpress.com/AspNet/CustomDocument8170.aspx"&gt;Insert Link Dialog&lt;/a&gt;&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;for the selection&lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;Ctrl+L&lt;/td&gt;          &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;justifyleft&lt;/td&gt;          &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;Justifies text left&lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;Ctrl+P&lt;/td&gt;          &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;print&lt;/td&gt;          &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;Prints the editor&amp;#39;s content&lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;Ctrl+R&lt;/td&gt;          &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;justifyright&lt;/td&gt;          &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;Justifies text right&lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;Ctrl+U&lt;/td&gt;          &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;underline&lt;/td&gt;          &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;Underlines the selected text&lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;Ctrl+V&lt;/td&gt;          &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;kbpaste&lt;/td&gt;          &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;Pastes content from the clipboard&lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;Ctrl+X&lt;/td&gt;          &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;kbcut&lt;/td&gt;          &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;Cuts the selection&lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;Ctrl+Y&lt;/td&gt;          &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;redo&lt;/td&gt;          &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;Redoes the last undone action&lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;Ctrl+Z&lt;/td&gt;          &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;undo&lt;/td&gt;          &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;Undoes the last action&lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;Ctrl+Ins&lt;/td&gt;          &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;kbcopy&lt;/td&gt;          &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;Copies the selection&lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;Ctrl+Shift+K&lt;/td&gt;          &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;unlink&lt;/td&gt;          &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;Unlinks the selection&lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;F11&lt;/td&gt;          &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;fullscreen&lt;/td&gt;          &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;Activates/deactivates the full-screen mode&lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;Shift+Del&lt;/td&gt;          &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;kbcut&lt;/td&gt;          &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;Cuts the selection&lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;Shift+Ins&lt;/td&gt;          &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;kbpaste&lt;/td&gt;          &lt;td style="border-bottom:#bbbbbb 1px solid;border-left:#bbbbbb 1px solid;padding-bottom:5px;overflow-x:visible;overflow-y:visible;padding-left:5px;padding-right:5px;font-family:&amp;#39;Segoe UI&amp;#39;, verdana, arial;color:#000000;font-size:0.85em;vertical-align:top;border-top:#bbbbbb 1px solid;border-right:#bbbbbb 1px solid;padding-top:5px;border-image:initial;"&gt;Pastes content from the clipboard&lt;/td&gt;       &lt;/tr&gt;     &lt;/table&gt; &lt;/div&gt;  &lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;h3&gt;Customization&lt;/h3&gt;  &lt;p&gt;There are two ways to customize the keyboard shortcuts, at design-time and runtime.&lt;/p&gt;  &lt;h4&gt;Design-time &lt;/h4&gt;  &lt;p&gt;In fact, you can redefine default shortcuts and create custom shortcuts at design time in two ways: using a shortcut editor or directly in a markup. To display the shortcut editor, click the&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;&lt;strong&gt;Shortcuts&lt;/strong&gt;&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;property&amp;#39;s ellipsis button in the&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;&lt;strong&gt;Properties&lt;/strong&gt;&lt;span class="Apple-converted-space"&gt; &lt;/span&gt;window while designing.&lt;/p&gt;  &lt;p style="widows:2;text-transform:none;background-color:#ffffff;text-indent:0px;margin:12px 0px;letter-spacing:normal;font:medium &amp;#39;Segoe UI&amp;#39;, verdana, arial;white-space:normal;orphans:2;color:#000000;word-spacing:0px;-webkit-text-size-adjust:auto;-webkit-text-stroke-width:0px;"&gt;&lt;/p&gt;  &lt;p style="widows:2;text-transform:none;background-color:#ffffff;text-indent:0px;margin:12px 0px;letter-spacing:normal;font:medium &amp;#39;Segoe UI&amp;#39;, verdana, arial;white-space:normal;orphans:2;color:#000000;word-spacing:0px;-webkit-text-size-adjust:auto;-webkit-text-stroke-width:0px;"&gt;&lt;a href="http://community.devexpress.com/blogs/aspnet/HelpResource_6745ACC2.jpg" target="_blank"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="ASPxHtmlEditor - Design Time Customization" border="0" alt="ASPxHtmlEditor - Design Time Customization" src="http://community.devexpress.com/blogs/aspnet/HelpResource_thumb_409ED288.jpg" width="640" height="325" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p style="widows:2;text-transform:none;background-color:#ffffff;text-indent:0px;margin:12px 0px;letter-spacing:normal;font:medium &amp;#39;Segoe UI&amp;#39;, verdana, arial;white-space:normal;orphans:2;color:#000000;word-spacing:0px;-webkit-text-size-adjust:auto;-webkit-text-stroke-width:0px;"&gt;&lt;/p&gt;  &lt;p style="widows:2;text-transform:none;background-color:#ffffff;text-indent:0px;margin:12px 0px;letter-spacing:normal;font:medium &amp;#39;Segoe UI&amp;#39;, verdana, arial;white-space:normal;orphans:2;color:#000000;word-spacing:0px;-webkit-text-size-adjust:auto;-webkit-text-stroke-width:0px;"&gt;&lt;/p&gt; &lt;span style="font-family:Calibri;"&gt;   &lt;/span&gt;&lt;p&gt;The code sample below demonstrates how you can specify shortcuts in markup. The first shortcut invokes a MyDialog custom dialog. The second shortcut redefines a default Ctrl+B shortcut. The third shortcut assigns the default command bold to custom shortcut.    &lt;/p&gt;&lt;p&gt;Note that other default shortcuts (except Ctrl+B) are still in effect.&lt;/p&gt;   &lt;pre class="brush: xml;"&gt;&amp;lt;dx:ASPxHtmlEditor ID=&amp;quot;MyHtmlEditor&amp;quot; runat=&amp;quot;server&amp;quot;&amp;gt;
     &amp;lt;CustomDialogs&amp;gt;
          &amp;lt;dx:HtmlEditorCustomDialog Caption=&amp;quot;My Custom Dialog&amp;quot; 
          FormPath=&amp;quot;~/CustomDialogs/MyCustomDialog1.ascx&amp;quot; Name=&amp;quot;MyDialog&amp;quot; /&amp;gt;
     &amp;lt;/CustomDialogs&amp;gt;
     &amp;lt;Shortcuts&amp;gt;
          &amp;lt;dx:HtmlEditorShortcut ActionName=&amp;quot;MyDialog&amp;quot; ActionType=&amp;quot;ShowCustomDialog&amp;quot; Shortcut=&amp;quot;Ctrl+D&amp;quot; /&amp;gt;
          &amp;lt;dx:HtmlEditorShortcut ActionName=&amp;quot;backcolor&amp;quot; Shortcut=&amp;quot;Ctrl+B&amp;quot; /&amp;gt;
          &amp;lt;dx:HtmlEditorShortcut ActionName=&amp;quot;bold&amp;quot; Shortcut=&amp;quot;Alt+B&amp;quot; /&amp;gt;
     &amp;lt;/Shortcuts&amp;gt;
&amp;lt;/dx:ASPxHtmlEditor&amp;gt;&lt;/pre&gt;

&lt;h4&gt;&amp;nbsp;&lt;/h4&gt;

&lt;h4&gt;Runtime&lt;/h4&gt;

&lt;p&gt;The ASPxHtmlEditor allows you to modify any shortcuts at run time. Simply use the methods provided in the &lt;a href="http://documentation.devexpress.com/#AspNet/clsDevExpressWebASPxHtmlEditorHtmlEditorShortcutCollectiontopic" target="_blank"&gt;HtmlEditorShortcutCollection&lt;/a&gt; collection.&lt;/p&gt;

&lt;p&gt;The code sample below demonstrates how you can modify a shortcut collection at run time:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;The first shortcut invokes a MyDialog custom dialog. &lt;/li&gt;

  &lt;li&gt;The second shortcut redefines a default &lt;strong&gt;Ctrl+B&lt;/strong&gt; shortcut. &lt;/li&gt;

  &lt;li&gt;The third shortcut assigns the default command bold to a custom shortcut. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Note that other default shortcuts (except &lt;strong&gt;Ctrl+B&lt;/strong&gt;) are still in effect. 

  &lt;br /&gt;&lt;/p&gt;

&lt;pre class="brush: csharp;"&gt;using DevExpress.Web.ASPxHtmlEditor;

...

protected void Page_Load(object sender, EventArgs e) {
     if (!IsPostBack) {
          MyHtmlEditor.Shortcuts.Add(&amp;quot;Ctrl+D&amp;quot;, &amp;quot;MyDialog&amp;quot;, ActionType.ShowCustomDialog);
          MyHtmlEditor.Shortcuts.Add(&amp;quot;Ctrl+B&amp;quot;, &amp;quot;backcolor&amp;quot;);
          MyHtmlEditor.Shortcuts.Add(&amp;quot;Alt+B&amp;quot;, &amp;quot;bold&amp;quot;);
     }
}&lt;/pre&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;h3&gt;ASP.NET MVC Supported too!&lt;/h3&gt;

&lt;p&gt;These shortcuts can also customized for the &lt;a href="http://devexpress.com/asp" target="_blank"&gt;DevExpress ASP.NET&lt;/a&gt;&amp;nbsp;&lt;a href="http://documentation.devexpress.com/#AspNet/DevExpressWebMvcMVCxHtmlEditorClassPropTopic" target="_blank"&gt;MVC HTML Editor extension&lt;/a&gt; too! &lt;/p&gt;

&lt;p&gt;&amp;nbsp;&lt;/p&gt;

&lt;p&gt;What custom shortcuts have you added to the ASPxHtmlEditor? Drop me a line below with your thoughts, thanks!&lt;/p&gt;

&lt;div class="dxperience-blog-block"&gt;
  &lt;h4&gt;Save time and money...&lt;/h4&gt;

  &lt;p&gt;Save time and money with high quality pre-built components for ASP.NET, Windows Forms, WPF, Silverlight and VCL as well as IDE Productivity Tools and Business Application Frameworks, all backed by world-class service and support. Our technologies help you build your best, see complex software with greater clarity, increase your productivity and create stunning applications for Windows and Web in the shortest possible time.&lt;/p&gt;

  &lt;p&gt;Try a fully-functional version of DXperience for free now: &lt;a href="http://www.devexpress.com/Home/Try.xml"&gt;http://www.devexpress.com/Home/Try.xml&lt;/a&gt;&lt;/p&gt;
 &lt;p&gt;Let&amp;#39;s see what develops…&lt;/p&gt;
&lt;/div&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=363339" width="1" height="1"&gt;</description><category domain="http://community.devexpress.com/blogs/aspnet/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://community.devexpress.com/blogs/aspnet/archive/tags/v2011.2/default.aspx">v2011.2</category><category domain="http://community.devexpress.com/blogs/aspnet/archive/tags/ASPxHtmlEditor/default.aspx">ASPxHtmlEditor</category></item><item><title>CodeRush wins Dr Dobbs Jolt Award for Coding Tool</title><link>http://community.devexpress.com/blogs/ctodx/archive/2012/01/17/coderush-wins-dr-dobbs-jolt-award-for-coding-tool.aspx</link><pubDate>Tue, 17 Jan 2012 22:53:11 GMT</pubDate><guid isPermaLink="false">bd716303-653c-428d-8b8a-a7d998cde032:362327</guid><dc:creator>Julian Bucknall (DevExpress)</dc:creator><slash:comments>3</slash:comments><description>&lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/ctodx/image_32019211.png"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:0px 0px 0px 15px;padding-left:0px;padding-right:0px;display:inline;float:right;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" align="right" src="http://community.devexpress.com/blogs/ctodx/image_thumb_54E253C1.png" width="240" height="240" /&gt;&lt;/a&gt;Last week, &lt;a href="http://devexpress.com/Subscriptions/DXperience/coderush-features.xml"&gt;CodeRush&lt;/a&gt;, DevExpress’ productivity tool for Visual Studio was awarded the &lt;a href="http://drdobbs.com/joltawards/232301291"&gt;Jolt award for best Coding Tool&lt;/a&gt; by the Dr Dobbs judges. The award undertakes to select the most innovative developer tool (such as editors, IDEs, code analysis tools, and the like) from the last 12 months. &lt;/p&gt;  &lt;p&gt;This year, in no small part due to the extensive new features and functionality we’ve introduced in DXv2 – including the unique code duplication detection and consolidation – it was the turn of CodeRush for the top honors. As Robert DelRossi said, “The fact is, CodeRush is so expansive, so well integrated into Visual Studio, so darned useful, that it can be difficult to describe all its benefits. Particularly jolting to us this year was its new duplicate code detection, which deftly spots similar routines and helps you consolidate them into one. More than just simple pattern matching, CodeRush works out code duplication very intelligently.” &lt;/p&gt;  &lt;p&gt;That’s what CodeRush is about really: applying code intelligence to help you write, navigate, refactor test, and spot code issues to be more productive and to get your applications done faster.&lt;/p&gt;  &lt;p&gt;Congratulations to the team for such great work!&lt;/p&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=362327" width="1" height="1"&gt;</description><category domain="http://community.devexpress.com/blogs/ctodx/archive/tags/v2011.2/default.aspx">v2011.2</category><category domain="http://community.devexpress.com/blogs/ctodx/archive/tags/CodeRush/default.aspx">CodeRush</category><category domain="http://community.devexpress.com/blogs/ctodx/archive/tags/awards/default.aspx">awards</category><category domain="http://community.devexpress.com/blogs/ctodx/archive/tags/DXv2/default.aspx">DXv2</category></item><item><title>WinForms and ASP.NET Training Classes in Germany</title><link>http://community.devexpress.com/blogs/thinking/archive/2012/01/17/winforms-and-asp-net-training-classes-in-germany.aspx</link><pubDate>Tue, 17 Jan 2012 19:07:00 GMT</pubDate><guid isPermaLink="false">bd716303-653c-428d-8b8a-a7d998cde032:362318</guid><dc:creator>Ray Navasarkian (DevExpress)</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Oliver Sturm will be conducting two training courses in the coming months - one targeting DevExpress ASP.NET Controls and the other DevExpress WinForms Controls. Both events will be held in Germany.&lt;/p&gt;&lt;p&gt;Expert DXperience ASP.NET - March 1-2 2012 (2 days) - Early bird pricing available until February 1st 2012!&lt;/p&gt;&lt;p&gt;Expert DXperience WinForms - April 25-27 2012 (3 days) - Early bird pricing available until March 14 2012!&lt;br /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;To learn more and to reserve your seat, visit Oliver&amp;#39;s website at:&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.sturmnet.org/blog/2012/01/09/new-devexpress-classes-announced-for"&gt;http://www.sturmnet.org/blog/2012/01/09/new-devexpress-classes-announced-for&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=362318" width="1" height="1"&gt;</description><category domain="http://community.devexpress.com/blogs/thinking/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://community.devexpress.com/blogs/thinking/archive/tags/WinForms/default.aspx">WinForms</category><category domain="http://community.devexpress.com/blogs/thinking/archive/tags/training/default.aspx">training</category></item><item><title>Building ASP.NET Web Apps for iOS</title><link>http://community.devexpress.com/blogs/theonewith/archive/2012/01/09/building-asp-net-web-apps-for-ios.aspx</link><pubDate>Mon, 09 Jan 2012 18:42:21 GMT</pubDate><guid isPermaLink="false">bd716303-653c-428d-8b8a-a7d998cde032:361810</guid><dc:creator>Azret Botash (DevExpress)</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Building an &lt;strong&gt;&lt;font color="#000000"&gt;ASP.NET Web App for iOS&lt;/font&gt;&lt;/strong&gt; means making sure it looks and behaves just like a native iOS app. &lt;/p&gt;  &lt;p&gt;Let me show you how to build one using the &lt;a href="http://www.devexpress.com/Subscriptions/DXperience/asp-features.xml" target="_blank"&gt;ASP.NET Controls&lt;/a&gt; from &lt;a href="http://www.devexpress.com/Subscriptions/DXperience/DXv2/announce.xml" target="_blank"&gt;DXv2&lt;/a&gt;.&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:637a26c3-e5fc-4777-bf13-60895f575e16" class="wlWriterEditableSmartContent"&gt;&lt;div&gt;&lt;object width="448" height="252"&gt;&lt;param name="movie" value="http://www.youtube.com/v/EJEkvTG3aKk?hl=en&amp;amp;hd=1"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/EJEkvTG3aKk?hl=en&amp;amp;hd=1" type="application/x-shockwave-flash" width="448" height="252"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;/div&gt;  &lt;h2&gt;Preparing the Project&lt;/h2&gt;  &lt;p&gt;We’ll start by creating a new ASP.NET Empty Web Application&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="New ASP.NET Web Application" border="0" alt="New ASP.NET Web Application" src="http://community.devexpress.com/blogs/theonewith/image_115A7242.png" width="640" height="353" /&gt;&lt;/p&gt;  &lt;p&gt;and copy the &lt;strong&gt;&lt;font color="#000000"&gt;iOS theme files&lt;/font&gt;&lt;/strong&gt; to the &lt;strong&gt;&lt;font color="#000000"&gt;App_Themes&lt;/font&gt;&lt;/strong&gt; folder. (&lt;strong&gt;&lt;font color="#000000"&gt;Note&lt;/font&gt;&lt;/strong&gt;: The iOS theme files are attached in the sample project at the bottom)&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://community.devexpress.com/blogs/theonewith/image_7FD1996F.png" width="325" height="480" /&gt;&lt;/p&gt;  &lt;p&gt;After you import the iOS theme into the project, make sure it is applied to your &lt;font color="#ff0000"&gt;Default.aspx&lt;/font&gt; page.&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="" border="0" alt="" src="http://community.devexpress.com/blogs/theonewith/image_73B45D76.png" width="640" height="415" /&gt;&lt;/p&gt;  &lt;p&gt;The core of our app will be the &lt;strong&gt;&lt;font color="#000000"&gt;TabBar&lt;/font&gt;&lt;/strong&gt;.&amp;#160; And we’ll use the &lt;strong&gt;&lt;font color="#000000"&gt;ASPxPageControl&lt;/font&gt;&lt;/strong&gt; to mimic it.&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="" border="0" alt="" src="http://community.devexpress.com/blogs/theonewith/image_7D994EE1.png" width="310" height="480" /&gt;&lt;/p&gt;  &lt;p&gt;After you drag the &lt;strong&gt;&lt;font color="#000000"&gt;ASPxPageControl&lt;/font&gt;&lt;/strong&gt; from the Toolbox, set it’s &lt;strong&gt;&lt;font color="#ff0000"&gt;SkinID&lt;/font&gt;&lt;/strong&gt; to &lt;strong&gt;&lt;font color="#000000"&gt;TabBar&lt;/font&gt;&lt;/strong&gt;.&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;body&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
    &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;form &lt;/span&gt;&lt;span style="color:red;"&gt;id&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;form1&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;runat&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;server&amp;quot;&amp;gt;
&lt;/span&gt;&lt;span style="color:blue;"&gt;      &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;dx&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;ASPxPageControl &lt;/span&gt;&lt;span style="color:red;"&gt;runat&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;server&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;ID&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;TabBar&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;&lt;font size="3"&gt;SkinID&lt;/font&gt;&lt;/span&gt;&lt;span style="color:blue;"&gt;&lt;font size="3"&gt;=&amp;quot;TabBar&amp;quot;&lt;/font&gt; 
        &lt;/span&gt;&lt;span style="color:red;"&gt;ActiveTabIndex&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;0&amp;quot;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;TabPages&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
          &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;dx&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;TabPage&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
            &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;ContentCollection&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
              &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;dx&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;ContentControl &lt;/span&gt;&lt;span style="color:red;"&gt;runat&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;server&amp;quot; &lt;/span&gt;&lt;span style="color:red;"&gt;SupportsDisabledAttribute&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;True&amp;quot;&amp;gt;
              &amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;dx&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;ContentControl&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
            &amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;ContentCollection&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
          &amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;dx&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;TabPage&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
        &amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;TabPages&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
        &amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;ClientSideEvents 
          &lt;/span&gt;&lt;span style="color:red;"&gt;Init&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;OnTabBarInit&amp;quot; 
          &lt;/span&gt;&lt;span style="color:red;"&gt;ActiveTabChanged&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;function(){ Adjust(); }&amp;quot;/&amp;gt;
      &amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;dx&lt;/span&gt;&lt;span style="color:blue;"&gt;:&lt;/span&gt;&lt;span style="color:maroon;"&gt;ASPxPageControl&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
    &amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;form&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;body&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;and assign two client side events:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;&lt;font color="#000000"&gt;Init&lt;/font&gt;&lt;/strong&gt;: Will be fired when control is initialized. &lt;/li&gt;

  &lt;li&gt;&lt;strong&gt;&lt;font color="#000000"&gt;ActiveTabChanged&lt;/font&gt;&lt;/strong&gt;: Will be fired when a tab page is changed. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;we need to do this to make sure that our &lt;strong&gt;&lt;font color="#000000"&gt;TabBar&lt;/font&gt;&lt;/strong&gt; is at the very bottom of the page.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:maroon;"&gt;script &lt;/span&gt;&lt;span style="color:red;"&gt;type&lt;/span&gt;&lt;span style="color:blue;"&gt;=&amp;quot;text/javascript&amp;quot;&amp;gt;
    &lt;/span&gt;&lt;font color="#000000"&gt;func&lt;/font&gt;&lt;span style="color:blue;"&gt;&lt;font color="#000000"&gt;tion&lt;/font&gt; &lt;font color="#0000ff"&gt;Adj&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;ust&lt;/font&gt;() {
      TabBar.SetHeight(ASPxClientUtils.GetDocumentClientHeight());
    }
    function &lt;font color="#0000ff"&gt;OnTabBa&lt;/font&gt;&lt;span style="color:blue;"&gt;&lt;font color="#0000ff"&gt;rInit&lt;/font&gt;() &lt;/span&gt;{
      ASPxClientUtils.AttachEventToElement(window, &amp;quot;&lt;font color="#c0504d"&gt;orientationchange&lt;/font&gt;&amp;quot;,
          &lt;font color="#000000"&gt;&lt;span style="color:maroon;"&gt;&lt;font color="#000000"&gt;functio&lt;/font&gt;&lt;/span&gt;n&lt;/font&gt; () &lt;font color="#0000ff"&gt;{&lt;/font&gt; Adjust(); &lt;span style="color:blue;"&gt;}, false&lt;/span&gt;);
      if (!&lt;font color="#000000"&gt;ASPx&lt;span style="color:blue;"&gt;&lt;font color="#000000"&gt;Clien&lt;/font&gt;&lt;/span&gt;tUtils&lt;/font&gt;.touchUI&lt;span style="color:blue;"&gt;) &lt;/span&gt;{
        ASPxClientUtils.AttachEventToElement(window, &amp;quot;&lt;font color="#c0504d"&gt;resize&lt;/font&gt;&amp;quot;,
          function () &lt;span style="color:maroon;"&gt;&lt;font color="#000000"&gt;{&lt;/font&gt; &lt;font color="#000000"&gt;Adjus&lt;/font&gt;&lt;/span&gt;t(); &lt;font color="#000000"&gt;}&lt;/font&gt;, false);
      &lt;span style="color:blue;"&gt;}
      &lt;/span&gt;Adjust();
    &lt;span style="color:blue;"&gt;}
&amp;lt;/&lt;/span&gt;&lt;span style="color:maroon;"&gt;script&lt;/span&gt;&lt;span style="color:blue;"&gt;&amp;gt;
&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="ASP.NET Web App for iOS" border="0" alt="ASP.NET Web App for iOS" src="http://community.devexpress.com/blogs/theonewith/image_4C956006.png" width="640" height="438" /&gt;&lt;/p&gt;

&lt;h2&gt;Building App Screens&lt;/h2&gt;

&lt;p&gt;Adding app screens is done by adding new tab pages.&lt;/p&gt;

&lt;p&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="" border="0" alt="" src="http://community.devexpress.com/blogs/theonewith/image_3A6DD0B4.png" width="640" height="329" /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="" border="0" alt="" src="http://community.devexpress.com/blogs/theonewith/image_0F912E74.png" width="484" height="371" /&gt;&lt;/p&gt;

&lt;p&gt;For each tab, we set the image and make it 42 by 79 in size. &lt;/p&gt;

&lt;p&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="" border="0" alt="" src="http://community.devexpress.com/blogs/theonewith/image_3C39E84D.png" width="640" height="329" /&gt;&lt;/p&gt;

&lt;p&gt;And we are ready done!&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/theonewith/image_698F967E.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="ASP.NET Web App for iOS" border="0" alt="ASP.NET Web App for iOS" src="http://community.devexpress.com/blogs/theonewith/image_thumb_0B97F245.png" width="640" height="438" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;font color="#000000" size="3"&gt;Download the sample project &lt;/font&gt;&lt;/strong&gt;&lt;a href="http://dxpr.es/iSample" target="_blank"&gt;&lt;strong&gt;&lt;font color="#ffc000" size="3"&gt;here&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cheers&lt;/p&gt;

&lt;p&gt;Azret&lt;/p&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=361810" width="1" height="1"&gt;</description><category domain="http://community.devexpress.com/blogs/theonewith/archive/tags/Samples/default.aspx">Samples</category><category domain="http://community.devexpress.com/blogs/theonewith/archive/tags/v2011.2/default.aspx">v2011.2</category><category domain="http://community.devexpress.com/blogs/theonewith/archive/tags/DXv2/default.aspx">DXv2</category><category domain="http://community.devexpress.com/blogs/theonewith/archive/tags/Webinars/default.aspx">Webinars</category><category domain="http://community.devexpress.com/blogs/theonewith/archive/tags/Themes/default.aspx">Themes</category><category domain="http://community.devexpress.com/blogs/theonewith/archive/tags/iOS/default.aspx">iOS</category></item><item><title>Coming to CodeMash–Staying in Michigan</title><link>http://community.devexpress.com/blogs/seth/archive/2012/01/06/coming-to-codemash-staying-in-michigan.aspx</link><pubDate>Fri, 06 Jan 2012 20:41:49 GMT</pubDate><guid isPermaLink="false">bd716303-653c-428d-8b8a-a7d998cde032:361717</guid><dc:creator>Seth Juarez (DevExpress)</dc:creator><slash:comments>3</slash:comments><description>&lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/seth/logo-codemash_2819ED91.gif"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;float:right;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="logo-codemash" border="0" alt="logo-codemash" align="right" src="http://community.devexpress.com/blogs/seth/logo-codemash_thumb_403D57EC.gif" width="199" height="202" /&gt;&lt;/a&gt;Another exciting &lt;a href="http://codemash.org/"&gt;CodeMash&lt;/a&gt; conference is upon us! &lt;a href="http://devexpress.com/mehul"&gt;Mehul Harry&lt;/a&gt; and I will be in attendance to answer any questions and spread the good word about DevExpress. We will not come empty handed! We are bringing &lt;strong&gt;two copies of Visual Studio Ultimate (Retail &amp;gt; $10,000) with us to give away&lt;/strong&gt;. You might also coerce us to give away a couple of CodeRush licenses etc. I will also be presenting a mini session about making stylish Metro inspired applications today.&lt;/p&gt;  &lt;p&gt;In addition to &lt;a href="http://codemash.org/"&gt;CodeMash&lt;/a&gt;, &lt;a href="http://davidgiard.com/"&gt;Dave Giard&lt;/a&gt; was kind enough to invite me to present at several User Groups across Michigan. Here is more information:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;strong&gt;Monday the 16th at 6:00 PM&lt;/strong&gt; - &lt;a href="http://www.glugnet.org"&gt;Greater Lansing .NET User Group&lt;/a&gt;       &lt;br /&gt;&lt;strong&gt;Location&lt;/strong&gt;       &lt;br /&gt;Techsmith       &lt;br /&gt;2365 Woodlake Drive       &lt;br /&gt;Okemos, MI 48864       &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Tuesday the 17th at 6:00PM&lt;/strong&gt; - &lt;a href="http://devmi.com"&gt;Microsoft Developers of Southwest Michigan&lt;/a&gt;       &lt;br /&gt;&lt;strong&gt;Location&lt;/strong&gt;       &lt;br /&gt;4601 Campus Drive       &lt;br /&gt;Kalamazoo, MI 49008       &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Wednesday the 18th at 6:00PM&lt;/strong&gt; - &lt;a href="http://www.migang.org/Home.aspx"&gt;Great Lakes Area .NET User Group&lt;/a&gt; / &lt;a href="http://aadnd.org"&gt;Ann Arbor .NET Developers Group&lt;/a&gt;       &lt;br /&gt;&lt;strong&gt;Location&lt;/strong&gt;       &lt;br /&gt;The Epitec Group       &lt;br /&gt;24800 Denso Drive, Suite 150       &lt;br /&gt;Southfield, MI 48033 &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;I will be speaking a bit about the functional underpinnings of C# as well as some cool Machine Learning topics. As some of you know I love to go off the cuff so let me know if you would like me to talk about anything else.&lt;/p&gt;  &lt;p&gt;I would love to meet you! If you or your company would like to arrange a visit feel free to email me so we can set something up!&lt;/p&gt;  &lt;p&gt;As always, if there are any comments and/or questions, feel free to get a hold of me!&lt;/p&gt;  &lt;p&gt;Seth Juarez   &lt;br /&gt;Email: &lt;a href="mailto:sethj@devexpress.com"&gt;sethj@devexpress.com&lt;/a&gt;    &lt;br /&gt;Twitter: &lt;a href="http://twitter.com/sethjuarez"&gt;@SethJuarez&lt;/a&gt; &lt;/p&gt;  &lt;div class="dxperience-blog-block"&gt;   &lt;h4&gt;Want The Best Reporting Tool Ever?&lt;/h4&gt;    &lt;p&gt;Get The No-Compromise Reporting Tool for WinForms, ASP.NET, Silverlight and WPF! - Native integration with DevExpress WinForms and ASP.NET Controls, unequalled design-time productivity, industrial-grade features. Try a fully-functional version of DXperience for free now: &lt;a href="http://www.devexpress.com/Downloads/NET/"&gt;http://www.devexpress.com/Downloads/NET/&lt;/a&gt;&lt;/p&gt;     &lt;/div&gt;  &lt;p&gt;Let us know what you think of our Reporting Suite by rating it in the &lt;a href="http://dxpr.es/lUzz9P"&gt;VS Gallery&lt;/a&gt;!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.twitter.com/SethJuarez"&gt;&lt;img alt="Follow SethJuarez on Twitter" src="http://twitter-badges.s3.amazonaws.com/follow_me-a.png" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=361717" width="1" height="1"&gt;</description><category domain="http://community.devexpress.com/blogs/seth/archive/tags/speaking/default.aspx">speaking</category><category domain="http://community.devexpress.com/blogs/seth/archive/tags/conference/default.aspx">conference</category><category domain="http://community.devexpress.com/blogs/seth/archive/tags/codemash/default.aspx">codemash</category><category domain="http://community.devexpress.com/blogs/seth/archive/tags/user+group/default.aspx">user group</category></item><item><title>Build for Beautiful with DXv2: Metro Inspired WinForms Apps</title><link>http://community.devexpress.com/blogs/theonewith/archive/2011/12/29/build-for-beautiful-with-dxv2-metro-inspired-winforms-apps.aspx</link><pubDate>Thu, 29 Dec 2011 23:22:00 GMT</pubDate><guid isPermaLink="false">bd716303-653c-428d-8b8a-a7d998cde032:361347</guid><dc:creator>Azret Botash (DevExpress)</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;&lt;span style="font:16px segoe ui;"&gt;Designing beautiful apps is not an easy task. But with &lt;/span&gt;&lt;a href="http://www.devexpress.com/Subscriptions/DXperience/DXv2/announce.xml" target="_blank"&gt;&lt;span style="font:16px segoe ui;"&gt;DXv2&lt;/span&gt;&lt;/a&gt;&lt;span style="font:16px segoe ui;"&gt;, building beautiful Metro inspired applications is easier than ever. Let me show you how:&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="WinForms Metro App - Tile Control" border="0" alt="WinForms Metro App - Tile Control" src="http://community.devexpress.com/blogs/theonewith/WinForms-Metro-App---Tile-Control_0554309F.png" width="640" height="400" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="WinForms Metro App - Grid Control" border="0" alt="WinForms Metro App - Grid Control" src="http://community.devexpress.com/blogs/theonewith/WinForms-Metro-App---Grid-Control_4228B271.png" width="640" height="400" /&gt;&lt;/p&gt;  &lt;h2&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;;"&gt;&lt;span style="font-size:32px;font-weight:normal;"&gt;&amp;#160;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;  &lt;h2&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;;"&gt;&lt;span style="font-size:32px;font-weight:normal;"&gt;Prepare the project&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;  &lt;p&gt;&lt;span style="font:16px segoe ui;"&gt;Create a new &lt;strong&gt;&lt;span style="color:#000000;"&gt;WinForms Project&lt;/span&gt;&lt;/strong&gt; and add a &lt;strong&gt;&lt;span style="color:#000000;"&gt;DevExpress Form&lt;/span&gt;&lt;/strong&gt; to it. This will be the main or “home” screen for the app.&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="WinForms Metro App - Add New Form" border="0" alt="WinForms Metro App - Add New Form" src="http://community.devexpress.com/blogs/theonewith/WinForms-Metro-App---Add-New-Form_450DF157.png" width="640" height="315" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font:16px segoe ui;"&gt;We’ll need to bring in two assemblies:&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="WinForms Metro App - Add Reference" border="0" alt="WinForms Metro App - Add Reference" src="http://community.devexpress.com/blogs/theonewith/WinForms-Metro-App---Add-Reference_59639115.png" width="366" height="480" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;;"&gt;&lt;span style="font-size:16px;"&gt;&lt;strong&gt;&lt;span style="color:#000000;"&gt;1&lt;/span&gt;&lt;/strong&gt;: &lt;strong&gt;&lt;span style="color:#000000;"&gt;DevExpress.Metro.Navigation&lt;/span&gt;&lt;/strong&gt;: This assembly contains sample code for building basic Metro inspired layouts and navigation. You will also find additional goodies like &lt;strong&gt;&lt;span style="color:#000000;"&gt;Transitions&lt;/span&gt;&lt;/strong&gt;, which you can use in other areas of your app.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;;"&gt;&lt;span style="font-size:16px;"&gt;&lt;strong&gt;&lt;span style="color:#000000;"&gt;2&lt;/span&gt;&lt;/strong&gt;: &lt;strong&gt;&lt;span style="color:#000000;"&gt;MetropolisDark4Touch&lt;/span&gt;&lt;/strong&gt;: This is a new &lt;strong&gt;&lt;span style="color:#000000;"&gt;Metropolis Dark&lt;/span&gt;&lt;/strong&gt; skin that has been optimized for touch. We’ll register it like so:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;static void &lt;/span&gt;Main() {
    DevExpress.Skins.&lt;span style="color:#2b91af;"&gt;SkinManager&lt;/span&gt;.Default.RegisterAssembly(
        &lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(DevExpress.UserSkins.&lt;span style="color:#2b91af;"&gt;MetropolisDark&lt;/span&gt;).Assembly
    );

    DevExpress.LookAndFeel.&lt;span style="color:#2b91af;"&gt;UserLookAndFeel&lt;/span&gt;.Default.SetSkinStyle(
        &lt;span style="color:#a31515;"&gt;&amp;quot;Metropolis Dark 4 Touch&amp;quot;
    &lt;/span&gt;);

    DevExpress.Skins.&lt;span style="color:#2b91af;"&gt;SkinManager&lt;/span&gt;.EnableFormSkins();

    &lt;span style="color:#2b91af;"&gt;Application&lt;/span&gt;.EnableVisualStyles();
    &lt;span style="color:#2b91af;"&gt;Application&lt;/span&gt;.SetCompatibleTextRenderingDefault(&lt;span style="color:blue;"&gt;false&lt;/span&gt;);
    &lt;span style="color:#2b91af;"&gt;Application&lt;/span&gt;.Run(&lt;span style="color:blue;"&gt;new &lt;/span&gt;&lt;span style="color:#2b91af;"&gt;DXv2&lt;/span&gt;());
}&lt;/pre&gt;

&lt;pre class="code"&gt; &lt;/pre&gt;

&lt;h2&gt;&lt;span style="font:32px segoe ui;"&gt;&lt;span style="font-weight:normal;"&gt;Add your business screens&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;

&lt;p&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;;"&gt;&lt;span style="font-size:16px;"&gt;After we prepare the app for &lt;strong&gt;&lt;span style="color:#000000;"&gt;Metro&lt;/span&gt;&lt;/strong&gt;, we can start designing our screens. For the home screen, we’ll use the new &lt;/span&gt;&lt;a href="http://www.devexpress.com/Products/NET/Controls/WinForms/Tile/" target="_blank"&gt;&lt;span style="font-size:16px;"&gt;TileControl&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:16px;"&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="WinForms Metro App Toolbox - Tile Control" border="0" alt="WinForms Metro App Toolbox - Tile Control" src="http://community.devexpress.com/blogs/theonewith/WinForms-Metro-App-Toolbox---Tile-Control_628FA689.png" width="322" height="480" /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="WinForms Metro App - Home Screen" border="0" alt="WinForms Metro App - Home Screen" src="http://community.devexpress.com/blogs/theonewith/WinForms-Metro-App---Home-Screen_2BF1D578.png" width="636" height="480" /&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style="font:16px segoe ui;"&gt;Note: You can watch the &lt;/span&gt;&lt;a href="http://www.devexpress.com/Products/NET/Controls/WinForms/Tile/" target="_blank"&gt;&lt;span style="font:16px segoe ui;"&gt;Getting Started with Tile Control Video here&lt;/span&gt;&lt;/a&gt;&lt;span style="font:16px segoe ui;"&gt;.&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;;"&gt;&lt;span style="font-size:16px;"&gt;To build a new app screen we simply create a new &lt;strong&gt;&lt;span style="color:#000000;"&gt;DevExpress Form&lt;/span&gt;&lt;/strong&gt; and customize it to our needs. For example, a simple customers list displayed in a &lt;/span&gt;&lt;a href="http://www.devexpress.com/Products/NET/Controls/WinForms/Grid/" target="_blank"&gt;&lt;span style="font-size:16px;"&gt;Grid&lt;/span&gt;&lt;/a&gt;&lt;span style="font-size:16px;"&gt; at design time:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/theonewith/WinForms-Metro-App---Grid-Control-Screen_4B867980.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="WinForms Metro App - Grid Control Screen" border="0" alt="WinForms Metro App - Grid Control Screen" src="http://community.devexpress.com/blogs/theonewith/WinForms-Metro-App---Grid-Control-Screen_thumb_18AB08FF.png" width="640" height="339" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style="font:16px segoe ui;"&gt;To switch to this screen in our app, simply invoke it from the click event:&lt;/span&gt;&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="color:blue;"&gt;private void &lt;/span&gt;CustomersItem_Click(&lt;span style="color:blue;"&gt;object &lt;/span&gt;sender, &lt;span style="color:#2b91af;"&gt;TileItemEventArgs &lt;/span&gt;e) {
    &lt;span style="color:blue;"&gt;this&lt;/span&gt;.GoTo&amp;lt;&lt;span style="color:#2b91af;"&gt;Customers&lt;/span&gt;&amp;gt;();
}&lt;/pre&gt;

&lt;p&gt;&lt;span style="font:16px segoe ui;"&gt;And that’s pretty much it &lt;img style="border-bottom-style:none;border-left-style:none;border-top-style:none;border-right-style:none;" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://community.devexpress.com/blogs/theonewith/wlEmoticon-smile_28B28B45.png" /&gt; &lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;&lt;strong&gt;&lt;font color="#000000" size="4" face="Segoe UI"&gt;Download the sample app and skin &lt;/font&gt;&lt;/strong&gt;&lt;a href="http://dxpr.es/tTRfz5" target="_blank"&gt;&lt;strong&gt;&lt;font color="#ffc000" size="4" face="Segoe UI"&gt;here&lt;/font&gt;&lt;/strong&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font:16px segoe ui;"&gt;&lt;strong&gt;&lt;font color="#000000" size="4"&gt;. (Build: 11.2.7+) &lt;/font&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style="font:16px segoe ui;"&gt;Step by step video:&lt;/span&gt;&lt;/p&gt;

&lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:c765489b-e2ee-411d-82e5-2c14035f08b9" class="wlWriterEditableSmartContent"&gt;&lt;div&gt;&lt;object width="560" height="315"&gt;&lt;param name="movie" value="http://www.youtube.com/v/-e-BO99HDdY?hl=en&amp;amp;hd=1"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/-e-BO99HDdY?hl=en&amp;amp;hd=1" type="application/x-shockwave-flash" width="560" height="315"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;&lt;span style="font:16px segoe ui;"&gt;Cheers&lt;/span&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style="font:16px segoe ui;"&gt;Azret&lt;/span&gt; 

  &lt;br /&gt;&lt;/p&gt;

&lt;p&gt;&lt;span style="font-family:&amp;#39;Segoe UI&amp;#39;;"&gt;&amp;#160;&lt;/span&gt;&lt;/p&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=361347" width="1" height="1"&gt;</description><category domain="http://community.devexpress.com/blogs/theonewith/archive/tags/WinForms/default.aspx">WinForms</category><category domain="http://community.devexpress.com/blogs/theonewith/archive/tags/Samples/default.aspx">Samples</category><category domain="http://community.devexpress.com/blogs/theonewith/archive/tags/Skins/default.aspx">Skins</category><category domain="http://community.devexpress.com/blogs/theonewith/archive/tags/v2011.2/default.aspx">v2011.2</category><category domain="http://community.devexpress.com/blogs/theonewith/archive/tags/Metro/default.aspx">Metro</category><category domain="http://community.devexpress.com/blogs/theonewith/archive/tags/DXv2/default.aspx">DXv2</category><category domain="http://community.devexpress.com/blogs/theonewith/archive/tags/TileControl/default.aspx">TileControl</category><category domain="http://community.devexpress.com/blogs/theonewith/archive/tags/Touch/default.aspx">Touch</category><category domain="http://community.devexpress.com/blogs/theonewith/archive/tags/GridControl/default.aspx">GridControl</category><category domain="http://community.devexpress.com/blogs/theonewith/archive/tags/Webinars/default.aspx">Webinars</category></item><item><title>Support for XBAP: sometimes you have to call it quits</title><link>http://community.devexpress.com/blogs/ctodx/archive/2011/12/28/support-for-xbap-sometimes-you-have-to-call-it-quits.aspx</link><pubDate>Wed, 28 Dec 2011 20:44:06 GMT</pubDate><guid isPermaLink="false">bd716303-653c-428d-8b8a-a7d998cde032:361284</guid><dc:creator>Julian Bucknall (DevExpress)</dc:creator><slash:comments>4</slash:comments><description>&lt;p&gt;XBAP? Betcha can’t remember what it stands for, let alone use it. The reply to the first point is XML Browser Application, and to the second part frankly not many people do use it. &lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;margin:0px 0px 0px 15px;padding-left:0px;padding-right:0px;display:inline;float:right;border-top:0px;border-right:0px;padding-top:0px;" title="Scenic Mountain Sunset with Ski Track" border="0" alt="Scenic Mountain Sunset with Ski Track" align="right" src="http://community.devexpress.com/blogs/ctodx/Sunset-in-Winter_11643C9E.jpg" width="240" height="159" /&gt;There are several reasons for the lack of love I suppose. Since it’s a special kind of browser app, it needs to operate in Medium Trust to be the most effective, and yet even IE9 balks at running them (you have to confirm that you really, really want to run this particular app, which kind of defeats the object). The Medium Trust limitation (along with other security limitations) means that we spend an inordinate amount of time trying to get round these narrow-scenario restrictions instead of providing broader-scenario features. Even with these workarounds, some of our controls still don’t work in an XBAP environment.&lt;/p&gt;  &lt;p&gt;It is equally galling when there are two very well supported channels for creating rich internet applications: ClickOnce and Silverlight. We use ClickOnce ourselves for our internal applications, and it works very well indeed in that environment. And, despite all the doom and gloom and unfounded rumors about where Silverlight is going, it is still the premier method for creating rich-internet applications.&lt;/p&gt;  &lt;p&gt;All this is leading to the fact that we have officially retired our XBAP support in 11.2. We recommend using ClickOnce for your WPF applications, or transferring over to Silverlight. Remember with DXv2 we have control parity between WPF and Silverlight.&lt;/p&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=361284" width="1" height="1"&gt;</description><category domain="http://community.devexpress.com/blogs/ctodx/archive/tags/v2011.2/default.aspx">v2011.2</category><category domain="http://community.devexpress.com/blogs/ctodx/archive/tags/WPF/default.aspx">WPF</category><category domain="http://community.devexpress.com/blogs/ctodx/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://community.devexpress.com/blogs/ctodx/archive/tags/XBAP/default.aspx">XBAP</category></item><item><title>Take a tour of DXv2: XAF Q&amp;A</title><link>http://community.devexpress.com/blogs/eaf/archive/2011/12/28/take-a-tour-of-dxv2-xaf.aspx</link><pubDate>Wed, 28 Dec 2011 02:25:00 GMT</pubDate><guid isPermaLink="false">bd716303-653c-428d-8b8a-a7d998cde032:360519</guid><dc:creator>Dennis (DevExpress Support)</dc:creator><slash:comments>5</slash:comments><description>&lt;p align="justify"&gt;A bit late with this post,…but&lt;/p&gt;  &lt;p align="justify"&gt;Check out the &lt;a href="http://www.youtube.com/watch?v=M9L5n1UQNwg"&gt;&amp;quot;Take a tour of DXv2: XAF”&lt;/a&gt; webinar as well as the &lt;a href="http://www.youtube.com/watch?&amp;amp;v=I3BXBoRsKJg"&gt;&amp;quot;XAF - Application Server &amp;amp; Improved Security System&amp;quot;&lt;/a&gt; tutorial videos to get started with the newest version of the &lt;a href="http://www.devexpress.com/Subscriptions/DXperience/xaf-features.xml"&gt;eXpressApp Framework (XAF)&lt;/a&gt;.&lt;/p&gt;  &lt;p align="justify"&gt;And don’t forget to check out the &lt;a href="http://www.devexpress.com/Support/WhatsNew/"&gt;What’s New&lt;/a&gt; pages for both XAF and XPO:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div align="justify"&gt;&lt;a href="http://www.devexpress.com/Subscriptions/DXperience/DXv2/index.xml?page=59"&gt;eXpressApp Framework (XAF)&lt;/a&gt;&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div align="justify"&gt;&lt;a href="http://www.devexpress.com/Subscriptions/DXperience/DXv2/index.xml?page=60"&gt;eXpress Persistent Objects (XPO)&lt;/a&gt;. &lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p align="justify"&gt;Finally, do not miss &lt;a href="http://www.devexpress.com/Support/WhatsNew/DXperience/help/11.2.5/11.2.5.help.xml#autolist11"&gt;the new and updated help articles&lt;/a&gt; for these products located in the &lt;a href="http://www.devexpress.com/Support/WhatsNew/DXperience/help/11.2.5/11.2.5.help.xml"&gt;What’s New in Help&lt;/a&gt; document.&lt;/p&gt;  &lt;p align="justify"&gt;I also wanted to answer a few of the more interesting questions left unanswered from our last webinar. So, here we go:&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Q:&lt;/strong&gt; What are the main advantages of your application server and the improved security system? Why would one want to use them?     &lt;br /&gt;&lt;strong&gt;A:&lt;/strong&gt; In our opinion, every serious application for a medium or large enterprise requires a stable and solid security system that will ensure that clients only access data and perform operations they have permissions to. In the most cases, secure data filtering is done in the middle tier, thus preventing the client application from direct database connections. The client application usually connects to the middle tier server via Remoting, WCF or other popular data transport technologies. The middle tier application itself can be run as a console, Windows service application or be hosted as part of a web application on IIS. &lt;/p&gt;  &lt;p align="justify"&gt;As you know, implementing, testing and maintaining even the core of such a system yourself will require enormous resources. Implementing GUI for it will also cost you a lot of time and money. In addition, if you Google the term, you will quickly find that it will require learning both a large number of technologies and numerous patterns &amp;amp; best practices available in papers created by Microsoft and many third-parties…    &lt;br /&gt;    &lt;br /&gt;With XAF you get all of this out-of-the-box and as a result you have a ready GUI + Core that is based on existing DevExpress technologies (we use DevExpress visual components for the UI and XPO for the application server and security core). Finally, note that the XAF security system supports defining permissions on the object type, object instance and member levels, as well as custom permissions. &lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Q:&lt;/strong&gt; What are the main difference between the old and new XAF security systems?     &lt;br /&gt;&lt;strong&gt;A:&lt;/strong&gt; The new XAF security system prevents client applications from retrieving sensitive data. All permission requests are redirected to the security service located on the application server. Your secure data is much safer now as it will not leave the server. Refer to &lt;a href="http://documentation.devexpress.com/#Xaf/CustomDocument3365"&gt;this help article&lt;/a&gt; explaining these differences in greater detail. In addition, the new security system is accompanied with a more effective UI for editing security permissions – you now have a &lt;a href="http://www.devexpress.com/Subscriptions/DXperience/DXv2/i/xaf-permissions.png"&gt;permissions matrix&lt;/a&gt; that I believe will be welcomed by your clients.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Q:&lt;/strong&gt; I am interested in the new application server &amp;amp; security system and just wanted to verify that if a user does not have permissions to an object / field, the respective information will not be displayed in reports, analysis, etc.     &lt;br /&gt;&lt;strong&gt;A:&lt;/strong&gt; Of course, it works as you would expect and these features were specially designed for these scenario. Security does restrict data on the server side so that it never appears in reports, analysis and elsewhere on the client side. For more information, check out &lt;a href="http://documentation.devexpress.com/#Xaf/CustomDocument3365"&gt;the work schema&lt;/a&gt;. Note that to obtain all these benefits, you will need to &lt;a href="http://documentation.devexpress.com/#Xaf/CustomDocument3367"&gt;configure security in the middle tier&lt;/a&gt;. Simply using the new security system (without implementing it in the middle tier) will not provide data filtering on the server side, because this is done by the middle tier service.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Q:&lt;/strong&gt; Does your new security system allow creating and plugging custom security permissions, i.e. not only permissions for business objects and their members? How do I implement a custom permission?     &lt;br /&gt;&lt;strong&gt;A:&lt;/strong&gt; Sure, much like the previous version, our new security system allows for this. A good example of a custom permission is “Edit Model&amp;quot; permission. Refer to the following Support Center ticket for a detailed description and a small sample project that demonstrates its implementation: &lt;a href="http://www.devexpress.com/issue=Q358567"&gt;http://www.devexpress.com/issue=Q358567&lt;/a&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Q: &lt;/strong&gt;Is it necessary to host the application server on a separate machine as part of a console, Windows service application or a web application on IIS?     &lt;br /&gt;&lt;strong&gt;A: &lt;/strong&gt;No, it is absolutely unnecessary. The application server is a pure NET code that can be run anywhere you need, even on the client application. For instance, in our SecurityDemo, the application server is hosted in the same client application, but in a different &lt;em&gt;AppDomain&lt;/em&gt; (check the &lt;em&gt;ApplicationServerStarter&lt;/em&gt; class for the details). By default, we provide a Visual Studio Project Template that hosts the application server in a Windows service. We plan to provide additional templates based on the customer feedback. If you cannot wait, it is not difficult to make these templates yourself based on the defaults we provide – it is simply a matter of creating a corresponding application type (refer to MSDN for more details) and copying the required application server code.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Q:&lt;/strong&gt; Is there a way to encrypt or compress data between the application server and the client?     &lt;br /&gt;&lt;strong&gt;A: &lt;/strong&gt;&lt;span&gt;There is no special XAF encrypting code because everything is already supported by underlying data transport technologies. For instance, refer to the&amp;nbsp; &lt;a href="http://msdn.microsoft.com/en-US/library/k62k71x0(v=VS.80).aspx"&gt;http://msdn.microsoft.com/en-US/library/k62k71x0(v=VS.80).aspx&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/ms735093.aspx"&gt;http://msdn.microsoft.com/en-us/library/ms735093.aspx&lt;/a&gt; help articles to learn more.&lt;/span&gt;&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Q:&lt;/strong&gt; Is Application server completely stateless?     &lt;br /&gt;&lt;strong&gt;A:&lt;/strong&gt; Yes, the application server is stateless. However, the server caches a database session and access rights for a particular client. It&amp;#39;s not a long-living cache and this is not a state for the client application.&lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Q:&lt;/strong&gt; I heard that you are also planning to move some standard XAF functionality (audit trail, validation, etc.) to the server side, what if I also want to execute my business rules on the server? How do I proceed?     &lt;br /&gt;&lt;strong&gt;A:&lt;/strong&gt; Yes, you are right, we have such plans for the future. In the meantime, if you want to delegate business logic from the client to the server, you can implement a solution similar to that demonstrated in the following Support Center ticket: &lt;a href="http://www.devexpress.com/issue=Q356933"&gt;http://www.devexpress.com/issue=Q356933&lt;/a&gt; &lt;/p&gt;  &lt;p align="justify"&gt;&lt;strong&gt;Q:&lt;/strong&gt; Is there an easy and fast way to replace the old security system with new member-level security?     &lt;br /&gt;&lt;strong&gt;A:&lt;/strong&gt; Yes, we&amp;#39;ll provide a sample converter that can be used to convert old permissions to new permissions for our built-in security objects (User, Role, SecuritySimple, SecurityComplex, etc.). I suggest you check out &lt;a href="http://www.devexpress.com/issue=Q361779"&gt;this discussion in the Support Center&lt;/a&gt; for more information.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Q:&lt;/strong&gt; I noticed there were still some postbacks during my Web application operation. Is it a bug?     &lt;br /&gt;&lt;strong&gt;A:&lt;/strong&gt; No, some tasks can be performed only via postback (e.g. file download, theme changes, etc.). However, we plan enhance our Web UI and you can see our plans in this &lt;a href="http://community.devexpress.com/blogs/eaf/archive/2011/10/07/improvements-to-ajax-and-performance-in-xaf-asp-net-ui-coming-in-v2011-vol-2.aspx"&gt;blog&lt;/a&gt; post.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Q:&lt;/strong&gt; I like the new AJAX Web UI, but previously I used some custom user and third-party controls that operate via postbacks. Is it possible to force them to use AJAX as well?     &lt;br /&gt;&lt;strong&gt;A:&lt;/strong&gt; If a third-party control operates via postbacks and does not support AJAX itself, it&amp;#39;s unlikely to switch it into AJAX. However, it will continue to operate via postbacks as before. As for your custom user controls, it is possible to convert them to AJAX-like controls. Please contact our &lt;a href="http://www.devexpress.com/Support/"&gt;Support Team&lt;/a&gt; for further instructions.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Q:&lt;/strong&gt; What is the best way to convert my existing Web application to 11.2 to use the improved AJAX functionality?     &lt;br /&gt;&lt;strong&gt;A:&lt;/strong&gt; As always, we recommend that you follow the instructions given in the &lt;a href="http://documentation.devexpress.com/#GeneralInformation/CustomDocument2221"&gt;Upgrade Notes&lt;/a&gt; help article. From this article you can also find links to the list of breaking changes and implemented features. Finally, we suggest you check out the &lt;a href="http://www.devexpress.com/Support/Center/KB/ViewKBIssue.aspx?kbid=K18548"&gt;eXpressApp Framework v11.2 ASP.NET Application Migration Guidelines&lt;/a&gt; we&amp;#39;ve prepared. If you experience any difficulties with the upgrade, feel free to contact our &lt;a href="http://www.devexpress.com/Support/"&gt;Support Team&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Q:&lt;/strong&gt; Do you provide any converter for rules created using obsolete ConditionalEditorState and ConditionalFormatting modules?     &lt;br /&gt;&lt;strong&gt;A:&lt;/strong&gt; Sure, we do. Please refer to the following KB Article: &lt;a href="http://www.devexpress.com/kb=K18547"&gt;http://www.devexpress.com/kb=K18547&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Q:&lt;/strong&gt; What are your plans for the old security system? I also noticed that not all XAF demos migrated to the new security system.     &lt;br /&gt;&lt;strong&gt;A:&lt;/strong&gt; Yes, that is true about the demos. You might also notice that the old security is still described in docs. We decided not to migrate all demos to the new security system in this release because there are a lot of people who are using the old security and might even use it in the future as it is effective, even though it works at the UI level. However, migrating all our demos to the new security system is planned as well as complete replacement of the old security system. People who are using Domain Components can also &lt;a href="http://www.devexpress.com/issue=S38496"&gt;track this suggestion&lt;/a&gt; – a DC-based demo based on the new security system. &lt;/p&gt;  &lt;p&gt;As always, we will also try to keep new videos, blogs and other training materials coming. If you have specific suggestions or just want to share your feedback on how we are doing, please drop us a line or simply email me at &lt;a href="mailto:dennis@devexpress.com"&gt;dennis@devexpress.com&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;Happy XAFing&lt;img class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://community.devexpress.com/blogs/eaf/wlEmoticon-smile_74937379.png" /&gt;&lt;/p&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=360519" width="1" height="1"&gt;</description><category domain="http://community.devexpress.com/blogs/eaf/archive/tags/11.2/default.aspx">11.2</category><category domain="http://community.devexpress.com/blogs/eaf/archive/tags/XPO/default.aspx">XPO</category><category domain="http://community.devexpress.com/blogs/eaf/archive/tags/security/default.aspx">security</category><category domain="http://community.devexpress.com/blogs/eaf/archive/tags/n-tier/default.aspx">n-tier</category><category domain="http://community.devexpress.com/blogs/eaf/archive/tags/middle+tier/default.aspx">middle tier</category><category domain="http://community.devexpress.com/blogs/eaf/archive/tags/application+server/default.aspx">application server</category><category domain="http://community.devexpress.com/blogs/eaf/archive/tags/XAF/default.aspx">XAF</category></item><item><title>LINQPad is XPO’s new best friend!</title><link>http://community.devexpress.com/blogs/xpo/archive/2011/12/27/xpo-s-new-friend-is-the-linqpad.aspx</link><pubDate>Tue, 27 Dec 2011 10:23:00 GMT</pubDate><guid isPermaLink="false">bd716303-653c-428d-8b8a-a7d998cde032:361215</guid><dc:creator>Apostolis Bekiaris (DevExpress)</dc:creator><slash:comments>8</slash:comments><description>&lt;p&gt;LINQ is &lt;a href="http://msdn.microsoft.com/en-us/library/bb308959.aspx" target="_blank"&gt;.NET Language-Integrated Query&lt;/a&gt;. It&amp;#39;s included in .NET Framework 3.5 and you can use it in Visual Studio 2008 projects. XPO has officially supported LINQ since v7.3 and since then we have continued to improve and support it. Nowadays &lt;a href="http://www.devexpress.com/Support/Center/kb/p/K18051.aspx" target="_blank"&gt;LINQ to XPO&lt;/a&gt; is very mature, extendable (&lt;a href="http://documentation.devexpress.com/#XPO/CustomDocument9948" target="_blank"&gt;How to: Implement Custom Functions and Criteria in LINQ to XPO&lt;/a&gt;) and powerful (&lt;a href="http://documentation.devexpress.com/#XPO/CustomDocument8130" target="_blank"&gt;Free Joins&lt;/a&gt;). In the latest version we make it even easier to use LINQ to XPO since we only distribute one assembly, DevExpress.XPO.dll, which includes everything! (custom providers as well).&lt;/p&gt;  &lt;p&gt;XPO can talk transparently to a large &lt;a href="http://documentation.devexpress.com/#XPO/CustomDocument2114" target="_blank"&gt;list of database systems&lt;/a&gt;. It was already possible to make complex queries using our &lt;a href="http://documentation.devexpress.com/#XPO/CustomDocument2047" target="_blank"&gt;standard criteria syntax&lt;/a&gt;, however using LINQ offers some great advantages. &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;No magic strings, like you have in standard criteria syntax, &lt;/li&gt;    &lt;li&gt;Intellisense support making it easier and faster to construct your queries, &lt;/li&gt;    &lt;li&gt;Compile time checking, &lt;/li&gt;    &lt;li&gt;Learning to write LINQ queries/lambdas is a must learn for .NET developers, &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;The benefits are clear, however there is a caveat when using LINQ. It is not possible to use Edit and Continue and with even the smallest change you need to restart your debugging session. As a result your development speed is decreased dramatically.&lt;/p&gt;  &lt;p&gt;The solution as always is to use the right tool and in this case the right tool is &lt;a href="http://www.linqpad.net/" target="_blank"&gt;LINQPad&lt;/a&gt;. It provides a flexible UI allowing you to use LINQ in various ways. &lt;/p&gt;  &lt;p&gt;In our latest version our team released an XPO context driver for LINQPad. Let’s see how to configure it.&lt;/p&gt;  &lt;p&gt;Firstly we need to install the driver found at C:\DevExpress 2011.2\Components\Tools\DXperience\XPOContextDriver.lpx. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/xpo/image_41B8A46C.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://community.devexpress.com/blogs/xpo/image_thumb_3BFD8AC6.png" width="502" height="460" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Secondly we need to setup a new connection.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/xpo/image_73639BF4.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://community.devexpress.com/blogs/xpo/image_thumb_0AAEA066.png" width="595" height="474" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;In this example we are going to use the MainDemo assembly containing the business objects.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/xpo/image_68E2C7D4.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://community.devexpress.com/blogs/xpo/image_thumb_074D08BE.png" width="519" height="357" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;LINQPad populated the domain in a hierarchical treelist. This allows us to enjoy using drag &amp;amp; drop plus intellisence in its expression editor to form the LINQ queries. Furthermore it is possible to use your style of language as demonstrated below.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/xpo/image_136E82E5.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://community.devexpress.com/blogs/xpo/image_thumb_6A173AE6.png" width="640" height="397" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The cool part is that LINQPad, written by the great &lt;a href="http://www.albahari.com/" target="_blank"&gt;Joe Albahari&lt;/a&gt;, is available for free. It is strongly recommended as a great way to learn LINQ.&lt;/p&gt;  &lt;p&gt;Now for the fun part, let’s see it in action. Imagine we have the following code in our VS.&lt;/p&gt;  &lt;div style="font-family:consolas;background:white;color:black;font-size:10pt;"&gt;   &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;var&lt;/span&gt; queryable = &lt;span style="color:blue;"&gt;from&lt;/span&gt; c &lt;span style="color:blue;"&gt;in&lt;/span&gt; contacts&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;let&lt;/span&gt; tasks = c.&lt;span style="color:purple;"&gt;Tasks&lt;/span&gt;.&lt;span style="color:#008b8b;"&gt;Where&lt;/span&gt;(t =&amp;gt; t.&lt;span style="color:purple;"&gt;ActualWork&lt;/span&gt; &amp;lt; 0)&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;where&lt;/span&gt; tasks.&lt;span style="color:#008b8b;"&gt;Any&lt;/span&gt;()&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;orderby&lt;/span&gt; c.&lt;span style="color:purple;"&gt;LastName&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;select&lt;/span&gt; &lt;span style="color:blue;"&gt;new&lt;/span&gt; {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; c.&lt;span style="color:purple;"&gt;LastName&lt;/span&gt;,&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:purple;"&gt;Orders&lt;/span&gt; = tasks.&lt;span style="color:#008b8b;"&gt;Count&lt;/span&gt;(),&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; };&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;We wish to see the results of queryable variable ,the best way to achieve this is to set a breakpoint then hit F5. Next we wait for our app to load and navigate to the action that will hit the breakpoint. Finally we must select the queryable variable and hit Shift+F9 to invoke the debugger window and examine the result set. Now we can try to make our requirements more complex. Lets say we also want to examine the result set when ActualWork&amp;gt;10. The solution is really easy when using LINQPad, we simply need to copy paste the code from VS to LINQPad the expression editor like this,&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/xpo/image_37EFEA9C.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://community.devexpress.com/blogs/xpo/image_thumb_54A95FB1.png" width="699" height="660" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;After this we can quickly and easily form queries as we wish and examine their result sets instantly. Using the excellent and cheap &lt;a href="http://www.linqpad.net/Purchase.aspx" target="_blank"&gt;LINQPad Autocompletion&lt;/a&gt; it is possible to use VS like intelligence to further speed up your development.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/xpo/image_2747C9E1.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://community.devexpress.com/blogs/xpo/image_thumb_17C4B812.png" width="657" height="384" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;PS: eXpandFrameWork contributors are already using the Autocompletion feature since LINQPad offered a license for its contributors.&lt;/p&gt;  &lt;p&gt;We would appreciate your feedback on this post. Has it been useful to you? Feel free to contact us with any further questions&lt;/p&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=361215" width="1" height="1"&gt;</description></item><item><title>Explore, Learn &amp; Extend from 4 New DevExpress ASP.NET Demo Websites</title><link>http://community.devexpress.com/blogs/aspnet/archive/2011/12/22/explore-learn-amp-extend-from-4-new-devexpress-asp-net-demo-websites.aspx</link><pubDate>Fri, 23 Dec 2011 00:30:00 GMT</pubDate><guid isPermaLink="false">bd716303-653c-428d-8b8a-a7d998cde032:361087</guid><dc:creator>Mehul Harry (DevExpress)</dc:creator><slash:comments>5</slash:comments><description>&lt;p&gt;Check out these &lt;a href="http://demos.devexpress.com/ASP/" target="_blank"&gt;4 new demo websites&lt;/a&gt; that we released with DevExpress DXv2.&lt;/p&gt;  &lt;h3&gt;Featured Demos&lt;/h3&gt;  &lt;p&gt;Here&amp;#39;s the individual links to each demo:&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="2"&gt;     &lt;tr&gt;       &lt;td&gt;         &lt;p&gt;&lt;a href="http://demos.devexpress.com/RWA/WebmailClient/" target="_blank"&gt;&lt;img alt="" src="http://demos.devexpress.com/ASP/Content/DemoIcons/WebmailClient.png" /&gt;&lt;/a&gt; &lt;/p&gt;          &lt;p align="center"&gt;&lt;a href="http://demos.devexpress.com/RWA/WebmailClient/" target="_blank"&gt;Webmail Client&lt;/a&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td&gt;&amp;#160;&lt;/td&gt;        &lt;td&gt;         &lt;p&gt;&lt;a href="http://demos.devexpress.com/RWA/HotelBooking/" target="_blank"&gt;&lt;img alt="" src="http://demos.devexpress.com/ASP/Content/DemoIcons/HotelBooking.png" /&gt;&lt;/a&gt; &lt;/p&gt;          &lt;p align="center"&gt;&lt;a href="http://demos.devexpress.com/RWA/HotelBooking/" target="_blank"&gt;Hotel Booking&lt;/a&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td&gt;&amp;#160;&lt;/td&gt;        &lt;td&gt;         &lt;p&gt;&lt;a href="http://demos.devexpress.com/RWA/VideoPortal/" target="_blank"&gt;&lt;img alt="" src="http://demos.devexpress.com/ASP/Content/DemoIcons/VideoPortal.png" /&gt;&lt;/a&gt; &lt;/p&gt;          &lt;p align="center"&gt;&lt;a href="http://demos.devexpress.com/RWA/VideoPortal/" target="_blank"&gt;Video Portal&lt;/a&gt;&lt;/p&gt;       &lt;/td&gt;        &lt;td&gt;&amp;#160;&lt;/td&gt;        &lt;td&gt;         &lt;p&gt;&lt;a href="http://demos.devexpress.com/RWA/EventRegistration/" target="_blank"&gt;&lt;img alt="" src="http://demos.devexpress.com/ASP/Content/DemoIcons/EventRegistration.png" /&gt;&lt;/a&gt; &lt;/p&gt;          &lt;p align="center"&gt;&lt;a href="http://demos.devexpress.com/RWA/EventRegistration/" target="_blank"&gt;Event Registration&lt;/a&gt;&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;  &lt;p&gt;You can also find them here on our updated ASP.NET demos page: &lt;a href="http://demos.devexpress.com/ASP/"&gt;http://demos.devexpress.com/ASP/&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Learn &amp;amp; Extend &lt;/h3&gt;  &lt;p&gt;These demo websites show you:&lt;/p&gt;  &lt;p&gt;- What&amp;#39;s possible with different &lt;a href="http://devexpress.com/asp" target="_blank"&gt;DevExpress ASP.NET&lt;/a&gt; products in one website &lt;/p&gt;  &lt;p&gt;- How to create a similar website for your projects &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160; - Full source code for the demo websites is available with our installation &lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160; - Feel free to extend and use any of the source code, images or styles &lt;/p&gt;  &lt;h3&gt;Full source code for C# &amp;amp; VB.NET &lt;/h3&gt;  &lt;p&gt;Full source code is available in the DevExpress DemoCenter application. Launch the DemoCenter from your &amp;#39;Start&amp;#39; menu and click the red &amp;#39;ASP&amp;#39; button. On this page you&amp;#39;ll see these four icons. Solutions for both C# and VB.NET are available: &lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://community.devexpress.com/blogs/aspnet/image_3DB4CDBE.png" width="497" height="121" /&gt;&lt;/p&gt;  &lt;h3&gt;Beautiful &amp;amp; Touch-Enabled&lt;/h3&gt;  &lt;p&gt;Each of these demo websites show a different scenario. And not only does each demo incorporate our controls and leverage the latest technologies like jQuery, they also show a unique look and feel for each site: &lt;/p&gt;  &lt;p&gt;&lt;a href="http://demos.devexpress.com/RWA/WebmailClient/" target="_blank"&gt;Webmail Client&lt;/a&gt; - shows how to use several of the DevExpress ASP.NET major products like the ASPxGridView, ASPxScheduler and many more! And you can also test any of the DevExpress themes against this website by using the dropdown at the top right!&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/aspnet/image_0F19D35A.png" target="_blank"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://community.devexpress.com/blogs/aspnet/image_thumb_5A0FD4DA.png" width="640" height="388" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://demos.devexpress.com/RWA/EventRegistration/" target="_blank"&gt;Event Registration&lt;/a&gt; - shows how to create an internet style website for events! This demo shows off a mobile-friendly interface with larger fonts, tabs and even a new look for ASPxScheduler:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/aspnet/image_398B25D9.png" target="_blank"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://community.devexpress.com/blogs/aspnet/image_thumb_4FE0CB1E.png" width="640" height="388" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://demos.devexpress.com/RWA/HotelBooking/" target="_blank"&gt;Hotel Booking&lt;/a&gt; - shows how to create a stunning website using several of the DevExpress ASP.NET Editor controls:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/aspnet/image_7F3240A8.png" target="_blank"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://community.devexpress.com/blogs/aspnet/image_thumb_40F3B8FB.png" width="640" height="388" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://demos.devexpress.com/RWA/VideoPortal/" target="_blank"&gt;Video Portal&lt;/a&gt; - Shows how to create your own YouTube-style video portal using DevExpress ASP.NET products like the ASPxDataView, ASPxTabControl, XtraCharts and more. In fact, check out the transitions when click on a video:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/aspnet/image_069D647C.png" target="_blank"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://community.devexpress.com/blogs/aspnet/image_thumb_0797E50A.png" width="640" height="388" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Download &amp;amp; Explore&lt;/h3&gt;  &lt;p&gt;&lt;a href="http://www.devexpress.com/Home/Try.xml" target="_blank"&gt;Download DevExpress DXv2&lt;/a&gt; today and explore the above ASP.NET demos. Then drop me a line below with your thoughts, thanks!&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;div class="dxperience-blog-block"&gt;   &lt;h4&gt;DXperience? What&amp;#39;s That?&lt;/h4&gt;    &lt;p&gt;DXperience is the .NET developer&amp;#39;s secret weapon. Get full access to a complete suite of professional components that let you instantly drop in new features, designer styles and fast performance for your applications. Try a fully-functional version of DXperience for free now: &lt;a href="http://www.devexpress.com/Downloads/NET/"&gt;http://www.devexpress.com/Downloads/NET/&lt;/a&gt;&lt;/p&gt;     &lt;/div&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=361087" width="1" height="1"&gt;</description><category domain="http://community.devexpress.com/blogs/aspnet/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://community.devexpress.com/blogs/aspnet/archive/tags/v2011.2/default.aspx">v2011.2</category></item><item><title>VCL Subscription 11.2 released! With 64-bit Delphi XE2 support!</title><link>http://community.devexpress.com/blogs/ctodx/archive/2011/12/22/vcl-subscription-11-2-released-with-64-bit-delphi-xe2-support.aspx</link><pubDate>Thu, 22 Dec 2011 16:11:47 GMT</pubDate><guid isPermaLink="false">bd716303-653c-428d-8b8a-a7d998cde032:361060</guid><dc:creator>Julian Bucknall (DevExpress)</dc:creator><slash:comments>8</slash:comments><description>&lt;p&gt;Yeah, it’s time to break out the exclamation marks! We just released the second major version of our VCL subscription for 2011 and it includes support for Delphi XE2 (both 32-bit and 64-bit) and C++Builder. Since RAD Studio XE2 is the best IDE we’ve seen from Embarcadero, you really have no excuses now.&lt;/p&gt;  &lt;p&gt;If you login to your account page on devexpress.com, you’ll be able to download it immediately. Remember: if you have purchased a subscription and it’s active, this major upgrade is free! &lt;/p&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=361060" width="1" height="1"&gt;</description><category domain="http://community.devexpress.com/blogs/ctodx/archive/tags/v2011.2/default.aspx">v2011.2</category><category domain="http://community.devexpress.com/blogs/ctodx/archive/tags/xe2/default.aspx">xe2</category><category domain="http://community.devexpress.com/blogs/ctodx/archive/tags/C_2B002B00_Builder/default.aspx">C++Builder</category><category domain="http://community.devexpress.com/blogs/ctodx/archive/tags/VCL/default.aspx">VCL</category><category domain="http://community.devexpress.com/blogs/ctodx/archive/tags/Delphi/default.aspx">Delphi</category></item><item><title>Silverlight controls for DXv2 11.2</title><link>http://community.devexpress.com/blogs/ctodx/archive/2011/12/21/silverlight-controls-for-dxv2-11-2.aspx</link><pubDate>Wed, 21 Dec 2011 21:35:22 GMT</pubDate><guid isPermaLink="false">bd716303-653c-428d-8b8a-a7d998cde032:360993</guid><dc:creator>Julian Bucknall (DevExpress)</dc:creator><slash:comments>5</slash:comments><description>&lt;p&gt;As I stated in one of my most recent and (most heavily commented) blog posts, we made the decision to target Silverlight 5 for our Silverlight controls in v2011 vol 2. Now, that may or may not have been the right decision to make, but make it we did. Since Microsoft didn’t release Silverlight 5 until 9 December, two weeks after our release, this meant that our initial release for DXv2 was without one quarter of the platforms we support. This was bad for you, our customers, as well as for us. &lt;/p&gt;  &lt;p&gt;All that will be academic pretty soon since we shall be releasing DXperience v2011 vol 2.6 tomorrow morning, Thursday 22 December. This release will contain the full set of Silverlight controls.&lt;/p&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=360993" width="1" height="1"&gt;</description><category domain="http://community.devexpress.com/blogs/ctodx/archive/tags/v2011.2/default.aspx">v2011.2</category><category domain="http://community.devexpress.com/blogs/ctodx/archive/tags/DXperience/default.aspx">DXperience</category><category domain="http://community.devexpress.com/blogs/ctodx/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://community.devexpress.com/blogs/ctodx/archive/tags/DXv2/default.aspx">DXv2</category></item><item><title>Seasons Greetings from your friends at DevExpress</title><link>http://community.devexpress.com/blogs/ctodx/archive/2011/12/20/seasons-greetings-from-your-friends-at-devexpress.aspx</link><pubDate>Tue, 20 Dec 2011 23:27:11 GMT</pubDate><guid isPermaLink="false">bd716303-653c-428d-8b8a-a7d998cde032:360911</guid><dc:creator>Julian Bucknall (DevExpress)</dc:creator><slash:comments>10</slash:comments><description>&lt;p&gt;&lt;img style="background-image:none;border-right-width:0px;margin:0px 0px 0px 15px;padding-left:0px;padding-right:0px;display:inline;float:right;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="Xmas tree as light painting" border="0" alt="Xmas tree as light painting" align="right" src="http://community.devexpress.com/blogs/ctodx/XmasTree_1BC2CD43.jpg" width="160" height="240" /&gt;I’d like to take this opportunity on behalf of everyone here at DevExpress to wish all our customers and their families the very best of the holiday season and a happy and prosperous New Year. &lt;/p&gt;  &lt;p&gt;It goes without saying, perhaps, but you are instrumental to DevExpress’ own success. We just couldn’t do this without you, and we thank you for being on this wild ride with us. Keep buckled in though because 2012 promises to be even more turbulent (WinRT, anyone? How about HTML5 and client-side controls?), but rest assured DevExpress will be alongside, helping out with robust flexible controls, frameworks and tools for your continued success.&lt;/p&gt;  &lt;p&gt;Happy Holidays!&lt;/p&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=360911" width="1" height="1"&gt;</description><category domain="http://community.devexpress.com/blogs/ctodx/archive/tags/Seasons+Greetings/default.aspx">Seasons Greetings</category></item><item><title>New CodeRush Plugin – CR_ImportNamespace</title><link>http://community.devexpress.com/blogs/rorybecker/archive/2011/12/20/new-coderush-plugin-cr-importnamespace.aspx</link><pubDate>Tue, 20 Dec 2011 22:34:32 GMT</pubDate><guid isPermaLink="false">bd716303-653c-428d-8b8a-a7d998cde032:360908</guid><dc:creator>Rory Becker - DevExpress</dc:creator><slash:comments>9</slash:comments><description>&lt;p&gt;&lt;strong&gt;Problem 1:&lt;/strong&gt; Have you ever started writing code, and then realised you were using a Type directly, without importing it’s namespace?&lt;/p&gt;  &lt;p&gt;You could fix this by either fully qualifying the Type in place, or moving to the top of the file, adding an &lt;em&gt;imports&lt;/em&gt; or &lt;em&gt;using&lt;/em&gt; statement (referencing the appropriate namespace) and then finally working out where you were before you moved, and returning there.&lt;/p&gt;  &lt;p&gt;This takes you away from your code, and context switches you away from the problem you were trying to solve. This costs you time and therefore money (and often sanity)&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Note: With CodeRush, dropping a Marker [Alt+Home] before you move to the top of the file, will greatly ease the return journey [Esc].&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Problem 2:&lt;/strong&gt; Have you ever gone a stage further, and used a Type without even referencing it’s assembly?&lt;/p&gt;  &lt;p&gt;This time it’s even worse… You have to switch your focus out of the editor entirely, and use … *gulp* … the “Add Reference” dialog.&lt;/p&gt;  &lt;p align="center"&gt;Nooooooooooooooooooo!&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The Add Reference dialog&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I don’t know anyone who likes to use the ‘Add Reference’ dialog. I’ve heard it referred to as perhaps the most annoying part of visual studio. Others claim it’s the 2nd most annoying. beaten in this case to the top position, by “Accidentally hitting F1. both of these are seen in this light, because of the ridiculous amount of time that they can eat up.&lt;/p&gt;  &lt;p&gt;The Add Reference dialog is slow and awkward and it takes you away from your code. It has several tabs that might help you in various situations, but 99% of the time these tabs are just not useful to me.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The Project Tab:&lt;/strong&gt; Is very quick to load but is limited to the projects in your solution. This can be handy, but most of the time the references I need are not a part of my solution.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The Browse Tab:&lt;/strong&gt; Works well also, but really it’s something of a last resort. Navigating directory structures looking for the assembly you want can be long and drawn out, and the fact that often you are returning to the same 2-3 locations makes it feel very repetitive.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The Recent Tab:&lt;/strong&gt; Is comparable to the Projects tab. It is quick to load, but does not appear to list enough assemblies to be particularly useful. I work with a fair breadth of assemblies, which means that they cycle through the Recent Tab quite fast. I can’t honestly say that I visit the recent Tab with any real hope of finding the assembly I need.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The .Net Tab: &lt;/strong&gt;Is the tab I find myself using more than every other, and it’s what makes me dread this dialog. The first time I choose to pick a reference from this tab in any given session, it takes around 30 seconds to fill and become responsive again. 30 seconds? Are you kidding me? Seriously?&lt;/p&gt;  &lt;p&gt;Hmmmm … if only there was a way to avoid the Add Reference dialog……&lt;/p&gt;  &lt;p&gt;Oh Wait..&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Introducing CR_ImportNamespace&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;CR_ImportNamespace is designed to allow you to add namespace and assembly references without ever leaving the editor. It functions as a CodeProvider. Which is to say that the functionality is accessed through the Code menu on the CodeRush smart Tag.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Availability&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The “Import Namespace…” code provider is made available when your caret is on an undeclared type.&lt;/p&gt;  &lt;p&gt;For example:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/rorybecker/ImportNamespaceNoCacheYet_75C46B36.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="ImportNamespaceNoCacheYet" border="0" alt="ImportNamespaceNoCacheYet" src="http://community.devexpress.com/blogs/rorybecker/ImportNamespaceNoCacheYet_thumb_50C6AABD.png" width="488" height="154" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The first time you trigger the “Import Namespace…” CodeProvider, the plugin will create a cache of all the types in the version of the .Net framework, which your current project targets. This cache will be referred to during subsequent invocations.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/rorybecker/ImportNamespaceBuildingCache_68EA1518.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="ImportNamespaceBuildingCache" border="0" alt="ImportNamespaceBuildingCache" src="http://community.devexpress.com/blogs/rorybecker/ImportNamespaceBuildingCache_thumb_4F15DEE9.png" width="506" height="129" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Once this cache is built, you will be presented with a list of namespaces which contain a matching type:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/rorybecker/ImportNamespaceAction_3FFF000F.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="ImportNamespaceAction" border="0" alt="ImportNamespaceAction" src="http://community.devexpress.com/blogs/rorybecker/ImportNamespaceAction_thumb_1139476D.png" width="365" height="154" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If only one namespace contains such a type, then this namespace will be automatically chosen after the cache is completed.&lt;/p&gt;  &lt;p&gt;On subsequent invocations, if only a single namespace is applicable, then it will be offered as a top level menu item: &lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/rorybecker/ImportNamespaceSingleChoice_6C3B86F3.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="ImportNamespaceSingleChoice" border="0" alt="ImportNamespaceSingleChoice" src="http://community.devexpress.com/blogs/rorybecker/ImportNamespaceSingleChoice_thumb_56719E96.png" width="569" height="150" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;If more than one namespace is suited to the task, then each of these will be presented as a submenu:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/rorybecker/ImportNamespaceMultiChoice_6E9508F1.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="ImportNamespaceMultiChoice" border="0" alt="ImportNamespaceMultiChoice" src="http://community.devexpress.com/blogs/rorybecker/ImportNamespaceMultiChoice_thumb_42780C00.png" width="640" height="179" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;However no matter how the namespaces are presented to you, the selection of one will produce the same effect. &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt; - The namespace is imported.&lt;/li&gt;    &lt;li&gt; - Any required Assembly is referenced.&lt;/li&gt;    &lt;li&gt;&lt;/li&gt;    &lt;li&gt;… and you &lt;strong&gt;never move away from your existing code&lt;/strong&gt;.&lt;/li&gt;    &lt;li&gt;&lt;/li&gt;    &lt;li&gt;Finally unlike other implementations, CR_ImportNamespace is not limited to finding and referencing projects within your solution, or even to assemblies referenced by them. It &lt;strong&gt;covers the entire framework&lt;/strong&gt; versions &lt;strong&gt;2.0, 3.0, 3.5 and 4.0&lt;/strong&gt; . It understands different framework profiles (&lt;strong&gt;client and full&lt;/strong&gt;) and will only offer up namespaces suited to your current project.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;So where can you get this glorious new plugin? Do you have to wait for the next release of CodeRush? Do you have to wait for 2012? No, as ever, we’re committed to accelerating your productivity whenever we can. In this case… Now&lt;/p&gt;  &lt;p&gt;Yes that’s right no. This plugin and it’s accompanying source has been generously donated to our favourite community project. You can find the &lt;a href="http://code.google.com/p/dxcorecommunityplugins/wiki/CR_ImportNamespace"&gt;relevant links and details here&lt;/a&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;So let’s stop messing around, manually adding namespace and assembly references. Let’s get on with the business of writing code to solve business problems, and see what develops.&lt;/li&gt; &lt;/ul&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=360908" width="1" height="1"&gt;</description><category domain="http://community.devexpress.com/blogs/rorybecker/archive/tags/Code+Generation/default.aspx">Code Generation</category><category domain="http://community.devexpress.com/blogs/rorybecker/archive/tags/References/default.aspx">References</category><category domain="http://community.devexpress.com/blogs/rorybecker/archive/tags/CodeRush/default.aspx">CodeRush</category><category domain="http://community.devexpress.com/blogs/rorybecker/archive/tags/CodeProvider/default.aspx">CodeProvider</category><category domain="http://community.devexpress.com/blogs/rorybecker/archive/tags/Plugin/default.aspx">Plugin</category></item><item><title>eXpand on Hanselminutes</title><link>http://community.devexpress.com/blogs/eaf/archive/2011/12/16/expand-on-hanselminutes.aspx</link><pubDate>Fri, 16 Dec 2011 05:29:00 GMT</pubDate><guid isPermaLink="false">bd716303-653c-428d-8b8a-a7d998cde032:360678</guid><dc:creator>Apostolis Bekiaris (DevExpress)</dc:creator><slash:comments>3</slash:comments><description>&lt;p&gt;First of all I would like to say a big thank you to Scott for having me on his show. I really enjoyed our conversation even though they said I worked for one of our competitors in the intro! &lt;/p&gt;  &lt;p&gt;&lt;a href="http://hanselminutes.com/297/framework-series-the-expand-framework-with-apostolis-bekiaris" target="_blank"&gt;Framework Series: The eXpand Framework with Apostolis Bekiaris&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;For those of you who have not had a chance to listen to the show yet Scott and I had an illuminating discussion about the benefits of open source. I found the comments Scott made about Microsoft’s attitude towards these kind of projects particularly revealing. Of course we found plenty of time to chat about eXpand, including some of the history of the project and the important role that our contributors play. It is clear that Scott recognizes the value of a healthy open source community like ours. Also on the agenda&amp;#160; were the advantages of the special relationship between &lt;a href="http://www.devexpress.com/Products/NET/Application_Framework/" target="_blank"&gt;XAF&lt;/a&gt; and eXpand as well as the support that DevExpress gives to the world of open source.&lt;/p&gt;  &lt;p&gt;Thanks again to all of you out there in the community this is your framework and we all deserve a share of the glory!&lt;/p&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=360678" width="1" height="1"&gt;</description><category domain="http://community.devexpress.com/blogs/eaf/archive/tags/eXpandFrameWork/default.aspx">eXpandFrameWork</category></item><item><title>How to present PowerPoint slides with a WinForms Tiles App</title><link>http://community.devexpress.com/blogs/aspnet/archive/2011/12/15/download-my-touch-based-winforms-tiles-powerpoint-app.aspx</link><pubDate>Thu, 15 Dec 2011 23:00:00 GMT</pubDate><guid isPermaLink="false">bd716303-653c-428d-8b8a-a7d998cde032:360467</guid><dc:creator>Mehul Harry (DevExpress)</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Check out this slick little application I built using the new DevExpress WinForms Tile controls for my &lt;a href="http://community.devexpress.com/blogs/aspnet/archive/2011/12/07/watch-this-video-take-a-tour-of-dxv2-touch.aspx" target="_blank"&gt;touch webinar&lt;/a&gt;:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/aspnet/image_1C42CF7B.png" target="_blank"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://community.devexpress.com/blogs/aspnet/image_thumb_0229A25D.png" width="640" height="360" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Quick &amp;amp; fun&lt;/h3&gt;  &lt;p&gt;This app took me about 15 minutes to create. And I wrote it for 2 main reasons:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;It&amp;#39;s a fun way to learn the new DevExpress WinForms Tile suite &lt;/li&gt;    &lt;li&gt;And it&amp;#39;s a great way to show touch features &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Creating a slick and useful app quickly like my TileControlPowerPoint is what DevExpress productivity is all about.&lt;/p&gt;  &lt;h3&gt;How it&amp;#39;s made…&lt;/h3&gt;  &lt;p&gt;This visually stunning application is simple and it follows most of the steps outlined in the following videos:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.youtube.com/watch?feature=player_embedded&amp;amp;v=_SsRalcL_58" target="_blank"&gt;WinForms Tile Control - Getting Started&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://community.devexpress.com/blogs/aspnet/archive/2011/12/07/watch-this-video-take-a-tour-of-dxv2-touch.aspx" target="_blank"&gt;Watch this video - Take a tour of DXv2: Touch&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Here&amp;#39;s the general steps:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;I started by creating a new (blank) WinForms app. &lt;/li&gt;    &lt;li&gt;Added the DevExpress XtraTile control, then 1 group and 1 tile. &lt;a href="http://www.youtube.com/watch?feature=player_embedded&amp;amp;v=_SsRalcL_58" target="_blank"&gt;Watch this video to learn how&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;Added a green metro-style background image and customized the tile to make it larger. &lt;/li&gt;    &lt;li&gt;Added the code below to look for a &amp;#39;Slides&amp;#39; folder and then dynamically create tiles based on the slides. This saves the trouble of manually creating each tile. &lt;/li&gt;    &lt;li&gt;Finally, I set the base form is also set to maximum and without a title bar. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Note: I use the background image property of the tiles to show the slides. These images were originally developed in PowerPoint and it&amp;#39;s very easy to &lt;a href="http://office.microsoft.com/en-us/powerpoint-help/save-a-picture-as-a-jpg-gif-or-png-HA010337415.aspx" target="_blank"&gt;save your slides as images&lt;/a&gt;.&lt;/p&gt;  &lt;h3&gt;Download&lt;/h3&gt;  &lt;p&gt;Download the full source code of the TileControlPowerPoint WinForms touch application here:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/aspnet/Samples/TileControlPowerPoint.zip"&gt;&lt;img border="0" alt="TileControlPowerPoint.zip" align="absMiddle" src="http://community.devexpress.com/utility/filethumbnails/zip-Small.gif" /&gt;&lt;/a&gt; &lt;a href="http://community.devexpress.com/blogs/aspnet/Samples/TileControlPowerPoint.zip"&gt;TileControlPowerPoint.zip&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;DemoWare&lt;/h3&gt;  &lt;p&gt;Warning: This was a small fun app I wrote in 15 minutes. As such, I don&amp;#39;t recommend hard coding strings (the way I did). In fact, feel free to Refactor the small amount of code below. It dynamically creates tiles and uses the images for background so you don&amp;#39; t need to do it at design-time:&lt;/p&gt;  &lt;pre class="brush: csharp;"&gt;string path = AppDomain.CurrentDomain.BaseDirectory + @&amp;quot;slides&amp;quot;;
private void LoadItems()
{
    if (Directory.Exists(path))
    {
        tileControl1.BeginUpdate();
        int filesCount = Directory.GetFiles(path).Length;
        for (int i = 1; i &amp;lt; filesCount; i++)
        {
            string fileName = path + &amp;quot;\\Slide&amp;quot; + i + &amp;quot;.png&amp;quot;;
            TileItem item = new TileItem() { IsLarge = true, BackgroundImage = Image.FromFile(fileName) };
            tileGroup2.Items.Add(item);
        }
        tileControl1.EndUpdate();
    }
    else
    {
        MessageBox.Show(&amp;quot;Slides not found&amp;quot;);
        if (System.Windows.Forms.Application.MessageLoop)
        {
            Application.Exit();
        }
        else
        {
            System.Environment.Exit(1);
        }
    }
}&lt;/pre&gt;

&lt;p&gt;Check out the &lt;a href="http://community.devexpress.com/blogs/aspnet/archive/2011/12/07/watch-this-video-take-a-tour-of-dxv2-touch.aspx" target="_blank"&gt;recent touch webinar&lt;/a&gt; and &lt;a href="http://community.devexpress.com/blogs/aspnet/Samples/TileControlPowerPoint.zip" target="_blank"&gt;download the app&lt;/a&gt; I used to present the slides. Then drop me a line below with your thoughts. Thanks!&lt;/p&gt;

&lt;div class="dxperience-blog-block"&gt;
  &lt;h4&gt;DXperience? What&amp;#39;s That?&lt;/h4&gt;

  &lt;p&gt;DXperience is the .NET developer&amp;#39;s secret weapon. Get full access to a complete suite of professional components that let you instantly drop in new features, designer styles and fast performance for your applications. Try a fully-functional version of DXperience for free now: &lt;a href="http://www.devexpress.com/Downloads/NET/"&gt;http://www.devexpress.com/Downloads/NET/&lt;/a&gt;&lt;/p&gt;

  
&lt;/div&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=360467" width="1" height="1"&gt;</description><category domain="http://community.devexpress.com/blogs/aspnet/archive/tags/Webinar/default.aspx">Webinar</category><category domain="http://community.devexpress.com/blogs/aspnet/archive/tags/WinForms/default.aspx">WinForms</category></item><item><title>Hey Mom we are on the Hanselminutes show!</title><link>http://community.devexpress.com/blogs/eaf/archive/2011/12/14/hey-mom-we-are-on-the-hanselminutes-show.aspx</link><pubDate>Wed, 14 Dec 2011 03:33:00 GMT</pubDate><guid isPermaLink="false">bd716303-653c-428d-8b8a-a7d998cde032:360590</guid><dc:creator>Apostolis Bekiaris (DevExpress)</dc:creator><slash:comments>3</slash:comments><description>&lt;p&gt;At 11.00 PST on Thursday 15th December I will be appearing live on Scott Hanselman’s podcast &lt;a href="http://hanselminutes.com/" target="_blank"&gt;Hanselminutes&lt;/a&gt;. During the course of the show Scott and I will be discussing &lt;a href="http://www.expandframework.com" target="_blank"&gt;eXpand framework&lt;/a&gt; and its relationship with &lt;a href="http://www.devexpress.com/Products/NET/Application_Framework/" target="_blank"&gt;XAF&lt;/a&gt;. Please tune in and show some support for your favorite frameworks! We built this thing together guys and this is an exciting event for all of us.&lt;/p&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=360590" width="1" height="1"&gt;</description><category domain="http://community.devexpress.com/blogs/eaf/archive/tags/eXpandFrameWork/default.aspx">eXpandFrameWork</category></item><item><title>Watch this video - Take a tour of DXv2: Touch</title><link>http://community.devexpress.com/blogs/aspnet/archive/2011/12/07/watch-this-video-take-a-tour-of-dxv2-touch.aspx</link><pubDate>Wed, 07 Dec 2011 21:30:00 GMT</pubDate><guid isPermaLink="false">bd716303-653c-428d-8b8a-a7d998cde032:360241</guid><dc:creator>Mehul Harry (DevExpress)</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;Check out the &lt;a href="http://www.youtube.com/watch?v=TuzU9riviJk" target="_blank"&gt;&amp;quot;Take a tour of DXv2: Touch&amp;quot; webinar video&lt;/a&gt;:&lt;/p&gt;  &lt;div style="padding-bottom:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;float:none;padding-top:0px;" id="scid:5737277B-5D6D-4f48-ABFC-DD9C333F4C5D:41087ec9-712c-4df8-a5e6-e3513830c132" class="wlWriterEditableSmartContent"&gt;&lt;div&gt;&lt;object width="663" height="372"&gt;&lt;param name="movie" value="http://www.youtube.com/v/TuzU9riviJk?hl=en&amp;amp;hd=1"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/TuzU9riviJk?hl=en&amp;amp;hd=1" type="application/x-shockwave-flash" width="663" height="372"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;div style="width:663px;clear:both;font-size:.8em;"&gt;Watch this video to see the full story of DXv2 Touch features&lt;/div&gt;&lt;/div&gt;  &lt;h3&gt;Touch For All 4 .NET Platforms&lt;/h3&gt;  &lt;p&gt;DXv2 provides you touch enabled features for all 4 .NET platforms! &lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.devexpress.com/Subscriptions/DXperience/DXv2/index.xml?page=48" target="_blank"&gt;ASP.NET Touch&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;ASP.NET applications powered by DevExpress Controls are now touch enabled for both iOS and Android - from scrolling and resizing to the dragging of web controls.&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.devexpress.com/Subscriptions/DXperience/DXv2/index.xml?page=35" target="_blank"&gt;WinForms&lt;/a&gt; &amp;amp; &lt;a href="http://www.devexpress.com/Subscriptions/DXperience/DXv2/index.xml?page=3" target="_blank"&gt;WPF&lt;/a&gt; Touch&lt;/h3&gt;  &lt;p&gt;Applications powered by DevExpress WinForms or WPF Controls are&lt;strong&gt; now touch enabled&lt;/strong&gt; - from the dragging of UI elements to horizontal and vertical scrolling. Single and multi-touch features. Watch the webinar video to learn more and see it in action.&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.devexpress.com/Subscriptions/DXperience/silverlight-features.xml" target="_blank"&gt;Silverlight Touch&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;As unbelievable as it might sound, DevExpress has taken key steps to enable touch support on the Silverlight platform. Yes, that means your end-users can use touch to interact with our Silverlight Tile Control and Silverlight Grid. Though only the first step, the touch is on its way for Silverlight and browser hosted apps.&lt;/p&gt;  &lt;h3&gt;&lt;a href="http://www.devexpress.com/Subscriptions/DXperience/DXv2/index.xml?page=34" target="_blank"&gt;WinForms Tile&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;&lt;strong&gt;New XtraTiles Suite&lt;/strong&gt; - The new WinForms Tile Control allows you to re-imagine the way in which an application interacts with end-users and build dashboards that are ultra-efficient and fully customizable.&lt;/p&gt;  &lt;h3&gt;Tile Control for &lt;a href="http://www.devexpress.com/Subscriptions/DXperience/DXv2/index.xml?page=2" target="_blank"&gt;WPF&lt;/a&gt; and &lt;a href="http://www.devexpress.com/Subscriptions/DXperience/DXv2/index.xml?page=18" target="_blank"&gt;Silverlight&lt;/a&gt;&lt;/h3&gt;  &lt;p&gt;&lt;strong&gt;New Tile Layout in DXLayoutControl&lt;/strong&gt; - The DevExpress Layout Control has been extended with a new TileLayout option, allowing you to replicate the look, feel and behavior of Windows® 8 and thus target next generation devices with ease. Whether using WPF or Silverlight, the Tile Layout Control allows you to re-imagine the way in which an application interacts with end-users and build dashboards that are ultra-efficient and fully customizable.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=TuzU9riviJk" target="_blank"&gt;Watch the webinar video&lt;/a&gt;, then drop me a line below with your thoughts.&lt;/p&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=360241" width="1" height="1"&gt;</description><category domain="http://community.devexpress.com/blogs/aspnet/archive/tags/DXperience/default.aspx">DXperience</category><category domain="http://community.devexpress.com/blogs/aspnet/archive/tags/v2011.2/default.aspx">v2011.2</category><category domain="http://community.devexpress.com/blogs/aspnet/archive/tags/Touch/default.aspx">Touch</category></item><item><title>WPF Map Control - it's FREE to all MSDN Subscribers</title><link>http://community.devexpress.com/blogs/thinking/archive/2011/12/02/wpf-map-control-it-39-s-free-to-all-msdn-subscribers.aspx</link><pubDate>Fri, 02 Dec 2011 23:33:00 GMT</pubDate><guid isPermaLink="false">bd716303-653c-428d-8b8a-a7d998cde032:359968</guid><dc:creator>Ray Navasarkian (DevExpress)</dc:creator><slash:comments>7</slash:comments><description>&lt;p&gt;We&amp;#39;ve been receiving lots of questions on our WPF Map Control and I wanted to take a minute to remind all of you that the control is free to all MSDN Subscribers&lt;/p&gt;&lt;p&gt;The link to MSDN is: &lt;a href="http://msdn.microsoft.com/en-us/"&gt;http://msdn.microsoft.com/en-us/&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Look for the banner that says: &amp;quot;Unwrap your map&amp;quot;&lt;/p&gt;&lt;p&gt;&lt;a title="FREE WPF MAP" href="http://dxpr.es/rAQxNW" target="_blank"&gt;&lt;img alt="WPF Map Control - FREE" src="http://community.devexpress.com/blogs/thinking/WPF/WPF-Map-Control-FREE-MSDN.png" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;To learn more about the WPF Map Control and review its runtime capabilities, watch the following video:&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.youtube.com/user/DeveloperExpress?feature=mhee#p/u/1/Gkf4aoXkv0o" target="_blank"&gt;http://www.youtube.com/user/DeveloperExpress?feature=mhee#p/u/1/Gkf4aoXkv0o&lt;/a&gt;&lt;/p&gt;&lt;p&gt;We also offer a Silverlight version of the Map Control (though its not free, it does ship as part of our &lt;a title="Silverlight Map Control" href="http://devexpress.com/Subscriptions/DXperience/silverlight-features.xml" target="_blank"&gt;subscriptions&lt;/a&gt;). We&amp;#39;ve got an introductory tutorial video available on YouTube. &lt;/p&gt;&lt;p&gt;&lt;a href="http://www.youtube.com/user/DeveloperExpress?feature=mhee#p/u/23/zsdwEVBbHg0" target="_blank"&gt;http://www.youtube.com/user/DeveloperExpress?feature=mhee#p/u/23/zsdwEVBbHg0&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=359968" width="1" height="1"&gt;</description><category domain="http://community.devexpress.com/blogs/thinking/archive/tags/controls/default.aspx">controls</category><category domain="http://community.devexpress.com/blogs/thinking/archive/tags/WPF/default.aspx">WPF</category><category domain="http://community.devexpress.com/blogs/thinking/archive/tags/map/default.aspx">map</category><category domain="http://community.devexpress.com/blogs/thinking/archive/tags/v2011.2/default.aspx">v2011.2</category><category domain="http://community.devexpress.com/blogs/thinking/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://community.devexpress.com/blogs/thinking/archive/tags/free/default.aspx">free</category><category domain="http://community.devexpress.com/blogs/thinking/archive/tags/msdn/default.aspx">msdn</category><category domain="http://community.devexpress.com/blogs/thinking/archive/tags/DXv2/default.aspx">DXv2</category></item><item><title>You have changes? I have Workflow!</title><link>http://community.devexpress.com/blogs/eaf/archive/2011/12/01/starting-workflows-declaratively-when-object-changes.aspx</link><pubDate>Thu, 01 Dec 2011 03:10:00 GMT</pubDate><guid isPermaLink="false">bd716303-653c-428d-8b8a-a7d998cde032:357433</guid><dc:creator>Apostolis Bekiaris (DevExpress)</dc:creator><slash:comments>5</slash:comments><description>&lt;p&gt;&lt;em&gt;&lt;font size="1" face="Arial"&gt;Let me describe for a moment how we at DevExpress work. We build and sell software which means that we only sell and provide support for products that have been built and tested by us! However I am here as a framework evangelist and huge XAF fan. This makes it my duty to spread the word as much as I can and make XAF even bigger. To this end through collaboration within the XAF &lt;a href="http://community.devexpress.com/forums/162.aspx" target="_blank"&gt;community&lt;/a&gt;, we have been building and supporting &lt;/font&gt;&lt;a href="http://www.expandframework.com/" target="_blank"&gt;&lt;font size="1" face="Arial"&gt;eXpand&lt;/font&gt;&lt;/a&gt;&lt;font size="1" face="Arial"&gt;. This framework follows XAF to the letter and takes things even further. &lt;/font&gt;&lt;a href="http://www.expandframework.com/" target="_blank"&gt;&lt;font size="1" face="Arial"&gt;eXpand&lt;/font&gt;&lt;/a&gt;&lt;font size="1" face="Arial"&gt; gets its inspiration from real life situations and bases itself on examples from DevExpress Support Center. &lt;/font&gt;&lt;a href="http://www.expandframework.com/" target="_blank"&gt;&lt;font size="1" face="Arial"&gt;eXpand&lt;/font&gt;&lt;/a&gt;&lt;font size="1" face="Arial"&gt; is the first open source project based on the DevExpress &lt;/font&gt;&lt;a href="http://www.devexpress.com/Products/NET/Application_Framework/" target="_blank"&gt;&lt;font size="1" face="Arial"&gt;eXpressApp Framework (XAF)&lt;/font&gt;&lt;/a&gt;&lt;font size="1" face="Arial"&gt;. More info is available at &lt;/font&gt;&lt;a href="http://www.expandframework.com/" target="_blank"&gt;&lt;font size="1" face="Arial"&gt;www.expandframework.com&lt;/font&gt;&lt;/a&gt;&lt;font size="1" face="Arial"&gt; and our very existence relies on your efforts! Anyone is welcome to contribute and enjoy the rewards. It is not necessary to be a XAF guru, we can all manage to create a behavior taken from DevExpress &lt;a href="http://search.devexpress.com/?q=XPO+OR+XAF&amp;amp;p=T4|P2|0&amp;amp;d=16" target="_blank"&gt;code central&lt;/a&gt;. Let’s work together to enhance our beloved XAF!&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;WF4 uses a service oriented architecture and as a result any problem can be decoupled into smaller, easily solvable and testable services. XAF uses MVC architecture which, in a sense, is very similar to that used by WF4. We can compare XAF’s controllers to WF4 services. Moreover XAF’s Application does the same job as the WF4 server. The upshot of all this is that users should be able to get the feel of WF4 in no time at all. The XAF workflow module introduces a new layer that makes the already decoupled services aware of our business classes.&amp;#160; After this the sky is the limit and over the next few posts I aim to demonstrate some of what can be achieved. For example the next post will focus on creating an event driven workflow initialization engine.&lt;/p&gt;  &lt;p&gt;To get back to today’s post, we will discuss an implementation that is very decoupled and as a result it has very limited dependencies on other modules. It is worth noting that all XAF’s features are decoupled, persistent objects take on the role of domain mappers.&lt;/p&gt;  &lt;p&gt;Take these requirements; &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;an end user needs to be able to input an object type (and or) a property name, &lt;/li&gt;    &lt;li&gt;an object change needs to start the workflow either at client or at sever, &lt;/li&gt;    &lt;li&gt;workflows need to be aware of the object that has changed, its PropertyName and its property OldValue. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;u&gt;&lt;strong&gt;The custom workflow definition&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;We cannot use the default &lt;a href="http://www.devexpress.com/Products/NET/Application_Framework/" target="_blank"&gt;XAF&lt;/a&gt; XpoWorkFlowDefinition class in any way.&amp;#160; This is because there are no fields to store the PropertyName and its OldValue. We should not even derive from the default XpoWorkFlowDefinition because we may face difficulties as this class is used by our workflow server. To cope with this issue it is necessary to create a custom ObjectChangedWorkflow definition as shown.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/eaf/image_125EEED2.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://community.devexpress.com/blogs/eaf/image_thumb_7431311D.png" width="654" height="404" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;While we are doing this we also need to modify the default xaml of the workflow and add the two more arguments (propertyName, oldValue) as per our requirements.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/eaf/image_282FB841.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://community.devexpress.com/blogs/eaf/image_thumb_34BD655D.png" width="519" height="210" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Below you can see the UI of this custom workflow definition,&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/eaf/image_1AAE5D55.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://community.devexpress.com/blogs/eaf/image_thumb_1CBB3651.png" width="786" height="541" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Up to here XAF has made things very straightforward for us. We have designed a normal persistent class to store our data and we have used attributes (&lt;em&gt;PropertyEditorType, DataStourceProperty, TypeConverter etc&lt;/em&gt;) to configure the UI.&lt;/p&gt;  &lt;p&gt;&lt;u&gt;&lt;strong&gt;Registration of custom workflow definition&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;The next step is to register this custom workflow definition. To help with this task, eXpand, provides the &lt;a href="https://github.com/expand/eXpand/blob/master/Xpand/Xpand.ExpressApp.Modules/Workflow/WorkflowStartService.cs" target="_blank"&gt;WorkflowStartService&amp;lt;T&amp;gt;&lt;/a&gt; where T is the type of workflow. Furthermore for &lt;a href="https://github.com/expand/eXpand/blob/master/Xpand/Xpand.ExpressApp.Modules/Workflow/ObjectChangedWorkflows/ObjectChangedWorkflow.cs" target="_blank"&gt;ObjectChangeWorkflow&lt;/a&gt; definitions the implementation is rather easy since there are no further requirements.&lt;/p&gt;  &lt;div style="background:white;"&gt;   &lt;p style="margin:0px;"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;class&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span&gt;&lt;font color="#00008b"&gt;ObjectChangedWorkflowStartService&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; : &lt;/font&gt;&lt;span&gt;&lt;font color="#00008b"&gt;WorkflowStartService&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;lt;&lt;/font&gt;&lt;span&gt;&lt;font color="#00008b"&gt;ObjectChangedWorkflow&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;gt; {&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span&gt;&lt;font color="#00008b"&gt;ObjectChangedWorkflowStartService&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;()&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; : &lt;/font&gt;&lt;span&gt;&lt;font color="#00008b"&gt;base&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;span&gt;&lt;font color="#00008b"&gt;TimeSpan&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;.FromMinutes(1)) {&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span&gt;&lt;font color="#00008b"&gt;ObjectChangedWorkflowStartService&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;span&gt;&lt;font color="#00008b"&gt;TimeSpan&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; requestsDetectionPeriod) : &lt;/font&gt;&lt;span&gt;&lt;font color="#00008b"&gt;base&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;(requestsDetectionPeriod) { }&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;protected&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;override&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;bool&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span&gt;&lt;font color="#008b8b"&gt;NeedToStartWorkflow&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;span&gt;&lt;font color="#00008b"&gt;IObjectSpace&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; objectSpace, &lt;/font&gt;&lt;span&gt;&lt;font color="#00008b"&gt;ObjectChangedWorkflow&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; workflow) {&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;true&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;protected&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;override&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span&gt;&lt;font color="#008b8b"&gt;AfterWorkFlowStarted&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;span&gt;&lt;font color="#00008b"&gt;IObjectSpace&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; objectSpace, &lt;/font&gt;&lt;span&gt;&lt;font color="#00008b"&gt;ObjectChangedWorkflow&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; workflow, &lt;/font&gt;&lt;span&gt;&lt;font color="#00008b"&gt;Guid&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; startWorkflow) {&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/p&gt; &lt;/div&gt;  &lt;p style="margin:0px;"&gt;&lt;u&gt;&lt;strong&gt;Start workflow - Track Object Changes&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;Now, when I have registered workflows on the server, it&amp;#39;s time to return to my task: start a workflow when a property has been changed.    &lt;br /&gt;In XAF, I can track changes with the help of the ObjectSpace.Committing and ObjectSpace.ObjectChanged events. However because we need to create only one request per object change, it is advisable to collect the changes in an array.&lt;/p&gt;  &lt;div style="background:white;"&gt;   &lt;p style="margin:0px;"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;protected&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;override&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span&gt;&lt;font color="#008b8b"&gt;OnActivated&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;() {&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;base&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;span&gt;&lt;font color="#008b8b"&gt;OnActivated&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;();&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; (&lt;/font&gt;&lt;span&gt;&lt;font color="#008b8b"&gt;TypeHasWorkflows&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;()) {&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span&gt;&lt;font color="#800080"&gt;ObjectSpace&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;span&gt;&lt;font color="#ff00ff"&gt;ObjectChanged&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span&gt;&lt;font color="#008b8b"&gt;+=&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span&gt;&lt;font color="#008b8b"&gt;PopulateObjectChangedEventArgs&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span&gt;&lt;font color="#800080"&gt;ObjectSpace&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;span&gt;&lt;font color="#ff00ff"&gt;Committing&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span&gt;&lt;font color="#008b8b"&gt;+=&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span&gt;&lt;font color="#008b8b"&gt;StartWorkFlows&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span&gt;&lt;font color="#008b8b"&gt;PopulateObjectChangedEventArgs&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; sender, &lt;/font&gt;&lt;span&gt;&lt;font color="#00008b"&gt;ObjectChangedEventArgs&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; objectChangedEventArgs) {&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; (!&lt;/font&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;span&gt;&lt;font color="#008b8b"&gt;IsNullOrEmpty&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;(objectChangedEventArgs.&lt;/font&gt;&lt;span&gt;&lt;font color="#800080"&gt;PropertyName&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;)) {&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; changedEventArgs = &lt;/font&gt;&lt;span&gt;&lt;font color="#800080"&gt;_objectChangedEventArgses&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;span&gt;&lt;font color="#008b8b"&gt;FirstOrDefault&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;(args =&amp;gt; args.&lt;/font&gt;&lt;span&gt;&lt;font color="#800080"&gt;Object&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; == objectChangedEventArgs.&lt;/font&gt;&lt;span&gt;&lt;font color="#800080"&gt;Object&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &amp;amp;&amp;amp; args.&lt;/font&gt;&lt;span&gt;&lt;font color="#800080"&gt;PropertyName&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; == objectChangedEventArgs.&lt;/font&gt;&lt;span&gt;&lt;font color="#800080"&gt;PropertyName&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;);&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; (changedEventArgs != &lt;/font&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;) {&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span&gt;&lt;font color="#800080"&gt;_objectChangedEventArgses&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;span&gt;&lt;font color="#008b8b"&gt;Remove&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;(changedEventArgs);&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span&gt;&lt;font color="#800080"&gt;_objectChangedEventArgses&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;span&gt;&lt;font color="#008b8b"&gt;Add&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span&gt;&lt;font color="#00008b"&gt;ObjectChangedEventArgs&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;(changedEventArgs.&lt;/font&gt;&lt;span&gt;&lt;font color="#800080"&gt;Object&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;, changedEventArgs.&lt;/font&gt;&lt;span&gt;&lt;font color="#800080"&gt;PropertyName&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;, changedEventArgs.&lt;/font&gt;&lt;span&gt;&lt;font color="#800080"&gt;OldValue&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;, objectChangedEventArgs.&lt;/font&gt;&lt;span&gt;&lt;font color="#800080"&gt;NewValue&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;));&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; } &lt;/font&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;else&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span&gt;&lt;font color="#800080"&gt;_objectChangedEventArgses&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;span&gt;&lt;font color="#008b8b"&gt;Add&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;(objectChangedEventArgs);&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span&gt;&lt;font color="#008b8b"&gt;StartWorkFlow&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;span&gt;&lt;font color="#00008b"&gt;ObjectChangedEventArgs&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; objectChangedEventArgs, &lt;/font&gt;&lt;span&gt;&lt;font color="#00008b"&gt;ObjectChangedWorkflow&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; objectChangedWorkflow) {&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; o = objectChangedEventArgs.&lt;/font&gt;&lt;span&gt;&lt;font color="#800080"&gt;Object&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span&gt;&lt;font color="#00008b"&gt;ITypeInfo&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; typeInfo = &lt;/font&gt;&lt;span&gt;&lt;font color="#00008b"&gt;XafTypesInfo&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;span&gt;&lt;font color="#800080"&gt;Instance&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;span&gt;&lt;font color="#008b8b"&gt;FindTypeInfo&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;(o.&lt;/font&gt;&lt;span&gt;&lt;font color="#008b8b"&gt;GetType&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;());&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; targetObjectKey = typeInfo.&lt;/font&gt;&lt;span&gt;&lt;font color="#800080"&gt;KeyMember&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;span&gt;&lt;font color="#008b8b"&gt;GetValue&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;(o);&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; (objectChangedWorkflow.&lt;/font&gt;&lt;span&gt;&lt;font color="#800080"&gt;ExecutionDomain&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; == &lt;/font&gt;&lt;span&gt;&lt;font color="#00008b"&gt;ExecutionDomain&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;.&lt;/font&gt;&lt;span&gt;&lt;font color="#800080"&gt;&lt;strong&gt;Server&lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;) {&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span&gt;&lt;font color="#008b8b"&gt;CreateServerRequest&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;(objectChangedEventArgs, objectChangedWorkflow, targetObjectKey, typeInfo);&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160; } &lt;/font&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;else&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; {&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span&gt;&lt;font color="#008b8b"&gt;InvokeOnClient&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;(objectChangedEventArgs, objectChangedWorkflow, targetObjectKey);&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font color="#000000"&gt;}&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/p&gt; &lt;/div&gt;  &lt;div style="font-family:consolas;background:white;color:black;font-size:10pt;"&gt;As you will have noticed we have not used the default VS naming for ObjectSpace event handlers. This is because the names that have chosen give a more specific idea of how each method works.&lt;/div&gt;  &lt;p&gt;The ObjectChanged event occurs each time a property is changed and the changes are collected in the objectChangedEventArgses array. The Committing event occurs once changes are ready to be sent to the server and workflows start for each entry. We have introduced two options for starting and executing workflows;&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Execute synchronously and locally, &lt;/li&gt;    &lt;li&gt;Send a request to the server and execute at the server asynchronously      &lt;br /&gt;&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Execute a workflow synchronously on the client&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The next stage is to create activities at the client then on ObjectSpace CommitChanges from appropriate WorkflowDefinition and execute them immediatelly&lt;/p&gt;  &lt;div style="font-family:consolas;background:white;color:black;font-size:10pt;"&gt;   &lt;div style="font-family:consolas;background:white;color:black;font-size:10pt;"&gt;     &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color:#00008b;"&gt;StartWorkflowOnObjectChangeController&lt;/span&gt; : &lt;span style="color:#00008b;"&gt;ViewController&lt;/span&gt;&amp;lt;&lt;span style="color:#00008b;"&gt;ObjectView&lt;/span&gt;&amp;gt; {&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;void&lt;/span&gt; &lt;span style="color:#008b8b;"&gt;InvokeOnClient&lt;/span&gt;(&lt;span style="color:#00008b;"&gt;ObjectChangedEventArgs&lt;/span&gt; objectChangedEventArgs, &lt;span style="color:#00008b;"&gt;ObjectChangedWorkflow&lt;/span&gt; objectChangedWorkflow, &lt;span style="color:blue;"&gt;object&lt;/span&gt; targetObjectKey) {&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#00008b;"&gt;Activity&lt;/span&gt; activity = &lt;span style="color:#00008b;"&gt;ActivityXamlServices&lt;/span&gt;.&lt;span style="color:#008b8b;"&gt;Load&lt;/span&gt;(&lt;span style="color:blue;"&gt;new&lt;/span&gt; &lt;span style="color:#00008b;"&gt;StringReader&lt;/span&gt;(objectChangedWorkflow.&lt;span style="color:purple;"&gt;Xaml&lt;/span&gt;));&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;var&lt;/span&gt; dictionary = &lt;span style="color:#00008b;"&gt;ObjectChangedStartWorkflowService&lt;/span&gt;.&lt;span style="color:#008b8b;"&gt;Dictionary&lt;/span&gt;(targetObjectKey, objectChangedEventArgs.&lt;span style="color:purple;"&gt;PropertyName&lt;/span&gt;, objectChangedEventArgs.&lt;span style="color:purple;"&gt;OldValue&lt;/span&gt;);&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#00008b;"&gt;WorkflowInvoker&lt;/span&gt;.&lt;span style="color:#008b8b;"&gt;Invoke&lt;/span&gt;(activity, dictionary);&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;   &lt;/div&gt;    &lt;br /&gt;This is a simple code which can be found in nearly any WF4 example at &lt;a href="http://www.microsoft.com/download/en/details.aspx?id=21459"&gt;http://www.microsoft.com/download/en/details.aspx?id=21459&lt;/a&gt;.     &lt;br /&gt;&lt;/div&gt;  &lt;p&gt;&lt;strong&gt;&lt;u&gt;Send a request to start workflow on the server&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The second of our two methods involves starting the workflow at the server. Now we need to notify the server of the values of those arguments as well. In the &lt;a href="http://community.devexpress.com/blogs/eaf/archive/2011/07/19/manually-starting-workflows.aspx" target="_blank"&gt;manually starting workflows&lt;/a&gt; post we learnt that XAF does this by using XpoStartWorkflowRequest. This class has a different design however, and may create issues since it is used by XAF default services. Therefore instead of deriving from XpoStartWorkflowRequest we need to design a similar custom class.&lt;/p&gt;  &lt;div style="font-family:consolas;background:white;color:black;font-size:10pt;"&gt;   &lt;div style="font-family:consolas;background:white;color:black;font-size:10pt;"&gt;     &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color:#00008b;"&gt;ObjectChangedXpoStartWorkflowRequest&lt;/span&gt; : &lt;span style="color:#00008b;"&gt;WFBaseObject&lt;/span&gt;, &lt;span style="color:#00008b;"&gt;IObjectChangedWorkflowRequest&lt;/span&gt; {&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color:#00008b;"&gt;TypeConverter&lt;/span&gt;(&lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#00008b;"&gt;StringToTypeConverter&lt;/span&gt;))]&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:#00008b;"&gt;Type&lt;/span&gt; &lt;span style="color:purple;"&gt;TargetObjectType&lt;/span&gt; {&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#008b8b;"&gt;get&lt;/span&gt; { &lt;span style="color:blue;"&gt;return&lt;/span&gt; &lt;span style="color:purple;"&gt;_targetObjectType&lt;/span&gt;; } &lt;/p&gt;      &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#008b8b;"&gt;set&lt;/span&gt; { &lt;span style="color:#008b8b;"&gt;SetPropertyValue&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;TargetObjectType&amp;quot;&lt;/span&gt;, &lt;span style="color:blue;"&gt;ref&lt;/span&gt; &lt;span style="color:purple;"&gt;_targetObjectType&lt;/span&gt;, &lt;span style="color:blue;"&gt;value&lt;/span&gt;); }&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;#160;&amp;#160;&amp;#160; #region&lt;/span&gt; IDCStartWorkflowRequest Members&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;string&lt;/span&gt; &lt;span style="color:purple;"&gt;TargetWorkflowUniqueId&lt;/span&gt; {&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#008b8b;"&gt;get&lt;/span&gt; { &lt;span style="color:blue;"&gt;return&lt;/span&gt; &lt;span style="color:#008b8b;"&gt;GetPropertyValue&lt;/span&gt;&amp;lt;&lt;span style="color:blue;"&gt;string&lt;/span&gt;&amp;gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;TargetWorkflowUniqueId&amp;quot;&lt;/span&gt;); } &lt;/p&gt;      &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#008b8b;"&gt;set&lt;/span&gt; { &lt;span style="color:#008b8b;"&gt;SetPropertyValue&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;TargetWorkflowUniqueId&amp;quot;&lt;/span&gt;, &lt;span style="color:blue;"&gt;value&lt;/span&gt;); }&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color:#00008b;"&gt;ValueConverter&lt;/span&gt;(&lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#00008b;"&gt;KeyConverter&lt;/span&gt;))]&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;object&lt;/span&gt; &lt;span style="color:purple;"&gt;TargetObjectKey&lt;/span&gt; {&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#008b8b;"&gt;get&lt;/span&gt; { &lt;span style="color:blue;"&gt;return&lt;/span&gt; &lt;span style="color:#008b8b;"&gt;GetPropertyValue&lt;/span&gt;&amp;lt;&lt;span style="color:blue;"&gt;object&lt;/span&gt;&amp;gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;TargetObjectKey&amp;quot;&lt;/span&gt;); } &lt;/p&gt;      &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#008b8b;"&gt;set&lt;/span&gt; { &lt;span style="color:#008b8b;"&gt;SetPropertyValue&lt;/span&gt;&amp;lt;&lt;span style="color:blue;"&gt;object&lt;/span&gt;&amp;gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;TargetObjectKey&amp;quot;&lt;/span&gt;, &lt;span style="color:blue;"&gt;value&lt;/span&gt;); }&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;#160;&amp;#160;&amp;#160; #endregion&lt;/span&gt;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;&amp;#160;&amp;#160;&amp;#160; #region&lt;/span&gt; IObjectChangedWorkflowRequest Members&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;string&lt;/span&gt; &lt;span style="color:purple;"&gt;PropertyName&lt;/span&gt; {&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#008b8b;"&gt;get&lt;/span&gt; { &lt;span style="color:blue;"&gt;return&lt;/span&gt; &lt;span style="color:purple;"&gt;_propertyName&lt;/span&gt;; } &lt;/p&gt;      &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#008b8b;"&gt;set&lt;/span&gt; { &lt;span style="color:#008b8b;"&gt;SetPropertyValue&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;PropertyName&amp;quot;&lt;/span&gt;, &lt;span style="color:blue;"&gt;ref&lt;/span&gt; &lt;span style="color:purple;"&gt;_propertyName&lt;/span&gt;, &lt;span style="color:blue;"&gt;value&lt;/span&gt;); }&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color:#00008b;"&gt;ValueConverter&lt;/span&gt;(&lt;span style="color:blue;"&gt;typeof&lt;/span&gt;(&lt;span style="color:#00008b;"&gt;SerializableObjectConverter&lt;/span&gt;))]&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color:#00008b;"&gt;Size&lt;/span&gt;(&lt;span style="color:#00008b;"&gt;SizeAttribute&lt;/span&gt;.&lt;span style="color:purple;font-weight:bold;"&gt;Unlimited&lt;/span&gt;)]&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;object&lt;/span&gt; &lt;span style="color:purple;"&gt;OldValue&lt;/span&gt; {&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#008b8b;"&gt;get&lt;/span&gt; { &lt;span style="color:blue;"&gt;return&lt;/span&gt; &lt;span style="color:purple;"&gt;_oldValue&lt;/span&gt;; }&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:#008b8b;"&gt;set&lt;/span&gt; { &lt;span style="color:#008b8b;"&gt;SetPropertyValue&lt;/span&gt;(&lt;span style="color:#a31515;"&gt;&amp;quot;OldValue&amp;quot;&lt;/span&gt;, &lt;span style="color:blue;"&gt;ref&lt;/span&gt; &lt;span style="color:purple;"&gt;_oldValue&lt;/span&gt;, &lt;span style="color:blue;"&gt;value&lt;/span&gt;); }&lt;/p&gt;      &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;   &lt;/div&gt; &lt;/div&gt;  &lt;p&gt;This is a very simple class, its only role is to store values in the database. Now instead of invoking workflows locally we only need to create ObjectChangedXpoStartWorkflowRequest objects. &lt;/p&gt;  &lt;div style="font-family:consolas;background:white;color:black;font-size:10pt;"&gt;   &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color:#00008b;"&gt;StartWorkflowOnObjectChangeController&lt;/span&gt; : &lt;span style="color:#00008b;"&gt;ViewController&lt;/span&gt;&amp;lt;&lt;span style="color:#00008b;"&gt;ObjectView&lt;/span&gt;&amp;gt; {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;void&lt;/span&gt; &lt;span style="color:#008b8b;"&gt;CreateServerRequest&lt;/span&gt;(&lt;span style="color:#00008b;"&gt;ObjectChangedEventArgs&lt;/span&gt; objectChangedEventArgs, &lt;span style="color:#00008b;"&gt;ObjectChangedWorkflow&lt;/span&gt; objectChangedWorkflow, &lt;span style="color:blue;"&gt;object&lt;/span&gt; targetObjectKey, &lt;span style="color:#00008b;"&gt;ITypeInfo&lt;/span&gt; typeInfo) {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;var&lt;/span&gt; request = &lt;span style="color:purple;"&gt;ObjectSpace&lt;/span&gt;.&lt;span style="color:#008b8b;"&gt;CreateObject&lt;/span&gt;&amp;lt;&lt;span style="color:#00008b;"&gt;ObjectChangedXpoStartWorkflowRequest&lt;/span&gt;&amp;gt;();&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; request.&lt;span style="color:purple;"&gt;TargetWorkflowUniqueId&lt;/span&gt; = objectChangedWorkflow.&lt;span style="color:#008b8b;"&gt;GetUniqueId&lt;/span&gt;();&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; request.&lt;span style="color:purple;"&gt;TargetObjectType&lt;/span&gt; = typeInfo.&lt;span style="color:purple;"&gt;Type&lt;/span&gt;;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; request.&lt;span style="color:purple;"&gt;TargetObjectKey&lt;/span&gt; = targetObjectKey;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; request.&lt;span style="color:purple;"&gt;PropertyName&lt;/span&gt; = objectChangedEventArgs.&lt;span style="color:purple;"&gt;PropertyName&lt;/span&gt;;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; request.&lt;span style="color:purple;"&gt;OldValue&lt;/span&gt; = &lt;span style="color:#008b8b;"&gt;GetOldValue&lt;/span&gt;(objectChangedEventArgs);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;In the next step we are going to create a service to consume these values from the server and start a workflow,&lt;/p&gt;  &lt;div style="font-family:consolas;background:white;color:black;font-size:10pt;"&gt;   &lt;p style="margin:0px;"&gt;&lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;class&lt;/span&gt; &lt;span style="color:#00008b;"&gt;StartWorkflowOnObjectChangeService&lt;/span&gt; : &lt;span style="color:#00008b;"&gt;BaseTimerService&lt;/span&gt; {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;public&lt;/span&gt; &lt;span style="color:blue;"&gt;override&lt;/span&gt; &lt;span style="color:blue;"&gt;void&lt;/span&gt; &lt;span style="color:#008b8b;"&gt;OnTimer&lt;/span&gt;() {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;using&lt;/span&gt; (&lt;span style="color:blue;"&gt;var&lt;/span&gt; objectSpace = &lt;span style="color:purple;"&gt;ObjectSpaceProvider&lt;/span&gt;.&lt;span style="color:#008b8b;"&gt;CreateObjectSpace&lt;/span&gt;()) {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:green;"&gt;//get all requests from the database&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;foreach&lt;/span&gt; (&lt;span style="color:blue;"&gt;var&lt;/span&gt; &lt;span style="font-weight:bold;"&gt;request&lt;/span&gt; &lt;span style="color:blue;"&gt;in&lt;/span&gt; objectSpace.&lt;span style="color:#008b8b;"&gt;GetObjects&lt;/span&gt;&amp;lt;&lt;span style="color:#00008b;"&gt;ObjectChangedXpoStartWorkflowRequest&lt;/span&gt;&amp;gt;()) {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:green;"&gt;//find workflow&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;var&lt;/span&gt; definition = &lt;span style="color:#008b8b;"&gt;GetService&lt;/span&gt;&amp;lt;&lt;span style="color:#00008b;"&gt;IWorkflowDefinitionProvider&lt;/span&gt;&amp;gt;().&lt;span style="color:#008b8b;"&gt;FindDefinition&lt;/span&gt;(&lt;span style="font-weight:bold;"&gt;request&lt;/span&gt;.&lt;span style="color:purple;"&gt;TargetWorkflowUniqueId&lt;/span&gt;);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (definition != &lt;span style="color:blue;"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; definition.&lt;span style="color:purple;"&gt;CanOpenHost&lt;/span&gt;) {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:green;"&gt;//Start the workflow passing in PropertyName &amp;amp;&amp;amp; OldValue&lt;/span&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color:blue;"&gt;if&lt;/span&gt; (&lt;span style="color:#008b8b;"&gt;GetService&lt;/span&gt;&amp;lt;&lt;span style="color:#00008b;"&gt;ObjectChangedStartWorkflowService&lt;/span&gt;&amp;gt;().&lt;span style="color:#008b8b;"&gt;StartWorkflow&lt;/span&gt;(definition.&lt;span style="color:purple;"&gt;Name&lt;/span&gt;, &lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="font-weight:bold;"&gt;request&lt;/span&gt;.&lt;span style="color:purple;"&gt;TargetWorkflowUniqueId&lt;/span&gt;, &lt;span style="font-weight:bold;"&gt;request&lt;/span&gt;.&lt;span style="color:purple;"&gt;TargetObjectKey&lt;/span&gt;, &lt;span style="font-weight:bold;"&gt;request&lt;/span&gt;.&lt;span style="color:purple;"&gt;PropertyName&lt;/span&gt;, &lt;span style="font-weight:bold;"&gt;request&lt;/span&gt;.&lt;span style="color:purple;"&gt;OldValue&lt;/span&gt;)) {&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; objectSpace.&lt;span style="color:#008b8b;"&gt;Delete&lt;/span&gt;(&lt;span style="font-weight:bold;"&gt;request&lt;/span&gt;);&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; objectSpace.&lt;span style="color:#008b8b;"&gt;CommitChanges&lt;/span&gt;();&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;At this point our server has all the information it needs to start workflows with arguments taken from persistent &lt;a href="https://github.com/expand/eXpand/blob/master/Xpand/Xpand.ExpressApp.Modules/Workflow/ObjectChangedWorkflows/ObjectChangedXpoStartWorkflowRequest.cs" target="_blank"&gt;ObjectChangeXpoStartWorkFlowRequest&lt;/a&gt; objects. &lt;/p&gt;  &lt;p&gt;I must admit that I have fully enjoyed preparing this post. The decoupled development experienced offered by the WF service oriented model is something that really appeals to me. At the same time XAF’s workflow module implementation made modeling the requirements a simple and enjoyable process. As usual it was possible to work directly on the problem and leave the hard work to non XAF developers. &lt;/p&gt;  &lt;p&gt;We are happy to read your feedback about this!. Remember that your questions are the best candidates for future posts &lt;/p&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=357433" width="1" height="1"&gt;</description><category domain="http://community.devexpress.com/blogs/eaf/archive/tags/WF/default.aspx">WF</category><category domain="http://community.devexpress.com/blogs/eaf/archive/tags/eXpandFrameWork/default.aspx">eXpandFrameWork</category></item><item><title>DXv2: Standby for Silverlight 5</title><link>http://community.devexpress.com/blogs/ctodx/archive/2011/11/29/dxv2-standby-for-silverlight-5.aspx</link><pubDate>Tue, 29 Nov 2011 13:45:00 GMT</pubDate><guid isPermaLink="false">bd716303-653c-428d-8b8a-a7d998cde032:359537</guid><dc:creator>Julian Bucknall (DevExpress)</dc:creator><slash:comments>43</slash:comments><description>&lt;p&gt;We have been working on a pretty amazing release for all of our customers and by now you have seen the depth and breadth of the DXv2 launch. One area that we are particularly proud of is our continuing work to support Silverlight. &lt;/p&gt;  &lt;p&gt;As is usual in these situations, there is some good news and some bad news. The good news is that we have been working in close cooperation with Microsoft to fully support Silverlight 5 with this major release and what we&amp;#39;ve done is pretty amazing. The bad news is that Microsoft is still putting the final touches on Silverlight 5 and it hasn&amp;#39;t been released yet (although it is close, we understand). &lt;/p&gt;  &lt;p&gt;I&amp;#39;ll ask you on behalf of Microsoft to standby for the final release of Silverlight 5. Once it comes out, we&amp;#39;ll run our final tests on the released version and publish DXperience Silverlight as quickly as we can. In the meantime, I invite you to enjoy the rest of DXv2 including brand new features for ASP.NET, WinForms, and WPF, as well as CodeRush and our XAF application framework.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;UPDATE&lt;/strong&gt;: &lt;em&gt;&lt;a href="http://www.zdnet.com/blog/microsoft/microsoft-no-silverlight-5-release-in-november/11299"&gt;Microsoft: No Silverlight 5 release in November&lt;/a&gt;&lt;/em&gt; from ZDNet’s Mary Jo Foley (30-Nov-2011).&lt;/p&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=359537" width="1" height="1"&gt;</description><category domain="http://community.devexpress.com/blogs/ctodx/archive/tags/v2011.2/default.aspx">v2011.2</category><category domain="http://community.devexpress.com/blogs/ctodx/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://community.devexpress.com/blogs/ctodx/archive/tags/.NET/default.aspx">.NET</category><category domain="http://community.devexpress.com/blogs/ctodx/archive/tags/DXv2/default.aspx">DXv2</category></item><item><title>Duplicate Detection and Consolidation in CodeRush for Visual Studio</title><link>http://community.devexpress.com/blogs/markmiller/archive/2011/11/29/duplicate-detection-and-consolidation-in-coderush-for-visual-studio.aspx</link><pubDate>Tue, 29 Nov 2011 09:45:00 GMT</pubDate><guid isPermaLink="false">bd716303-653c-428d-8b8a-a7d998cde032:359570</guid><dc:creator>Mark Miller (DevExpress)</dc:creator><slash:comments>5</slash:comments><description>&lt;p&gt;CodeRush 11.2 introduces a new feature we’re very excited about. It’s called Duplicate Detection and Consolidation (DDC) and it’s revolutionary.&lt;/p&gt;  &lt;h2&gt;Background&lt;/h2&gt;  &lt;p&gt;Duplicate code, sometimes referred to as clones, is a cluster of code blocks that are functionally equivalent (or nearly equivalent) spanning across two or more locations within a solution. Duplicate code is expensive to maintain because:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Multiplied bugs. A bug in one clone means there’s a bug in all the copies. This can lead to a continued, repeated release of previously-fixed bugs as each copy of the bug is individually discovered by a customer and then fixed by the team. &lt;/li&gt;    &lt;li&gt;Flexibility barriers. If the copied code needs to be more flexible, changes need to be made across all the copies or ideally, the copies need to be consolidated first. Unfortunately consolidation is a high-risk, error-prone, time-consuming activity. &lt;/li&gt;    &lt;li&gt;Increased ramp-up time. Copy the code and new developers trying to get up to speed will have twice as much code to read and understand. If discovered, duplicated code tends to be harder to understand than normal code because the reader must not only understand functionality, but also understand the reason behind the duplication. &lt;/li&gt; &lt;/ol&gt;  &lt;h2&gt;Reaching into the Future&lt;/h2&gt;  &lt;p&gt;Because duplicate code is such an expensive problem, for years tools have been developed to detect duplicate code, each achieving various degrees of success. So you might wonder, after so many years of development, what makes CodeRush’s DDC so revolutionary?&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;strong&gt;Speed&lt;/strong&gt;. CodeRush has the fastest duplicate code detection available for .NET. It’s &lt;strong&gt;17 times faster &lt;/strong&gt;than the duplicate code detection currently available in the Visual Studio 11 preview. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Integration&lt;/strong&gt;. DD runs in a background thread while you work in Visual Studio. Duplicate code is highlighted on screen so you know exactly what you’re working with before you change the code. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Functional Equivalence&lt;/strong&gt;. The CodeRush duplication detection engine is built to understand functionally equivalent code. In 11.2, we take baby steps in this direction. However, by 12.1 we expect to really be blowing minds in this area, matching structurally distinct yet functionally equivalent blocks of code. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Consolidation&lt;/strong&gt;. CodeRush is the first and only tool on this planet to offer the ability to immediately consolidate duplication into a single block of code, directly from the IDE. Not only is CodeRush first, but Team CodeRush has delivered an impressive solution. &lt;/li&gt; &lt;/ol&gt;  &lt;h2&gt;The Complexity of Consolidation&lt;/h2&gt;  &lt;h2&gt;&lt;/h2&gt;  &lt;p&gt;To give you an idea of just how impressive duplicate consolidation is, let’s take a look at what needs to happen to consolidate:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;You need to understand not only the similarities, but also the differences among the code blocks. Differences can be parameterized.&lt;/li&gt;    &lt;li&gt;If the duplicate blocks of code are functionally equivalent but structurally distinct, then a decision needs to be made - upon which of the duplicate blocks should we base the consolidation?&lt;/li&gt;    &lt;li&gt;You need to offer a variety of consolidation solutions so the developer can pick the one that fits best. For example, you could consolidate to a new method in a class, create a new ancestor class, or create a new helper class.&lt;/li&gt;    &lt;li&gt;You need to understand and respect project boundaries. In many cases duplication between projects survives beyond initial discovery because consolidating is time consuming and may require the creation of a new project.&amp;nbsp; If a new project is created, the appropriate references need to be added. Regardless of whether we’re creating a new project or moving code from one existing project to another, we need to verify that we can do this without creating any circular references.&lt;/li&gt;    &lt;li&gt;Types need to be correctly resolved. You might have two classes with the same name declared in different namespaces in your solution. The consolidated code must have the correct namespace imports to ensure that all the types are correctly resolved.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;As a result, the steps to consolidate by hand are many, complex, error-prone, and high-risk. Only the best developers are brave enough to venture forth in this domain, and if they do, they are best advised to bring a paired programmer along for the ride.&lt;/p&gt;  &lt;h2&gt;Enter CodeRush 11.2&lt;/h2&gt;  &lt;p&gt;This changes everything. From this day forward, the quality of code is going up. Let’s take a simple example. I have a class named Mortal, which looks like this:&lt;/p&gt; &lt;span style="font-family:Consolas;"&gt;   &lt;/span&gt;&lt;blockquote&gt;          &lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; &lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;class&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; &lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;Mortal         &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;{       &lt;br /&gt;&amp;nbsp; &lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;protected&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; &lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;List&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;Mortal&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;&amp;gt; friends = &lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;new&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; &lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;List&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;Mortal&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;&amp;gt;();         &lt;br /&gt;&lt;/span&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; &lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;string&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; Name { &lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;get&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;; &lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;set&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;; }       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;}&lt;/span&gt;   &lt;p&gt;And a descendant named Human, which has a FindHuman method:&lt;/p&gt; &lt;span style="font-family:Consolas;"&gt;   &lt;/span&gt;&lt;blockquote&gt;          &lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; &lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;class&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; &lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;Human&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; : &lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;Mortal         &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;{       &lt;br /&gt;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; &lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;Mortal&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; FindHuman(&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;string&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; name)       &lt;br /&gt;&amp;nbsp; {        &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;Mortal&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; mortal = &lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;null&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;;       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; (&lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;Mortal&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; friend &lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;in&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; friends)       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {        &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;if&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; (&lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;String&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;.Compare(friend.Name, name, &lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;false&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;) == 0)       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {        &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;Console&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;.WriteLine(&lt;/span&gt;&lt;span style="font-family:Consolas;color:#800000;"&gt;&lt;span style="font-family:Consolas;color:#800000;"&gt;&amp;quot;Found a Human: &amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; + friend.Name);       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mortal = friend;        &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;break&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;;       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }        &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }        &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;return&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; mortal;       &lt;br /&gt;&amp;nbsp; }        &lt;br /&gt;}&lt;/span&gt;   &lt;p&gt;So far so good. But now, let’s do something incredibly dangerous. We’re going to make a copy of this Human class and perform a search and replace, “Human” for “Martian”…&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; &lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;class&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;Martian&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; : &lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;Mortal         &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;{       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&amp;nbsp; public&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; &lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;Mortal&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; FindMartian(&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;string&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; name)       &lt;br /&gt;&amp;nbsp; {        &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Mortal&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; mortal = &lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;null&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;;       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; foreach&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; (&lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;Mortal&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; friend &lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;in&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; friends)       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {        &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; (&lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;String&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;.Compare(friend.Name, name, &lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;false&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;) == 0)       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {        &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;.WriteLine(&lt;/span&gt;&lt;span style="font-family:Consolas;color:#800000;"&gt;&lt;span style="font-family:Consolas;color:#800000;"&gt;&amp;quot;Found a Martian: &amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; + friend.Name);       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; mortal = friend;        &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;;       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }        &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }        &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; mortal;       &lt;br /&gt;&amp;nbsp; }        &lt;br /&gt;}&lt;/span&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;But let’s continue to change the code. Let’s introduce a few local variables, rename “mortal” to “myFavoriteMartian”, remove the unnecessary curly braces around the if-block, and change case-sensitivity of the String.Compare call so it ignores case (as one might expect with Martian names)…&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;public&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; &lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;class&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; &lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;Martian&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; : &lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;Mortal         &lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;{       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&amp;nbsp; public&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; &lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;Mortal&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; FindMartian(&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;string&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; name)       &lt;br /&gt;&amp;nbsp; {        &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Mortal&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; myFavoriteMartian = &lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;null&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;;       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;bool&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; ignoreCase = &lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;true&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;;         &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;string&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; msg = &lt;/span&gt;&lt;span style="font-family:Consolas;color:#800000;"&gt;&lt;span style="font-family:Consolas;color:#800000;"&gt;&amp;quot;Found a Martian: &amp;quot;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;;         &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;foreach&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; (&lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;Mortal&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; friend &lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;in&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; friends)       &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; (&lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;String&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;.Compare(friend.Name, name, &lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;&lt;span style="font-family:Consolas;"&gt;ignoreCase&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;) == 0)       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {        &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&lt;span style="font-family:Consolas;color:#2b91af;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Console&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;.WriteLine(&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;&lt;span style="font-family:Consolas;"&gt;msg &lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;+ friend.Name);       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; myFavoriteMartian = friend;        &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; break&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt;;       &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }        &lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&lt;span style="font-family:Consolas;color:#0000ff;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Consolas;"&gt; myFavoriteMartian;       &lt;br /&gt;&amp;nbsp; }        &lt;br /&gt;}&lt;/span&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;And now we have some code that is functionally equivalent, but structurally distinct. Can CodeRush find this? It can, providing we drop the Analysis Level down to 2, so the detection engine can see this smaller code block (the default level is set to 3, which is a slightly larger block):&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/markmiller/BlockSettings_67B43BB5.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="BlockSettings" border="0" alt="BlockSettings" src="http://community.devexpress.com/blogs/markmiller/BlockSettings_thumb_517E2063.png" width="680" height="481" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt; Here’s what the code looks like inside Visual Studio:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/markmiller/HumansAndMartians_44A3CA45.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="HumansAndMartians" border="0" alt="HumansAndMartians" src="http://community.devexpress.com/blogs/markmiller/HumansAndMartians_thumb_1C911B26.png" width="680" height="280" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;On the left of the gutter in each view, you see a thin purple vertical bar. This means duplicate code exists elsewhere. Also, in the bottom right, the “!!” icon signals CodeRush has detected duplicates inside the solution. If you hover over the icon in the bottom&amp;nbsp;right, a hint appears to explain the status.&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="DuplicatesFound" border="0" alt="DuplicatesFound" src="http://community.devexpress.com/blogs/markmiller/DuplicatesFound_5CA8228E.png" width="386" height="157" /&gt;&lt;/p&gt;  &lt;p&gt;You can click the icon to see a summary of all duplicate clusters found inside the new Duplicate Code tool window. In this case, our simple example, only one cluster is found:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/markmiller/DuplicateCodeWindow_6D5F2F8E.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="DuplicateCodeWindow" border="0" alt="DuplicateCodeWindow" src="http://community.devexpress.com/blogs/markmiller/DuplicateCodeWindow_thumb_1354DFE5.png" width="684" height="203" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;On the left is a list of all clusters found, sorted by redundancy (the total amount of redundant code that could be removed if consolidated). Note that because we are sorting by redundancy, it’s possible for a very small block of code (duplicated many times) to appear &lt;em&gt;above &lt;/em&gt;a very large duplicate block of code (that only appears twice).&lt;/p&gt;  &lt;p&gt;On the right is a preview of the duplicate code. You can double-click any duplicate code preview to be taken directly to that location. When you do this, CodeRush immediately presents the consolidation hint, which looks like this:&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="ConsolidationHint" border="0" alt="ConsolidationHint" src="http://community.devexpress.com/blogs/markmiller/ConsolidationHint_53D81A42.png" width="602" height="429" /&gt;&lt;/p&gt;  &lt;p&gt;Notice the mouse is positioned right over the “Next duplicate block” button, in case you want to navigate and compare the blocks. This might be useful when it’s time to consolidate. The block you consolidate from determines the structure of the consolidated block. So let’s consolidate from the FindMartian method. Click the “Next duplicate block” button, then move the mouse over the “to the base class” consolidation option. You’ll see a preview hint that looks like this:&lt;/p&gt;        &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/markmiller/ConsolidationHint2_12104706.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="ConsolidationHint2" border="0" alt="ConsolidationHint2" src="http://community.devexpress.com/blogs/markmiller/ConsolidationHint2_thumb_231474E9.png" width="680" height="291" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Notice the parameters to FindMartianExtracted – CodeRush takes the code that differs between the blocks and turns them into parameters. Press &lt;strong&gt;Enter&lt;/strong&gt; to apply the consolidation. The target picker will appear letting you select the location of the consolidated method.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/markmiller/TargetPicker_68B8FF07.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="TargetPicker" border="0" alt="TargetPicker" src="http://community.devexpress.com/blogs/markmiller/TargetPicker_thumb_67746628.png" width="680" height="198" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The target picker shows the block of code that will be inserted. It’s based upon the structure of the method where we initiated the consolidation (FindMartian). Let’s press &lt;strong&gt;Escape &lt;/strong&gt;to cancel and back out of this, and then see what happens when we initiate consolidation from the other duplicate…&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/markmiller/ConsolidateFromHuman_3F61B709.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="ConsolidateFromHuman" border="0" alt="ConsolidateFromHuman" src="http://community.devexpress.com/blogs/markmiller/ConsolidateFromHuman_thumb_6557675F.png" width="680" height="283" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now consolidate to the base class Mortal. We’ll see the target picker. Notice how the FindHumanExtracted consolidated code in the preview below differs from the&amp;nbsp;FindMartianExtracted&amp;nbsp;consolidated code in the preview shown two screen shots above.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/markmiller/TargetPicker2_4B16FE3B.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="TargetPicker2" border="0" alt="TargetPicker2" src="http://community.devexpress.com/blogs/markmiller/TargetPicker2_thumb_782BEB09.png" width="680" height="201" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;nbsp;Just use the &lt;strong&gt;up&lt;/strong&gt;/&lt;strong&gt;down &lt;/strong&gt;arrow buttons to select a location and press &lt;strong&gt;Enter &lt;/strong&gt;to accept it. Now we’re left with a small task of coming up with good names for the consolidated method and its parameters.&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="RenamingParameters" border="0" alt="RenamingParameters" src="http://community.devexpress.com/blogs/markmiller/RenamingParameters_7CB3097E.png" width="627" height="405" /&gt;&lt;/p&gt;  &lt;p&gt;And the calling code is simplified:&lt;/p&gt;  &lt;p&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="CallingCodeSimplified" border="0" alt="CallingCodeSimplified" src="http://community.devexpress.com/blogs/markmiller/CallingCodeSimplified_77FE9B1F.png" width="535" height="652" /&gt;&lt;/p&gt;          &lt;p&gt;And that’s it (for a simple consolidation example)! &lt;/p&gt;  &lt;h2&gt;An Even Bigger Example&lt;/h2&gt;  &lt;p&gt;But what happens when the project is much bigger? The good news is, that the detection scales well for large solutions, taking only seconds (at most a few minutes) to scan thousands of files for duplicates at the default settings (Analysis Level set to 3). Let’s take a look at DDC with the source to &lt;a href="http://umbraco.com/" target="_blank"&gt;Umbraco&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Here’s cluster #4 selected. The Lowest and Highest methods inside the ExsltMath class:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/markmiller/Cluster4Umbraco_703448A7.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="Cluster4Umbraco" border="0" alt="Cluster4Umbraco" src="http://community.devexpress.com/blogs/markmiller/Cluster4Umbraco_thumb_75A2B94B.png" width="680" height="422" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Nearly identical blocks of code. However note the real difference is in the operator used to compare &lt;strong&gt;t &lt;/strong&gt;against &lt;strong&gt;min &lt;/strong&gt;(and &lt;strong&gt;max&lt;/strong&gt;). On the left you have “t &amp;lt; min”, and on the right you have “t &amp;gt; max”. Can CodeRush consolidate this duplicate? It can. Here’s the preview hint:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/markmiller/PreviewHintUmbraco_33BBD3FD.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="PreviewHintUmbraco" border="0" alt="PreviewHintUmbraco" src="http://community.devexpress.com/blogs/markmiller/PreviewHintUmbraco_thumb_6B8E1820.png" width="684" height="256" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;And after consolidation (and renaming the method, the “min” local, and the “func” parameter), I get this:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/markmiller/AfterConsolidation_49C23F8F.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="AfterConsolidation" border="0" alt="AfterConsolidation" src="http://community.devexpress.com/blogs/markmiller/AfterConsolidation_thumb_6898B36D.png" width="684" height="648" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;And now the quality of the code is much higher than it was before.&lt;/p&gt;  &lt;p&gt;Remember, CodeRush has the &lt;strong&gt;fastest duplicate code detection available for .NET.&lt;/strong&gt; It works in the background and shows when you’re working inside a method that is cloned. Consolidation is based on the structure of the method you start from. While CodeRush can consolidate many kinds of duplicate blocks, not all duplicate blocks can be consolidated automatically (trust me, this is an incredibly challenging problem to solve). But we’re working on making the consolidation engine even smarter and even more extensive as we approach the 12.1 release (and we expect to blow your mind again with that one).&lt;/p&gt;  &lt;p&gt;Do me a favor, kids: Tell every developer you know about CodeRush’s Duplicate Detection and Consolidation. DDC is truly revolutionary; help us spread the word.&lt;/p&gt;&lt;/blockquote&gt;&lt;/blockquote&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=359570" width="1" height="1"&gt;</description></item><item><title>Introducing DXv2 from DevExpress</title><link>http://community.devexpress.com/blogs/thinking/archive/2011/11/28/introducing-dxv2-from-devexpress.aspx</link><pubDate>Tue, 29 Nov 2011 05:58:00 GMT</pubDate><guid isPermaLink="false">bd716303-653c-428d-8b8a-a7d998cde032:359548</guid><dc:creator>Ray Navasarkian (DevExpress)</dc:creator><slash:comments>15</slash:comments><description>&lt;p&gt;Today&amp;nbsp;we released DXv2 to the world and delivered the next generation of development tools from DevExpress. This marks a renewed commitment by DevExpress to help you bridge the gap from the technologies you are using today to the opportunities presented by the technologies of the future. The entire DevExpress team could not be more excited to bring these tools to you.&lt;/p&gt;
&lt;p&gt;&lt;a title="New .NET products by DevExpress - Video" href="http://www.youtube.com/user/DeveloperExpress?feature=mhee" target="_blank"&gt;&lt;img id="dx_temp_1322745988784_959" alt="" src="http://devexpress.com/i/home/dxv2.png" /&gt;&lt;/a&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Below I will outline some of the big investment areas for DXv2, but wanted to take a moment to remind you of some things that will never change:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;DevExpress remains committed to unparalled customer service and support. We are here to help you today, tomorrow and always. &lt;/li&gt;
&lt;li&gt;DevExpress remains committed to releasing high quality products, when they’re ready. We don’t rush to deliver but instead work to release the technology when it’s perfect and not until.&lt;/li&gt;
&lt;li&gt;DevExpress remains committed to supporting a breadth of platforms. There is noise in the market today about the new technologies, and we’re excited about them too, but we also realize that many of you have made big investments in existing applications and technologies and you will continue to remain invested in them. We will be there as long as you are. &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;What’s New in DXv2&lt;/strong&gt;&lt;br /&gt;We identified three major shifts happening in the marketplace and focused our development efforts around them. &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Touch.&lt;/strong&gt;&amp;nbsp; One key piece of feedback that we’ve heard from you is the critical need to support touch interfaces. We’ve seen a consistent shift in the way that end users experience technology. From touch-based Automatic Teller Machines (ATMs) to touch-based airport-kiosks for checking into a flight, consumers are growing increasingly accustomed to touch. Microsoft’s focus on touch is significant with Windows 8 and its new Metro user interface. So in this release, we’ve enabled touch support across our platforms and enabled WinForms, WPF and Silverlight developers to build Metro-inspired applications with ease. At the same time, we recognize that many developers have to start considerinis isg iPads that are showing up in the workplace. So with our touch support in ASP.NET platform, we can help Visual Studio developers build solutions for iOS as well.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Stunning Applications&lt;/strong&gt;. As end users enjoy rich, immersive applications at home, their expectation for the kinds of experiences they have at work has changed. It’s no longer good enough to build functional applications. And so we’ve focused on enabling the “wow” factor for your applications. Stunning applications require completeness and consistency of a platform. A beautiful grid control, for example, that is surrounded by other controls simply won’t be perceived as a stunning application. So we focused on ensuring that each platform (Silverlight, ASP.NET, Windows Forms, and WPF) had a complete and consistent set of controls. &amp;nbsp;That is necessary but not sufficient. Applications rarely live in isolation. A Windows Form application needs to work in an integrated way with an ASP.NET or WPF application. These applications need to look consistent on the platforms they target and so we&amp;#39;ve worked hard to ensure that our controls are themed and styled appropriately. Additionally, we&amp;#39;ve scheduled webinars throughout December to unveil new design options so you can re-imagine your next application using the themes we&amp;#39;re building today. &lt;/p&gt;
&lt;p&gt;And with the new map controls shipping in WPF and Silverlight, you can now add a very rich location-based experience to your applications. As part of our relationship with Microsoft, we’ve decided to provide our WPF map control free-of-charge&amp;nbsp;to all&amp;nbsp;MSDN subscribers. So head on over to MSDN and “unwrap your map” for the holidays.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Your Productivity. Accelerated&lt;/strong&gt;. This isn’t new but the productivity bar just keeps getting higher. Every day, we wake up trying to come up with ways to make you more successful in writing applications. It is our passion. First, we challenged ourselves to provide quicker ways to get to the point in the development lifecycle where you could focus on writing code. Visual Studio is incredible but it starts you off with a blank form. Getting the user interface pulled together can be a daunting first step. So we came up with the “Miracle Minute.” In about a minute, we believe you should be able to have your user interface wired up so that you can start getting down to the business of writing your code. You’ll see our Miracle Minute videos on our new website and we’ll be adding more videos in the future. &lt;br /&gt;Our existing XAF customers know that it provides the critical building blocks that reduce the amount of “grunt” work required to get an app running. Why should you have to spend time worrying about security, workflow, reporting and other core functionality that is important but probably not differentiated in your application? And with this release XAF provides big performance improvements for AJAX apps and provides better support for n-tier application development. &lt;br /&gt;Finally, we’re very excited about the work we have done with CodeRush. We’re introducing a technology in this release that is new in the industry: duplicate code detection and consolidation. Most applications are made up of lots of reused functionality that has been copied and pasted all over your source code. The problem here is that now you have the same logic that exists throughout. If there is a bug, it’s in lots of places. If there is a code change required, you need to do it in lots of places. And of course your code is now much bigger than it needs to be. And new developers trying to get up to speed on your code base have more code to read and understand. Duplicate code detection solves this problem by analyzing your source code in the background and then enabling you to &lt;a href="http://community.devexpress.com/blogs/markmiller/archive/2011/11/29/duplicate-detection-and-consolidation-in-coderush-for-visual-studio.aspx"&gt;consolidate&lt;/a&gt;&amp;nbsp;that code to a central location, increasing the quality of your code base. It’s pretty amazing.&lt;/p&gt;
&lt;p&gt;Of course, this is just the tip of the iceberg. There is so much to this release. I encourage you to see what’s new and then go and try it for yourself. I can’t wait to see what you do with &lt;a href="http://www.devexpress.com/Subscriptions/DXperience/DXv2/announce.xml" target="_blank"&gt;DXv2&lt;/a&gt;. &lt;/p&gt;
&lt;p&gt;Let’s see what develops.&lt;/p&gt;
&lt;p&gt;Ray&amp;nbsp;Navasarkian&lt;/p&gt;
&lt;p&gt;President&lt;br /&gt;DevExpress&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=359548" width="1" height="1"&gt;</description><category domain="http://community.devexpress.com/blogs/thinking/archive/tags/ASP.NET/default.aspx">ASP.NET</category><category domain="http://community.devexpress.com/blogs/thinking/archive/tags/WPF/default.aspx">WPF</category><category domain="http://community.devexpress.com/blogs/thinking/archive/tags/v2011.2/default.aspx">v2011.2</category><category domain="http://community.devexpress.com/blogs/thinking/archive/tags/Touch/default.aspx">Touch</category><category domain="http://community.devexpress.com/blogs/thinking/archive/tags/Silverlight/default.aspx">Silverlight</category><category domain="http://community.devexpress.com/blogs/thinking/archive/tags/WinForms/default.aspx">WinForms</category><category domain="http://community.devexpress.com/blogs/thinking/archive/tags/DXv2/default.aspx">DXv2</category><category domain="http://community.devexpress.com/blogs/thinking/archive/tags/Whats+New/default.aspx">Whats New</category></item><item><title>VCL Subscription v2011 vol 2 beta now available–includes 64-bit Delphi support</title><link>http://community.devexpress.com/blogs/ctodx/archive/2011/11/26/vcl-subscription-v2011-vol-2-beta-now-available-includes-64-bit-delphi-support.aspx</link><pubDate>Sat, 26 Nov 2011 17:24:53 GMT</pubDate><guid isPermaLink="false">bd716303-653c-428d-8b8a-a7d998cde032:359423</guid><dc:creator>Julian Bucknall (DevExpress)</dc:creator><slash:comments>20</slash:comments><description>&lt;p&gt;Just a quick word to let everyone know that the first beta for the VCL Subscription v2011 vol 2 is now available to those customers who have the full VCL subscription. The email notifying customers of the beta has just gone out.&lt;/p&gt;  &lt;p&gt;You can take a look at What’s New &lt;a href="http://www.devexpress.com/Subscriptions/VCL/WhatsNewBuild11.2.1/"&gt;here&lt;/a&gt; and at the short list of breaking changes &lt;a href="http://www.devexpress.com/Support/WhatsNew/VCL/files/11.2.1.bc.xml"&gt;here&lt;/a&gt;. Depending on the feedback from customers we should be publishing the final release in two to three weeks.&lt;/p&gt;  &lt;p&gt;Possibly the feature that has the potential for most undiscovered issues is 64-bit support (yes, I am old enough to have ported a couple of products from 16-bit Delphi 1 to 32-bit Delphi 2 back in the days when we had to walk uphill both ways in the snow to work), so we’d be eager to hear feedback from customers who are going to be targeting 64-bit Delphi XE2 applications. &lt;/p&gt;  &lt;p&gt;The beta does not support C++Builder XE2. We have been notified that the compiler/linker issues that were holding us back will be fixed in RAD Studio XE2 Update 3 (to be released any day now, if not already). Once we have the update, we’ll be continuing to compile/link/test our VCL subscription code with C++Builder XE2. &lt;/p&gt;  &lt;p&gt;Have fun!&lt;/p&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=359423" width="1" height="1"&gt;</description><category domain="http://community.devexpress.com/blogs/ctodx/archive/tags/v2011.2/default.aspx">v2011.2</category><category domain="http://community.devexpress.com/blogs/ctodx/archive/tags/C_2B002B00_Builder/default.aspx">C++Builder</category><category domain="http://community.devexpress.com/blogs/ctodx/archive/tags/VCL/default.aspx">VCL</category><category domain="http://community.devexpress.com/blogs/ctodx/archive/tags/Delphi/default.aspx">Delphi</category></item></channel></rss>
