<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:gd="http://schemas.google.com/g/2005" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DkMBQXg5cCp7ImA9WhRXEE0.&quot;"><id>tag:blogger.com,1999:blog-8656429443005102101</id><updated>2011-12-15T19:00:50.628-08:00</updated><category term="GIS" /><category term="geodatabase" /><category term="Walkthrough" /><category term="Twitter" /><category term="MoonDust" /><category term="ArcGIS API for WPF" /><category term="Silverlight 5" /><category term="ArcGIS Explorer" /><category term="Balder" /><category term="Cross Country Mobility" /><category term="Sort" /><category term="AddIn" /><category term="ArcGIS Diagrammer" /><category term="WPF Toolkit" /><category term="ASP.NET" /><category term="ESRI" /><category term="Augmented Reality" /><category term="Windows Phone" /><category term="GeoTagger" /><category term="Dynamic Charting" /><category term="Custom Effect" /><category term="Anonymous Method" /><category term="Safari" /><category term="Mac" /><category term="Presentation" /><category term="ArcGIS Desktop" /><category term="ArcScene" /><category term="OpenGL" /><category term="Geodesign" /><category term="Windows 7" /><category term="Applications Prototype Lab" /><category term="Internet Search" /><category term="Blend" /><category term="Mobile" /><category term="Metacarta" /><category term="Client Access Policy" /><category term="R.U.S.E" /><category term="ESRI User Conference" /><category term="Projection Engine" /><category term="PDF" /><category term="Kinect" /><category term="ArcMap" /><category term="Pixel Shader" /><category term="Chrystal Ball" /><category term="Google Custom Search API" /><category term="Xbox" /><category term="Mouse Drag" /><category term="IComparable" /><category term="Behavior" /><category term="Theme" /><category term="invariant culture" /><category term="Microsoft Surface" /><category term="Interactivity" /><category term="Google" /><category term="RichTextBox" /><category term="MIX10" /><category term="Mosaic" /><category term="Cross Domain File" /><category term="Degrees Minutes Seconds" /><category term="C#" /><category term="Image Server" /><category term="Touch" /><category term="Drag and drop" /><category term="Reflection" /><category term="ValueConverter" /><category term="ArcGIS API for Silverlight" /><category term="Bing" /><category term="iPhone" /><category term="3D" /><category term="Oceanography" /><category term="Linq" /><category term=".NET 4.0" /><category term="Proxy" /><category term="ObservableCollection" /><category term="Hyperlink" /><category term="ArcGIS 10" /><category term="super app" /><category term="Rating" /><category term="ArcGlobe" /><category term="JavaScript" /><category term="P2P" /><category term="JigLibX" /><category term="WPF" /><category term="Silverlight" /><category term=".NET" /><category term="Coverflow" /><title>The Sandpit</title><subtitle type="html">We hack so that you don't have to!</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://kiwigis.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://kiwigis.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/8656429443005102101/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Richie</name><uri>http://www.blogger.com/profile/10195785521277646822</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="30" src="http://3.bp.blogspot.com/-7rc6j-Jfa4M/TXCb1G2wvrI/AAAAAAAABxg/Yp9ZiEl52tA/s220/photo2.JPG" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>78</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/blogspot/PaJS" /><feedburner:info uri="blogspot/pajs" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>blogspot/PaJS</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><entry gd:etag="W/&quot;C0IFQX06eSp7ImA9WhRQGUQ.&quot;"><id>tag:blogger.com,1999:blog-8656429443005102101.post-4679536008258693640</id><published>2011-12-15T15:25:00.001-08:00</published><updated>2011-12-15T15:25:10.311-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-15T15:25:10.311-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="WPF" /><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><category scheme="http://www.blogger.com/atom/ns#" term="Proxy" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><title>How to use WPF in a web service?</title><content type="html">&lt;p&gt;&lt;img src="http://blogs.esri.com/Dev/photos/apl/images/26625/586x480.aspx" /&gt;&lt;/p&gt;  &lt;p&gt;Using &lt;a href="http://windowsclient.net/wpf/"&gt;WPF&lt;/a&gt; in a web service might seem bizarre, but consider the following scenarios:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;You need to burn in a watermark into images requested from web application,&lt;/li&gt;    &lt;li&gt;You want to apply a &lt;a href="http://en.wikipedia.org/wiki/Red-eye_effect"&gt;red-eye reduction&lt;/a&gt; process to photographs takes from a mobile application, or&lt;/li&gt;    &lt;li&gt;You want to apply a &lt;a href="http://en.wikipedia.org/wiki/Jason_Bourne"&gt;Jason Bourne&lt;/a&gt; &lt;a href="http://polymaps.org/ex/midnight-commander.html"&gt;night effect&lt;/a&gt; to images in a web mapping application.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;We recently implemented something similar to the third scenario (see &lt;a href="http://blogs.esri.com/Dev/blogs/apl/archive/2011/12/13/How-to-apply-Map-Effects-using-a-Proxy-Server.aspx"&gt;blog&lt;/a&gt;, &lt;a href="http://www.arcgis.com/home/item.html?id=baad59c4c3d64e0ea635e31d492db076"&gt;source&lt;/a&gt;, &lt;a href="http://maps.esri.com/sldemos/delta/shader.html"&gt;live app&lt;/a&gt;). A client web application written in JavaScript, Flex or Silverlight could apply an image rendering effects by parsing an image’s url through a &lt;a href="http://en.wikipedia.org/wiki/Proxy_server"&gt;proxy&lt;/a&gt; service. The proxy service, using WPF, would apply a bitmap &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.effects.effect.aspx"&gt;effect&lt;/a&gt; and return a modified image. This technique adds the power of WPF to thin client at the cost of minimal network latency.&lt;/p&gt;  &lt;p&gt;Below is a detailed description of this proxy web service.&lt;/p&gt;  &lt;p&gt;The following class is an &lt;a href="http://www.asp.net/"&gt;ASP.NET&lt;/a&gt; &lt;a href="http://msdn.microsoft.com/en-us/library/bb398986.aspx"&gt;generic web handler&lt;/a&gt; called “invert”. When published it will be accessible as &lt;font face="Courier New"&gt;&lt;font size="2"&gt;../virtualdirectory/&lt;strong&gt;invert.ashx.&lt;/strong&gt;&lt;/font&gt;&lt;/font&gt; and will perform a &lt;a href="http://en.wikipedia.org/wiki/Color_negative"&gt;color negative&lt;/a&gt; effect on parsed images. Because our server is accommodating multiple effects, one effect per handler, the web context is handed to static method to reduce the amount of redundant code.&lt;/p&gt;  &lt;pre style="line-height: normal; font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size: 9.8pt"&gt;public&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;class&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Invert&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; : &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;IHttpHandler&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; ProcessRequest(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;HttpContext&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; context) {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Shader&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;.Process(context, &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;ShaderType&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;.Invert);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;bool&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;font color="#000000"&gt; IsReusable {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;get&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; { &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;false&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;The code below is performing a number of important tasks. Firstly, because this proxy is published on the internet we need to add some restrictions so that it is only used as intended. The proxy will only entertain requests from web applications published on the &lt;a href="http://maps.esri.com"&gt;maps.esri.com&lt;/a&gt; domain and it will only process images hosted on the &lt;a href="http://services.arcgisonline.com"&gt;services.arcgisonline.com&lt;/a&gt; domain. If the proxy request is legitimate, the remote image is downloaded and passed to a new background thread. The key is the creation of a background thread with a &lt;a href="http://msdn.microsoft.com/en-us/library/system.threading.thread.apartmentstate.aspx"&gt;single-threaded apartment&lt;/a&gt; which is required to use &lt;a href="http://en.wikipedia.org/wiki/Component_Object_Model"&gt;COM&lt;/a&gt; and hence WPF.&amp;#160; The proxy (or &lt;a href="http://en.wikipedia.org/wiki/Internet_Information_Services"&gt;IIS&lt;/a&gt;) process is put only hold as the WPF operation is underway.&amp;#160; The background thread returns a new image as an array of &lt;a href="http://en.wikipedia.org/wiki/Bytes"&gt;bytes&lt;/a&gt; which are then passed back to the client.&lt;/p&gt;

&lt;pre style="line-height: normal; font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size: 9.8pt"&gt;public&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;class&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Shader&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;static&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; Process(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;HttpContext&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; context, &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;ShaderType&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; effect) {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;// Only accept request from apps from this domain!&lt;/font&gt;&lt;/span&gt;&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; (!context.Request.UrlReferrer.ToString().ToLowerInvariant().&lt;br /&gt;                Contains(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;&amp;quot;maps.esri.com&amp;quot;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;)) {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; context.Response.StatusCode = 403;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; context.Response.End();&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;// Check for query string&lt;/font&gt;&lt;/span&gt;&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; query = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Uri&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;.UnescapeDataString(context.Request.QueryString.ToString());&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; (&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;.IsNullOrEmpty(query)) {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; context.Response.StatusCode = 403;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; context.Response.End();&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;// Filter requests&lt;/font&gt;&lt;/span&gt;&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; (!query.ToLowerInvariant().Contains(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;&amp;quot;services.arcgisonline.com&amp;quot;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;)) {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; context.Response.StatusCode = 403;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; context.Response.End();&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;// Create web request&lt;/font&gt;&lt;/span&gt;&lt;br /&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 style="color: "&gt;&lt;font color="#2b91af"&gt;WebRequest&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; webRequest = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;WebRequest&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;.Create(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Uri&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;(query));&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; webRequest.Method = context.Request.HttpMethod;&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;// Send the request to the server&lt;/font&gt;&lt;/span&gt;&lt;br /&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 style="color: "&gt;&lt;font color="#2b91af"&gt;WebResponse&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; serverResponse = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;try&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; serverResponse = webRequest.GetResponse();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;catch&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; (&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;WebException&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; webException) {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; context.Response.StatusCode = 500;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; context.Response.StatusDescription = webException.Status.ToString();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; context.Response.Write(webException.Response);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; context.Response.End();&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;// Exit if invalid response&lt;/font&gt;&lt;/span&gt;&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; (serverResponse == &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;) {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; context.Response.End();&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;// Configure reponse&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; context.Response.ContentType = serverResponse.ContentType;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Stream&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; stream = serverResponse.GetResponseStream();&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;// Read response&lt;/font&gt;&lt;/span&gt;&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;byte&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;[] buffer = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;byte&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;[32768];&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; size = 0;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; chunk;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;while&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; ((chunk = stream.Read(buffer, size, buffer.Length - size)) &amp;gt; 0) {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; size += chunk;&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; (size != buffer.Length) { &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;continue&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;; }&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; nextByte = stream.ReadByte();&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; (nextByte == -1) { &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;break&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;; }&lt;br /&gt; &lt;br /&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 style="color: "&gt;&lt;font color="#008000"&gt;// Resize the buffer&lt;/font&gt;&lt;/span&gt;&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;byte&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;[] newBuffer = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;byte&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;[buffer.Length * 2];&lt;br /&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 style="color: "&gt;&lt;font color="#2b91af"&gt;Array&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;.Copy(buffer, newBuffer, buffer.Length);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; newBuffer[size] = (&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;byte&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;)nextByte;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; buffer = newBuffer;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; size++;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; serverResponse.Close();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; stream.Close();&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;// Shrink buffer&lt;/font&gt;&lt;/span&gt;&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;byte&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;[] bytes = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;byte&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;[size];&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Array&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;.Copy(buffer, bytes, size);&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;// If the request is not a JPEG image then return data&lt;/font&gt;&lt;/span&gt;&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; (!serverResponse.ContentType.ToLowerInvariant().Contains(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;&amp;quot;image/jpg&amp;quot;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;)) {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; context.Response.OutputStream.Write(bytes, 0, bytes.Length);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; context.Response.End();&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;// Create class to send to STA backgroung thread&lt;/font&gt;&lt;/span&gt;&lt;br /&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 style="color: "&gt;&lt;font color="#2b91af"&gt;ShaderWorker&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; work = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;ShaderWorker&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;() {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Source = bytes,&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ShaderEffect = effect&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; };&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;// Execute background thread&lt;/font&gt;&lt;/span&gt;&lt;br /&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 style="color: "&gt;&lt;font color="#2b91af"&gt;Thread&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; worker = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Thread&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;ThreadStart&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;(work.Execute));&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; worker.SetApartmentState(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;ApartmentState&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;.STA);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; worker.Name = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;&amp;quot;CreateImageWorker&amp;quot;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;font color="#000000"&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; worker.Start();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; worker.Join();&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;// Return processed stream&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; context.Response.OutputStream.Write(work.Target, 0, work.Target.Length);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; context.Response.End();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;p align="left"&gt;This enumerator lists available &lt;a href="http://en.wikipedia.org/wiki/Shader"&gt;pixel shaders&lt;/a&gt;. These shaders (or “&lt;a href="http://msdn.microsoft.com/en-us/library/dd901594(v=vs.95).aspx"&gt;effects&lt;/a&gt;”) were downloaded from the &lt;a href="http://wpffx.codeplex.com/"&gt;Windows Presentation Foundation Pixel Shader Effects Library&lt;/a&gt;.&lt;/p&gt;

&lt;pre style="line-height: normal; font-family: ; background: white"&gt;&lt;font face="Consolas"&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size: 9.8pt"&gt;public&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;enum&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;ShaderType&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Emboss,&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Invert,&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Monochrome,&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Mosaic,&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Pixelate,&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Tint&lt;br /&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;And lastly, this is were the magic happens. This class is executed from the main IIS thread as a single-apartment thread as explained above. The source image is loaded as a generic &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imaging.bitmapimage.aspx"&gt;BitmapImage&lt;/a&gt; in an &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.image.aspx"&gt;Image&lt;/a&gt;, rendered with an effect and then exported to a new byte array.&lt;/p&gt;

&lt;pre style="line-height: normal; font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size: 9.8pt"&gt;public&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;class&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;ShaderWorker&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;ShaderType&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; ShaderEffect { &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;get&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;set&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;byte&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;[] Source { &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;get&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;set&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;byte&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;[] Target { &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;get&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;set&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; Execute() {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;// Create bitmapimage&lt;/font&gt;&lt;/span&gt;&lt;br /&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 style="color: "&gt;&lt;font color="#2b91af"&gt;MemoryStream&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; m = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;MemoryStream&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;.Source);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;BitmapImage&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; b = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;BitmapImage&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; b.BeginInit();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; b.DecodePixelWidth = 256;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; b.DecodePixelHeight = 256;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; b.StreamSource = m;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; b.EndInit();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; b.Freeze();&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;// Create image element&lt;/font&gt;&lt;/span&gt;&lt;br /&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 style="color: "&gt;&lt;font color="#2b91af"&gt;Image&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; i = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Image&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;() {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Source = b&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; };&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;// Assign shade effect&lt;/font&gt;&lt;/span&gt;&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;switch&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; (&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;.ShaderEffect) {&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;case&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;ShaderType&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;.Emboss:&lt;br /&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; i.Effect = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;EmbossedEffect&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;();&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;break&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;;&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;case&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;ShaderType&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;.Invert:&lt;br /&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; i.Effect = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;InvertEffect&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;();&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;break&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;;&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;case&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;ShaderType&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;.Monochrome:&lt;br /&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; i.Effect = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;MonochromeEffect&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;();&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;break&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;;&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;case&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;ShaderType&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;.Mosaic:&lt;br /&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; i.Effect = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;MosaicEffect&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;();&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;break&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;;&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;case&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;ShaderType&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;.Pixelate:&lt;br /&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; i.Effect = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;PixelateEffect&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;();&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;break&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;;&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;case&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;ShaderType&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;.Tint:&lt;br /&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; i.Effect = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;TintEffect&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;();&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;break&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;// Assign element size&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; i.Arrange(&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; System.Windows.&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Rect&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;(&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; System.Windows.&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Size&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;(256, 256)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; )&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; );&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; i.UpdateLayout();&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;// Render image element to a new bitmap&lt;/font&gt;&lt;/span&gt;&lt;br /&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 style="color: "&gt;&lt;font color="#2b91af"&gt;RenderTargetBitmap&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; r = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;RenderTargetBitmap&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;(256, 256, 96, 96,&lt;br /&gt;                                                      &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;PixelFormats&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;.Default);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; r.Render(i);&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;// Create a new memory stream&lt;/font&gt;&lt;/span&gt;&lt;br /&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 style="color: "&gt;&lt;font color="#2b91af"&gt;MemoryStream&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; memoryStream = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;MemoryStream&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;();&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;// Export bitmap to the stream&lt;/font&gt;&lt;/span&gt;&lt;br /&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 style="color: "&gt;&lt;font color="#2b91af"&gt;JpegBitmapEncoder&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; encoder = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;JpegBitmapEncoder&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; encoder.Frames.Add(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;BitmapFrame&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;.Create(r));&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; encoder.Save(memoryStream);&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;// Export the stream to a byte array&lt;/font&gt;&lt;/span&gt;&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;byte&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;[] bytes = memoryStream.ToArray();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; memoryStream.Close();&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;// Shutdown rendering thread (if alive)&lt;/font&gt;&lt;/span&gt;&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;font color="#000000"&gt; (r.Dispatcher.Thread.IsAlive) {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; r.Dispatcher.InvokeShutdown();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;// Store processed image (as a byte array)&lt;/font&gt;&lt;/span&gt;&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;.Target = bytes;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;In summary, this post describes the technique of using WPF in a web service to perform advanced rendering. In theory, this technique is not restricted to image processing but could also be used to generate graphics of charts, diagrams and even three dimensional scenes. During limited testing it is obvious that this technique introduces network latency, particularly when the service has been dormant. And what is still unknown is whether the rendering is performed in hardware (i.e. &lt;a href="http://en.wikipedia.org/wiki/Graphics_processing_unit"&gt;GPU&lt;/a&gt;) or software (i.e. &lt;a href="http://en.wikipedia.org/wiki/Central_processing_unit"&gt;CPU&lt;/a&gt;). Please comment below if you know the answer to this or know of a definitive test for GPU vs. CPU.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8656429443005102101-4679536008258693640?l=kiwigis.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/PaJS/~4/13RZTwf5w9I" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://kiwigis.blogspot.com/feeds/4679536008258693640/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://kiwigis.blogspot.com/2011/12/how-to-use-wpf-in-web-service.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8656429443005102101/posts/default/4679536008258693640?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8656429443005102101/posts/default/4679536008258693640?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/PaJS/~3/13RZTwf5w9I/how-to-use-wpf-in-web-service.html" title="How to use WPF in a web service?" /><author><name>Richie</name><uri>http://www.blogger.com/profile/10195785521277646822</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="30" src="http://3.bp.blogspot.com/-7rc6j-Jfa4M/TXCb1G2wvrI/AAAAAAAABxg/Yp9ZiEl52tA/s220/photo2.JPG" /></author><thr:total>1</thr:total><feedburner:origLink>http://kiwigis.blogspot.com/2011/12/how-to-use-wpf-in-web-service.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkINQnw-fip7ImA9WhRTGUg.&quot;"><id>tag:blogger.com,1999:blog-8656429443005102101.post-1264338583783501736</id><published>2011-11-10T11:49:00.001-08:00</published><updated>2011-11-10T11:49:53.256-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-10T11:49:53.256-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Pixel Shader" /><category scheme="http://www.blogger.com/atom/ns#" term="Silverlight" /><category scheme="http://www.blogger.com/atom/ns#" term="Custom Effect" /><title>Applying Custom Effects to Silverlight Maps</title><content type="html">&lt;p&gt;&lt;a href="http://lh6.ggpht.com/-yPkRm_CE5Xc/Trwq0pQna0I/AAAAAAAACc8/n7ub2l4K1rc/s1600-h/clip_image002%25255B12%25255D%25255B4%25255D.jpg"&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" title="Larry King" alt="Larry King" src="http://lh4.ggpht.com/-5BlxZTl_tuU/Trwq0xAck-I/AAAAAAAACdE/NkK4Wqatqio/clip_image002%25255B12%25255D_thumb%25255B1%25255D.jpg?imgmax=800" width="500" height="296" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The Larry King &lt;a href="http://blog.aarp.org/2010/07/01/larry_king_set_to_retire_at_ag/"&gt;effect&lt;/a&gt; is many custom map effects available in a newly published sample by the &lt;a href="http://blogs.esri.com/Dev/blogs/apl/"&gt;Applications Prototype Lab&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Click &lt;a href="http://maps.esri.com/sldemos/shy/shy.html"&gt;here&lt;/a&gt; for the live app.    &lt;br /&gt;Click &lt;a href="http://www.arcgis.com/home/item.html?id=d02189515c6a447da51d308fde43cd3c"&gt;here&lt;/a&gt; to download the source code.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Background&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;With the release of &lt;a href="http://www.silverlight.net/"&gt;Silverlight&lt;/a&gt; 3, Microsoft introduced the capability to apply &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.media.effects.shadereffect(VS.95).aspx"&gt;custom effects&lt;/a&gt; using &lt;a href="http://en.wikipedia.org/wiki/Pixel_shader"&gt;pixel shaders&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The &lt;a href="http://help.arcgis.com/en/webapi/silverlight/"&gt;ArcGIS API for Silverlight&lt;/a&gt; allows developers to assign effects directly to a layer or map. This sample demonstrates the application of custom effects to a map.&lt;/p&gt;  &lt;p&gt;Silverlight versions 3 and 4 currently applies effects in software, that is, using the &lt;a href="http://en.wikipedia.org/wiki/Central_processing_unit"&gt;CPU&lt;/a&gt; rather than the &lt;a href="http://en.wikipedia.org/wiki/GPU"&gt;GPU&lt;/a&gt;. On slower computers users may experience a slight delay when navigating or changing effects.&lt;/p&gt;  &lt;p&gt;One advantage of this technique is that web developers can extend the utility of standard base maps. For example, a developer could create an effect that would allow the Esri &lt;a href="http://www.arcgis.com/home/item.html?id=3b93337983e9436f8db950e38a8629af"&gt;streetmap &lt;/a&gt;base map to be more legible at night. Applying effects does not create more content nor impact network bandwidth.&lt;/p&gt;  &lt;p&gt;For a technical discussion on pixels shaders for Silverlight we recommend &lt;a href="http://channel9.msdn.com/coding4fun/articles/SilverShader--Introduction-to-Silverlight-and-WPF-Pixel-Shaders"&gt;this&lt;/a&gt; article.&lt;/p&gt;  &lt;p&gt;Below are a few screenshots from the live application linked above.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Inverted&lt;/strong&gt;    &lt;br /&gt;&lt;a href="http://lh5.ggpht.com/-r5dJCQkety0/Trwq1Km0vTI/AAAAAAAACdM/7Uxa2OevKuQ/s1600-h/clip_image002%25255B3%25255D.jpg"&gt;&lt;img style="display: inline" title="Inverted" alt="Inverted" src="http://lh6.ggpht.com/-_9DnGBAZqiU/Trwq1jHLvDI/AAAAAAAACdU/n5-2_2kbkYU/clip_image002_thumb.jpg?imgmax=800" width="500" height="296" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Gray&lt;/strong&gt;    &lt;br /&gt;&lt;a href="http://lh5.ggpht.com/-0D2NZLqT7Io/Trwq11IdrJI/AAAAAAAACdc/XhFvjffHelE/s1600-h/clip_image002%25255B4%25255D%25255B2%25255D.jpg"&gt;&lt;img style="display: inline" title="Gray" alt="Gray" src="http://lh6.ggpht.com/-gZrq0WnOgZo/Trwq2Bd5aiI/AAAAAAAACdk/TfHH92KTDbM/clip_image002%25255B4%25255D_thumb.jpg?imgmax=800" width="500" height="296" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Saturation/Desaturation&lt;/strong&gt;&lt;a href="http://lh4.ggpht.com/-ZWymFDdY5R8/Trwq2EP_i0I/AAAAAAAACds/iTluUj7egRI/s1600-h/clip_image002%25255B6%25255D%25255B2%25255D.jpg"&gt;     &lt;br /&gt;&lt;img style="display: inline" title="Saturation/Desaturation" alt="Saturation/Desaturation" src="http://lh6.ggpht.com/-BAIMbGeSmug/Trwq2T1sTcI/AAAAAAAACd0/WEJQGx4jPy0/clip_image002%25255B6%25255D_thumb.jpg?imgmax=800" width="500" height="296" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Censored&lt;/strong&gt;    &lt;br /&gt;&lt;a href="http://lh4.ggpht.com/-UI61AEiwbBM/Trwq2vwtH2I/AAAAAAAACd8/fV5EK_QEzS4/s1600-h/clip_image002%25255B8%25255D%25255B2%25255D.jpg"&gt;&lt;img style="display: inline" title="Censored" alt="Censored" src="http://lh5.ggpht.com/-N_NFSxGLHJM/Trwq2-ptJgI/AAAAAAAACeE/sR_FI6divvk/clip_image002%25255B8%25255D_thumb.jpg?imgmax=800" width="500" height="296" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Embossing&lt;/strong&gt;    &lt;br /&gt;&lt;a href="http://lh4.ggpht.com/-ufLltQxOUG0/Trwq3Fa_IjI/AAAAAAAACeM/lV6Yavag-J0/s1600-h/clip_image002%25255B10%25255D%25255B2%25255D.jpg"&gt;&lt;img style="display: inline" title="Embossing" alt="Embossing" src="http://lh3.ggpht.com/-eajK5QLONSI/Trwq3di5yZI/AAAAAAAACeU/iLGqRWRBHus/clip_image002%25255B10%25255D_thumb.jpg?imgmax=800" width="500" height="296" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Movie&lt;/strong&gt;    &lt;br /&gt;&lt;a href="http://lh6.ggpht.com/-F6ESxprMl3g/Trwq3gV_wFI/AAAAAAAACec/0mw7zFE9kGI/s1600-h/clip_image002%25255B14%25255D%25255B2%25255D.jpg"&gt;&lt;img style="display: inline" title="Movie" alt="Movie" src="http://lh6.ggpht.com/-upRQgo2z_Ok/Trwq3xWO-VI/AAAAAAAACek/Ox0vsvuWvdk/clip_image002%25255B14%25255D_thumb.jpg?imgmax=800" width="500" height="296" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8656429443005102101-1264338583783501736?l=kiwigis.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/PaJS/~4/0Yw46r2g_Rc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://kiwigis.blogspot.com/feeds/1264338583783501736/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://kiwigis.blogspot.com/2011/11/applying-custom-effects-to-silverlight.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8656429443005102101/posts/default/1264338583783501736?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8656429443005102101/posts/default/1264338583783501736?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/PaJS/~3/0Yw46r2g_Rc/applying-custom-effects-to-silverlight.html" title="Applying Custom Effects to Silverlight Maps" /><author><name>Richie</name><uri>http://www.blogger.com/profile/10195785521277646822</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="30" src="http://3.bp.blogspot.com/-7rc6j-Jfa4M/TXCb1G2wvrI/AAAAAAAABxg/Yp9ZiEl52tA/s220/photo2.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-5BlxZTl_tuU/Trwq0xAck-I/AAAAAAAACdE/NkK4Wqatqio/s72-c/clip_image002%25255B12%25255D_thumb%25255B1%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://kiwigis.blogspot.com/2011/11/applying-custom-effects-to-silverlight.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0YASXk4eSp7ImA9WhdXE0w.&quot;"><id>tag:blogger.com,1999:blog-8656429443005102101.post-5314962294161531721</id><published>2011-08-25T16:57:00.001-07:00</published><updated>2011-08-25T17:39:08.731-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-25T17:39:08.731-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Walkthrough" /><category scheme="http://www.blogger.com/atom/ns#" term="Interactivity" /><category scheme="http://www.blogger.com/atom/ns#" term="Silverlight" /><category scheme="http://www.blogger.com/atom/ns#" term="Mouse Drag" /><category scheme="http://www.blogger.com/atom/ns#" term="Behavior" /><category scheme="http://www.blogger.com/atom/ns#" term="Blend" /><title>How to add mouse drag behavior in Silverlight</title><content type="html">&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Charles_Babbage"&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" title="Charles Babbage" alt="Charles Babbage" src="http://lh3.ggpht.com/-CQnEoeTJlSw/Tlbheo9y_3I/AAAAAAAACBg/OvthmNl__XQ/image%25255B18%25255D.png?imgmax=800" width="206" height="242" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Today, end users expect (or demand) intuitive and interactive web applications. One component of this is the ability to manipulate object with a mouse. This blog post provides a three step walk through that describes how to create a draggable picture of &lt;a href="http://en.wikipedia.org/wiki/Charles_Babbage"&gt;Charles Babbage&lt;/a&gt;, the inventor of the first computer.&lt;/p&gt;  &lt;p&gt;This walkthrough requires:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Microsoft Visual Studio 2010 (&lt;a href="http://www.microsoft.com/visualstudio/en-us/try?WT.mc_id=Silverlight.NetTopNews"&gt;link&lt;/a&gt;) &lt;/li&gt;    &lt;li&gt;Microsoft Visual Studio 2010 Service Pack 1 (&lt;a href="http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;amp;id=23691"&gt;link&lt;/a&gt;) – &lt;em&gt;Optional&lt;/em&gt; &lt;/li&gt;    &lt;li&gt;Microsoft Silverlight 4 Tools for Visual Studio 2010 (&lt;a href="http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;amp;id=18149"&gt;link&lt;/a&gt;) &lt;/li&gt;    &lt;li&gt;Microsoft Expression Blend SDK for Silverlight 4 (&lt;a href="http://www.microsoft.com/download/en/details.aspx?displaylang=en&amp;amp;id=3062"&gt;link&lt;/a&gt;) &lt;/li&gt; &lt;/ol&gt;  &lt;h2&gt;Step 1 – In VS2010, create a new Silverlight application called &lt;em&gt;SilverlightApplication1&lt;/em&gt;&lt;/h2&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-Ix7i3qQjvE8/Tlbhe91dwpI/AAAAAAAACBk/CRMEHAMu8Dg/s1600-h/image%25255B2%25255D.png"&gt;&lt;img style="display: inline" title="How to add mouse drag behavior in Silverlight" alt="How to add mouse drag behavior in Silverlight" src="http://lh4.ggpht.com/-oLFUmhv-UxY/TlbhfCMxi1I/AAAAAAAACBo/6TSP9eZSXwA/image_thumb.png?imgmax=800" width="500" height="359" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Click &lt;em&gt;ok&lt;/em&gt; to create a host ASP.NET web application&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/-hxZa5l39mBM/TlbhfXp4HDI/AAAAAAAACBs/5Cwx5kkJcA0/s1600-h/image%25255B5%25255D.png"&gt;&lt;img style="display: inline" title="How to add mouse drag behavior in Silverlight" alt="How to add mouse drag behavior in Silverlight" src="http://lh6.ggpht.com/-MW0W44fGxmg/Tlbhfqr59gI/AAAAAAAACBw/1VeHKktHgkw/image_thumb%25255B1%25255D.png?imgmax=800" width="500" height="359" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;Step 2 – Add blend interactivity behavior&lt;/h2&gt;  &lt;p&gt;Add the following assembly references:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;b&gt;Microsoft.Expression.Interactions        &lt;br /&gt;&lt;/b&gt;&lt;i&gt;&lt;font size="2"&gt;c:\Program Files (x86)\Microsoft SDKs\Expression\Blend\Silverlight\v4.0\Libraries\Microsoft.Expression.Interactions.dll&lt;/font&gt;&lt;/i&gt; &lt;/li&gt;    &lt;li&gt;&lt;b&gt;System.Windows.Interactivity        &lt;br /&gt;&lt;/b&gt;&lt;i&gt;&lt;font size="2"&gt;c:\Program Files (x86)\Microsoft SDKs\Expression\Blend\Silverlight\v4.0\Libraries\System.Windows.Interactivity.dll&lt;/font&gt;&lt;/i&gt; &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-v30Kk8Qo6xg/TlbhgTf74qI/AAAAAAAACB0/C5YCgAsniLc/s1600-h/image%25255B8%25255D.png"&gt;&lt;img style="display: inline" title="How to add mouse drag behavior in Silverlight" alt="How to add mouse drag behavior in Silverlight" src="http://lh3.ggpht.com/-aG8Pxa7r9qE/TlbhguuSZ1I/AAAAAAAACB4/tPlUnVz121o/image_thumb%25255B2%25255D.png?imgmax=800" width="500" height="359" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;Step 3 – Add drag behavior to an image&lt;/h2&gt;  &lt;p&gt;Copy and paste the following code into MainPage.xaml. This will display an image of Charles Babbage in the center of the screen. The XAML to enable mouse dragging is highlighted in yellow below.&lt;/p&gt;  &lt;pre style="line-height: normal; font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size: 9.8pt"&gt;&amp;lt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;UserControl&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; x&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt;Class&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;SilverlightApplication1.MainPage&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; xmlns&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; xmlns&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt;x&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; xmlns&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt;d&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;http://schemas.microsoft.com/expression/blend/2008&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; xmlns&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt;mc&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;http://schemas.openxmlformats.org/markup-compatibility/2006&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt;&amp;#160;&lt;font style="background-color: #ffff00"&gt;xmlns&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="background-color: #ffff00"&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt;i&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;http://schemas.microsoft.com/expression/2010/interactivity&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;br /&gt;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt;&amp;#160;&lt;font style="background-color: #ffff00"&gt;xmlns&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="background-color: #ffff00"&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt;ei&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;http://schemas.microsoft.com/expression/2010/interactions&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;br /&gt;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; mc&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt;Ignorable&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;d&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; d&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt;DesignHeight&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;600&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; d&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt;DesignWidth&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;800&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt; &amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;Grid&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; x&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt;Name&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;LayoutRoot&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; Background&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;White&amp;quot;&lt;/span&gt;&lt;span style="color: "&gt;&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size: 9.8pt"&gt;&amp;lt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;Image&lt;/font&gt;&lt;/span&gt;&lt;br /&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; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; Width&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;100&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt;Source&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;http://upload.wikimedia.org/wikipedia/commons/6/6b/Charles_Babbage_-_1860.jpg&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;br /&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; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt; &amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&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 style="background-color: #ffff00"&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;i&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;Interaction.Behaviors&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&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 style="background-color: #ffff00"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="background-color: #ffff00"&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;ei&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;MouseDragElementBehavior&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&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 style="background-color: #ffff00"&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;i&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;Interaction.Behaviors&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;Image&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font style="font-size: 9.8pt" color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;font face="Consolas"&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;Grid&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: "&gt;&amp;lt;/&lt;/span&gt;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;UserControl&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font style="font-size: 9.8pt" color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;

&lt;p&gt;You are done! Press F5 to start the project is debug mode. Using your mouse, the picture of Charles Babbage can dragged around the screen.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://lh6.ggpht.com/-uSKCmnMyG4s/Tlbhgx2ADLI/AAAAAAAACB8/MYEfzrGdMec/s1600-h/image%25255B11%25255D.png"&gt;&lt;img style="display: inline" title="How to add mouse drag behavior in Silverlight" alt="How to add mouse drag behavior in Silverlight" src="http://lh6.ggpht.com/-wBcI4ZdVUEs/TlbhhG0jfdI/AAAAAAAACCA/EXwq6cWu33E/image_thumb%25255B3%25255D.png?imgmax=800" width="500" height="372" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This works fine but with a little extra work we can make the application a little more intuitive. By adding a frame, drop shadow and associating a hand cursor, the picture now has a visual queue inviting users to interact.&lt;/p&gt;

&lt;pre style="line-height: normal; font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size: 9.8pt"&gt;&amp;lt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;UserControl&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; x&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt;Class&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;SilverlightApplication1.MainPage&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; xmlns&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; xmlns&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt;x&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; xmlns&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt;d&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;http://schemas.microsoft.com/expression/blend/2008&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; xmlns&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt;mc&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;http://schemas.openxmlformats.org/markup-compatibility/2006&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; xmlns&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt;i&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;http://schemas.microsoft.com/expression/2010/interactivity&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;br /&gt;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; xmlns&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt;ei&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;http://schemas.microsoft.com/expression/2010/interactions&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;br /&gt;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; mc&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt;Ignorable&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;d&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; d&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt;DesignHeight&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;600&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; d&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt;DesignWidth&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;800&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt; &amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;Grid&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; x&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt;Name&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;LayoutRoot&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; Background&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;White&amp;quot;&lt;/span&gt;&lt;span style="color: "&gt;&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;Grid&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&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;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;Grid&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; Background&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;White&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; Cursor&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;Hand&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; HorizontalAlignment&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;Center&amp;quot;&lt;br /&gt;                  &lt;/span&gt;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt;VerticalAlignment&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;&lt;span style="color: "&gt;&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&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;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;i&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;Interaction.Behaviors&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&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;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;ei&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;MouseDragElementBehavior&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;/&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&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;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;i&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;Interaction.Behaviors&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&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;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;Grid&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; Background&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;Black&amp;quot;&lt;/span&gt;&lt;span style="color: "&gt;&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&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;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;Grid.Effect&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&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;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;BlurEffect&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; Radius&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;15&amp;quot;&lt;/span&gt;&lt;span style="color: "&gt;/&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&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;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;Grid.Effect&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&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;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;Grid&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&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;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;Grid&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; Background&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;White&amp;quot;&lt;/span&gt;&lt;span style="color: "&gt;/&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&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;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;Image&lt;/font&gt;&lt;/span&gt;&lt;br /&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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; Margin&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;10&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;br /&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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; Width&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;100&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt;Source&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;http://upload.wikimedia.org/wikipedia/commons/6/6b/Charles_Babbage_-_1860.jpg&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;br /&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;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt; /&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&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;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;Grid&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;Grid&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;Grid&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: "&gt;&amp;lt;/&lt;/span&gt;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;UserControl&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font style="font-size: 9.8pt" color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://lh3.ggpht.com/--imMoNy-BJk/TlbhhW975AI/AAAAAAAACCE/Po5XswCNBZk/s1600-h/image%25255B14%25255D.png"&gt;&lt;img style="display: inline" title="How to add mouse drag behavior in Silverlight" alt="How to add mouse drag behavior in Silverlight" src="http://lh3.ggpht.com/-OLryY2HmSW4/Tlbhhmpe30I/AAAAAAAACCI/b40EQMdNMWs/image_thumb%25255B4%25255D.png?imgmax=800" width="500" height="372" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8656429443005102101-5314962294161531721?l=kiwigis.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/PaJS/~4/YzsjRcraCwM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://kiwigis.blogspot.com/feeds/5314962294161531721/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://kiwigis.blogspot.com/2011/08/how-to-add-mouse-drag-behavior-in.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8656429443005102101/posts/default/5314962294161531721?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8656429443005102101/posts/default/5314962294161531721?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/PaJS/~3/YzsjRcraCwM/how-to-add-mouse-drag-behavior-in.html" title="How to add mouse drag behavior in Silverlight" /><author><name>Richie</name><uri>http://www.blogger.com/profile/10195785521277646822</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="30" src="http://3.bp.blogspot.com/-7rc6j-Jfa4M/TXCb1G2wvrI/AAAAAAAABxg/Yp9ZiEl52tA/s220/photo2.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-CQnEoeTJlSw/Tlbheo9y_3I/AAAAAAAACBg/OvthmNl__XQ/s72-c/image%25255B18%25255D.png?imgmax=800" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://kiwigis.blogspot.com/2011/08/how-to-add-mouse-drag-behavior-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4MQHk9fip7ImA9WhdXEk8.&quot;"><id>tag:blogger.com,1999:blog-8656429443005102101.post-3357532232540028036</id><published>2011-08-24T16:03:00.001-07:00</published><updated>2011-08-24T16:03:01.766-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-24T16:03:01.766-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Proxy" /><category scheme="http://www.blogger.com/atom/ns#" term="ASP.NET" /><category scheme="http://www.blogger.com/atom/ns#" term="Cross Domain File" /><category scheme="http://www.blogger.com/atom/ns#" term="Silverlight" /><category scheme="http://www.blogger.com/atom/ns#" term="Client Access Policy" /><title>How to create a simple proxy in ASP.NET</title><content type="html">&lt;p&gt;A common obstruction when developing &lt;a href="http://www.silverlight.net/"&gt;Silverlight&lt;/a&gt; web applications is cross domain access. Silverlight has built-in security that prevents communication to servers that do not explicitly granted access using with either a &lt;a href="http://msdn.microsoft.com/en-us/library/cc197955(VS.95).aspx"&gt;client access policy&lt;/a&gt; or cross domain file. Even though a server has services intended for public use, if the server does not have a cross domain file then Silverlight apps will be denied access.&lt;/p&gt;  &lt;p&gt;This post presents a convenient and legitimate way to overcome this restriction with a simple proxy service in three easy steps!&lt;/p&gt;  &lt;h2&gt;Step 1 – In Visual Studio 2010, create a new ASP.NET Web Application project called &lt;em&gt;WebApplication1&lt;/em&gt;&lt;/h2&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/-i-9VraxAf7A/TlWDHJAnLzI/AAAAAAAACBA/wSAioSruSGE/s1600-h/image%25255B2%25255D.png"&gt;&lt;img style="display: inline" title="How to create a simple proxy in ASP.NET" alt="How to create a simple proxy in ASP.NET" src="http://lh3.ggpht.com/-ED6anUr6z5A/TlWDHi2f-2I/AAAAAAAACBE/9yS_N_y73co/image_thumb.png?imgmax=800" width="500" height="422" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;Step 2 – Add a new generic handler called &lt;em&gt;proxy.ashx&lt;/em&gt;&lt;/h2&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/-dwwKFv_EZ3U/TlWDH4kGMVI/AAAAAAAACBI/3x3IW0hOpWw/s1600-h/image%25255B5%25255D.png"&gt;&lt;img style="display: inline" title="How to create a simple proxy in ASP.NET" alt="How to create a simple proxy in ASP.NET" src="http://lh3.ggpht.com/-aPVzSvx8IN0/TlWDIGHlaEI/AAAAAAAACBM/AE86-TlwZcE/image_thumb%25255B1%25255D.png?imgmax=800" width="500" height="422" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;Step 3 – Copy and paste this code into &lt;em&gt;proxy.ashx.cs&lt;/em&gt;.&lt;/h2&gt;  &lt;pre style="line-height: normal; font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size: 9.8pt"&gt;using&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;font color="#000000"&gt; System;&lt;/font&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; System.IO;&lt;/font&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; System.Net;&lt;/font&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; System.Web;&lt;br /&gt; &lt;/font&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;namespace&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; WebApplication1 {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;class&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;proxy&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; : &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;IHttpHandler&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; ProcessRequest(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;HttpContext&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; context) {&lt;br /&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 style="color: "&gt;&lt;font color="#2b91af"&gt;HttpResponse&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; response = context.Response;&lt;br /&gt; &lt;br /&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 style="color: "&gt;&lt;font color="#008000"&gt;// Check for query string&lt;/font&gt;&lt;/span&gt;&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; uri = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Uri&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;.UnescapeDataString(context.Request.QueryString.ToString());&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; (&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;.IsNullOrWhiteSpace(uri)) {&lt;br /&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; response.StatusCode = 403;&lt;br /&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; response.End();&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt; &lt;br /&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 style="color: "&gt;&lt;font color="#008000"&gt;// Filter requests&lt;/font&gt;&lt;/span&gt;&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; (!uri.ToLowerInvariant().Contains(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;&amp;quot;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt" color="#a31515"&gt;wikimedia.org&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;font face="Consolas"&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;&amp;quot;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;)) {&lt;br /&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; response.StatusCode = 403;&lt;br /&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; response.End();&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt; &lt;br /&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 style="color: "&gt;&lt;font color="#008000"&gt;// Create web request&lt;/font&gt;&lt;/span&gt;&lt;br /&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 style="color: "&gt;&lt;font color="#2b91af"&gt;WebRequest&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; webRequest = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;WebRequest&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;.Create(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Uri&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;(uri));&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; webRequest.Method = context.Request.HttpMethod;&lt;br /&gt; &lt;br /&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 style="color: "&gt;&lt;font color="#008000"&gt;// Send the request to the server&lt;/font&gt;&lt;/span&gt;&lt;br /&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 style="color: "&gt;&lt;font color="#2b91af"&gt;WebResponse&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; serverResponse = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;;&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;try&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; {&lt;br /&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; serverResponse = webRequest.GetResponse();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;catch&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; (&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;WebException&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; webExc) {&lt;br /&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; response.StatusCode = 500;&lt;br /&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; response.StatusDescription = webExc.Status.ToString();&lt;br /&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; response.Write(webExc.Response);&lt;br /&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; response.End();&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt; &lt;br /&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 style="color: "&gt;&lt;font color="#008000"&gt;// Exit if invalid response&lt;/font&gt;&lt;/span&gt;&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; (serverResponse == &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;) {&lt;br /&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; response.End();&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt; &lt;br /&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 style="color: "&gt;&lt;font color="#008000"&gt;// Configure reponse&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;/font&gt;&lt;font face="Consolas"&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; response.ContentType = serverResponse.ContentType;&lt;br /&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 style="color: "&gt;&lt;font color="#2b91af"&gt;Stream&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; stream = serverResponse.GetResponseStream();&lt;br /&gt; &lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;byte&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;[] buffer = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;byte&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;[32768];&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; read = 0;&lt;br /&gt; &lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; chunk;&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;while&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; ((chunk = stream.Read(buffer, read, buffer.Length - read)) &amp;gt; 0) {&lt;br /&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; read += chunk;&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; (read != buffer.Length) { &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;continue&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;; }&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; nextByte = stream.ReadByte();&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; (nextByte == -1) { &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;break&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;; }&lt;br /&gt; &lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;// Resize the buffer&lt;/font&gt;&lt;/span&gt;&lt;br /&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;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;byte&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;[] newBuffer = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;byte&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;[buffer.Length * 2];&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Array&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;.Copy(buffer, newBuffer, buffer.Length);&lt;br /&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; newBuffer[read] = (&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;byte&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;)nextByte;&lt;br /&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; buffer = newBuffer;&lt;br /&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; read++;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt; &lt;br /&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 style="color: "&gt;&lt;font color="#008000"&gt;// Buffer is now too big. Shrink it.&lt;/font&gt;&lt;/span&gt;&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;byte&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;[] ret = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;byte&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;[read];&lt;br /&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 style="color: "&gt;&lt;font color="#2b91af"&gt;Array&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;.Copy(buffer, ret, read);&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; response.OutputStream.Write(ret, 0, ret.Length);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; serverResponse.Close();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; stream.Close();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; response.End();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;bool&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;font color="#000000"&gt; IsReusable {&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;get&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; { &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;false&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;You are done! To test, press F5 to run the web application in debug mode. Your default web browser will display the &lt;em&gt;Default.aspx&lt;/em&gt; page from your project.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://lh3.ggpht.com/-S7Um4aWSRQ0/TlWDIR-05rI/AAAAAAAACBQ/16W-_4cPkCg/s1600-h/image%25255B11%25255D.png"&gt;&lt;img style="display: inline" title="How to create a simple proxy in ASP.NET" alt="How to create a simple proxy in ASP.NET" src="http://lh4.ggpht.com/-3MOQBGkJ69Y/TlWDIr1wvwI/AAAAAAAACBU/Ja3nQWrnf3c/image_thumb%25255B3%25255D.png?imgmax=800" width="500" height="334" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Without closing the web browser, append the name of the proxy service and the web resource (highlighted below) that you need access to. For example:
  &lt;br /&gt;&lt;a title="http://localhost:51220/proxy.ashx?http://upload.wikimedia.org/wikipedia/en/f/f0/New-esri-logo.jpg" href="http://localhost:51220/proxy.ashx?http://upload.wikimedia.org/wikipedia/en/f/f0/New-esri-logo.jpg"&gt;&lt;font size="2"&gt;http://localhost:51220/proxy.ashx?&lt;font style="background-color: #ffff00"&gt;http://upload.&lt;font style="style"&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/a&gt;&lt;a title="http://localhost:51220/proxy.ashx?http://upload.wikimedia.org/wikipedia/en/f/f0/New-esri-logo.jpg" href="http://localhost:51220/proxy.ashx?http://upload.wikimedia.org/wikipedia/en/f/f0/New-esri-logo.jpg"&gt;&lt;font style="background-color: #ffff00" size="2"&gt;wikimedia.org&lt;/font&gt;&lt;/a&gt;&lt;a title="http://localhost:51220/proxy.ashx?http://upload.wikimedia.org/wikipedia/en/f/f0/New-esri-logo.jpg" href="http://localhost:51220/proxy.ashx?http://upload.wikimedia.org/wikipedia/en/f/f0/New-esri-logo.jpg"&gt;&lt;font style="style"&gt;&lt;/font&gt;&lt;font style="background-color: #ffff00" size="2"&gt;/wikipedia/en/f/f0/New-esri-logo.jpg&lt;/font&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the result.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://lh4.ggpht.com/-kaaqMPUzrK8/TlWDI0Iz9DI/AAAAAAAACBY/hRhSk3IX4S8/s1600-h/image%25255B14%25255D.png"&gt;&lt;img style="display: inline" title="How to create a simple proxy in ASP.NET" alt="How to create a simple proxy in ASP.NET" src="http://lh3.ggpht.com/-QyGvj8iSdek/TlWDJL4VPXI/AAAAAAAACBc/ilXx8G9eo1Q/image_thumb%25255B4%25255D.png?imgmax=800" width="500" height="334" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In summary, this post described how to crate a simple proxy web service. The proxy can be used by Silverlight web application to access resources that are restricted due to a missing cross domain file. To prevent malicious use of the proxy it is advisable to add some sort of access restriction, for example, in this exercise the proxy was configured to only accept requests for content from the &lt;em&gt;wikimedia.org&lt;/em&gt; domain.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8656429443005102101-3357532232540028036?l=kiwigis.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/PaJS/~4/9D7GlyRbbDU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://kiwigis.blogspot.com/feeds/3357532232540028036/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://kiwigis.blogspot.com/2011/08/how-to-create-simple-proxy-in-aspnet.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8656429443005102101/posts/default/3357532232540028036?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8656429443005102101/posts/default/3357532232540028036?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/PaJS/~3/9D7GlyRbbDU/how-to-create-simple-proxy-in-aspnet.html" title="How to create a simple proxy in ASP.NET" /><author><name>Richie</name><uri>http://www.blogger.com/profile/10195785521277646822</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="30" src="http://3.bp.blogspot.com/-7rc6j-Jfa4M/TXCb1G2wvrI/AAAAAAAABxg/Yp9ZiEl52tA/s220/photo2.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/-ED6anUr6z5A/TlWDHi2f-2I/AAAAAAAACBE/9yS_N_y73co/s72-c/image_thumb.png?imgmax=800" height="72" width="72" /><thr:total>3</thr:total><feedburner:origLink>http://kiwigis.blogspot.com/2011/08/how-to-create-simple-proxy-in-aspnet.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUMDQX88fCp7ImA9WhdQEUQ.&quot;"><id>tag:blogger.com,1999:blog-8656429443005102101.post-5949002692198431665</id><published>2011-08-12T18:04:00.001-07:00</published><updated>2011-08-12T18:04:30.174-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-12T18:04:30.174-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="WPF" /><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><category scheme="http://www.blogger.com/atom/ns#" term="MoonDust" /><category scheme="http://www.blogger.com/atom/ns#" term="Theme" /><title>Moondust – A WPF Theme</title><content type="html">&lt;p&gt;&lt;img style="display: inline" title="Moondust" alt="Moondust" src="http://lh4.ggpht.com/-nqfxYI_T7sc/TkXNm2S3YsI/AAAAAAAAB-Y/ZChOl666iNQ/image%25255B17%25255D.png?imgmax=800" width="473" height="409" /&gt;&lt;/p&gt;  &lt;p&gt;Introducing &lt;em&gt;moondust&lt;/em&gt;, a &lt;a href="http://en.wikipedia.org/wiki/Metro_(design_language)"&gt;metro&lt;/a&gt; inspired &lt;a href="http://en.wikipedia.org/wiki/Windows_Presentation_Foundation"&gt;WPF&lt;/a&gt; theme. The theme is far from complete but does include a &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.button.aspx"&gt;button&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.checkbox.aspx"&gt;checkbox&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.radiobutton.aspx"&gt;radiobutton&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.slider.aspx"&gt;sliders&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.scrollbar.aspx"&gt;scrollbars&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Moondust emulates metro’s bold monocrome outlines but includes the addition of subtle drop shadow and white mouse-over halo effect.&lt;/p&gt;  &lt;p&gt;&lt;img style="display: inline" title="Moondust" alt="Moondust" src="http://lh4.ggpht.com/-0YWrAHWBL4c/TkXNnET22vI/AAAAAAAAB-c/RkRPNP7lsC4/image%25255B16%25255D.png?imgmax=800" width="127" height="117" /&gt;&lt;/p&gt;  &lt;p&gt;&lt;img style="display: inline" title="Moondust" alt="Moondust" src="http://lh5.ggpht.com/-J8rFrIDw4vM/TkXNnag2SXI/AAAAAAAAB-g/4jtoHTQgd4U/image%25255B15%25255D.png?imgmax=800" width="128" height="122" /&gt;&lt;/p&gt;  &lt;p&gt;The source code to this theme is available via the following link. The download includes the sample application displayed in this post.&lt;/p&gt;  &lt;p&gt;&lt;iframe style="padding-bottom: 0px; background-color: #fcfcfc; padding-left: 0px; width: 98px; padding-right: 0px; height: 115px; padding-top: 0px" title="Preview" marginheight="0" src="https://skydrive.live.com/embedicon.aspx/Kiwigis/MoonDustSample.zip?cid=dd16c3f34f4d913e&amp;amp;sc=documents" frameborder="0" marginwidth="0" scrolling="no"&gt;&lt;/iframe&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8656429443005102101-5949002692198431665?l=kiwigis.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/PaJS/~4/ZqMQ-p4UTqs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://kiwigis.blogspot.com/feeds/5949002692198431665/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://kiwigis.blogspot.com/2011/08/moondust-wpf-theme.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8656429443005102101/posts/default/5949002692198431665?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8656429443005102101/posts/default/5949002692198431665?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/PaJS/~3/ZqMQ-p4UTqs/moondust-wpf-theme.html" title="Moondust – A WPF Theme" /><author><name>Richie</name><uri>http://www.blogger.com/profile/10195785521277646822</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="30" src="http://3.bp.blogspot.com/-7rc6j-Jfa4M/TXCb1G2wvrI/AAAAAAAABxg/Yp9ZiEl52tA/s220/photo2.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-nqfxYI_T7sc/TkXNm2S3YsI/AAAAAAAAB-Y/ZChOl666iNQ/s72-c/image%25255B17%25255D.png?imgmax=800" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://kiwigis.blogspot.com/2011/08/moondust-wpf-theme.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEEFSH0yeSp7ImA9WhdQEUU.&quot;"><id>tag:blogger.com,1999:blog-8656429443005102101.post-4798277770752569624</id><published>2011-08-12T14:58:00.001-07:00</published><updated>2011-08-12T15:03:39.391-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-12T15:03:39.391-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="WPF" /><category scheme="http://www.blogger.com/atom/ns#" term="Kinect" /><category scheme="http://www.blogger.com/atom/ns#" term=".NET 4.0" /><title>How to align Kinect’s depth image with the color image?</title><content type="html">&lt;p&gt;&lt;img style="display: inline" title="How to align kinect’s depth image with its color image" alt="How to align kinect’s depth image with its color image" src="http://lh6.ggpht.com/-y7QIIXi6994/TkWh6O5AisI/AAAAAAAAB-U/eSVVBRZ_WrQ/image%25255B3%25255D.png?imgmax=800" width="500" height="375" /&gt;&lt;/p&gt;  &lt;p&gt;These two good looking gentlemen are demonstrating the blending of &lt;a href="http://www.xbox.com/kinect"&gt;kinect&lt;/a&gt;'s depth and video feeds. Because the depth and video sensors are different resolutions and offset on the device itself there a computation procedure needed to map data one to the other.&lt;/p&gt;  &lt;p&gt;Thankfully Microsoft has provided comprehensive documentation such as the &lt;a href="http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/docs/SkeletalViewer_Walkthrough.pdf"&gt;Skeletal Viewer Walkthrough&lt;/a&gt; and the &lt;a href="http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/docs/ProgrammingGuide_KinectSDK.pdf"&gt;Programming Guide&lt;/a&gt; for the &lt;a href="http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/default.aspx"&gt;Kinect for Windows SDK&lt;/a&gt;. This post is going to provide simple walkthrough to efficiently map depth sensor pixels, for each person, to the video sensor feed.&lt;/p&gt;  &lt;p&gt;This exercise requires:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Kinect"&gt;Xbox 360 Kinect&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://windows.microsoft.com/en-US/windows7/products/home"&gt;Microsoft Windows 7&lt;/a&gt; (32 or 64bit)&lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.microsoft.com/visualstudio/en-us"&gt;Microsoft Visual Studio 2010&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;a href="http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/download.aspx"&gt;Kinect for Windows SDK beta&lt;/a&gt;&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;In Microsoft Visual Studio 2010, create a new &lt;a href="http://en.wikipedia.org/wiki/Windows_Presentation_Foundation"&gt;WPF&lt;/a&gt; application and add a reference to the &lt;em&gt;Microsoft.Research.Kinect&lt;/em&gt; assembly. In this exercise the name of the project (and default namespace) is &lt;em&gt;KinectSample&lt;/em&gt;.&lt;/p&gt;  &lt;p&gt;Add the following code to &lt;strong&gt;MainWindow.xaml&lt;/strong&gt;:&lt;/p&gt;  &lt;pre style="line-height: normal; font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size: 9.8pt"&gt;&amp;lt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;Window&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; x&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt;Class&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;KinectSample.MainWindow&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; xmlns&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; xmlns&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt;x&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; Title&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;Kinect Sample&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; Height&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;600&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; Width&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;800&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="#000000"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt; &amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;Grid&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;Image&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; x&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt;Name&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;ImageVideo&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; Stretch&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;UniformToFill&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; HorizontalAlignment&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;br /&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;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; VerticalAlignment&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;&lt;span style="color: "&gt; /&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;Image&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; x&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt;Name&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;ImageDepth&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; Stretch&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;UniformToFill&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; HorizontalAlignment&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;br /&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;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; VerticalAlignment&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#ff0000"&gt; Opacity&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;=&lt;/span&gt;&lt;span style="color: "&gt;&amp;quot;0.5&amp;quot;&lt;/span&gt;&lt;span style="color: "&gt; /&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;/span&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;Grid&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;font color="#0000ff"&gt;&lt;span style="color: "&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: "&gt;&amp;lt;/&lt;/span&gt;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;Window&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font style="font-size: 9.8pt" color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;

&lt;p&gt;In &lt;strong&gt;MainWindows.xaml.cs&lt;/strong&gt; add the following:&lt;/p&gt;

&lt;pre style="line-height: normal; font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size: 9.8pt"&gt;using&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;font color="#000000"&gt; System;&lt;/font&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; System.Windows;&lt;/font&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; System.Windows.Media;&lt;/font&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; System.Windows.Media.Imaging;&lt;/font&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; Microsoft.Research.Kinect.Nui;&lt;br /&gt; &lt;/font&gt;&lt;br /&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;namespace&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; KinectSample {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;partial&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;class&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;MainWindow&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; : &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Window&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Runtime&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; _runtime = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;;&lt;br /&gt;&lt;/font&gt;&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; MainWindow() {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; InitializeComponent();&lt;br /&gt; &lt;br /&gt;&lt;/font&gt;&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;.Loaded += &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;RoutedEventHandler&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;.KinectControl_Loaded);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; KinectControl_Loaded(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; sender, &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;RoutedEventArgs&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; args) {&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;._runtime = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Runtime&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;();&lt;br /&gt; &lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;try&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; {&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;._runtime.Initialize(&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;RuntimeOptions&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;.UseDepthAndPlayerIndex |&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;RuntimeOptions&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;.UseSkeletalTracking |&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;RuntimeOptions&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;.UseColor&lt;br /&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;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;catch&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; (&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;InvalidOperationException&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;) {&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;MessageBox&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;.Show(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;&amp;quot;Runtime initialization failed. &amp;quot;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; +&lt;br /&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;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;&amp;quot;Please make sure Kinect device is plugged in.&amp;quot;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;);&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt; &lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;try&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; {&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;._runtime.VideoStream.Open(&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;ImageStreamType&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;.Video, 2,&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;ImageResolution&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;.Resolution640x480,&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;ImageType&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;.Color);&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;._runtime.DepthStream.Open(&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;ImageStreamType&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;.Depth, 2,&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;ImageResolution&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;.Resolution320x240,&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;ImageType&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;.DepthAndPlayerIndex);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;catch&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; (&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;InvalidOperationException&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;) {&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;MessageBox&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;.Show(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;&amp;quot;Failed to open stream. &amp;quot;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; +&lt;br /&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; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;&amp;quot;Please make sure to specify a supported image type and resolution.&amp;quot;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;);&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt; &lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;._runtime.VideoFrameReady += (s, e) =&amp;gt; {&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;PlanarImage&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; planarImage = e.ImageFrame.Image;&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;.ImageVideo.Source = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;BitmapSource&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;.Create(&lt;br /&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; planarImage.Width,&lt;br /&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; planarImage.Height,&lt;br /&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; 96d,&lt;br /&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; 96d,&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;PixelFormats&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;.Bgr32,&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;,&lt;br /&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; planarImage.Bits,&lt;br /&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; planarImage.Width * planarImage.BytesPerPixel&lt;br /&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;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; };&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;._runtime.DepthFrameReady += (s, e) =&amp;gt; {&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;//&lt;/font&gt;&lt;/span&gt;&lt;br /&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;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;PlanarImage&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; planarImage = e.ImageFrame.Image;&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;byte&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;[] depth = planarImage.Bits;&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; width = planarImage.Width;&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; height = planarImage.Height;&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;byte&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;[] color = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;byte&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;[width * height * 4];&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;ImageViewArea&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; viewArea = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;ImageViewArea&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;() {&lt;br /&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; CenterX = 0,&lt;br /&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; CenterY = 0,&lt;br /&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; Zoom = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;ImageDigitalZoom&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;.Zoom1x&lt;br /&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;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;ImageResolution&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; resolution = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;._runtime.VideoStream.Resolution;&lt;br /&gt; &lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;for&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; (&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; y = 0; y &amp;lt; height; y++) {&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;for&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; (&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; x = 0; x &amp;lt; width; x++) {&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; index = (y * width + x) * 2;&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; player = depth[index] &amp;amp; 7;&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; (player == 0) { &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;continue&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;; }&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;short&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; depthValue =&lt;br /&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; (&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;short&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;)(depth[index] | (depth[index + 1] &amp;lt;&amp;lt; 8));&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;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; colorX;&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; colorY;&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;._runtime.NuiCamera.GetColorPixelCoordinatesFromDepthPixel(&lt;br /&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; resolution,&lt;br /&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; viewArea,&lt;br /&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; x,&lt;br /&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; y,&lt;br /&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; depthValue,&lt;br /&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; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;out&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; colorX,&lt;br /&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; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;out&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; colorY&lt;br /&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;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; adjustedX = colorX / 2;&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; adjustedY = colorY / 2;&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; (adjustedX &amp;lt; 0 || adjustedX &amp;gt; 319) { &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;continue&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;; }&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; (adjustedY &amp;lt; 0 || adjustedY &amp;gt; 239) { &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;continue&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;; }&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; indexColor = (adjustedY * width + adjustedX) * 4;&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Color&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;[] colors = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Color&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;[]{&lt;br /&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; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Colors&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;.Red, &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Colors&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;.Green, &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Colors&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;.Blue, &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Colors&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;.White,&lt;br /&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; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Colors&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;.Gold, &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Colors&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;.Cyan, &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Colors&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;.Plum&lt;br /&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;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Color&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; col = colors[player - 1];&lt;br /&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; color[indexColor + 0] = (&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;byte&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;)col.B;&lt;br /&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; color[indexColor + 1] = (&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;byte&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;)col.R;&lt;br /&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; color[indexColor + 2] = (&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;byte&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;)col.G;&lt;br /&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; color[indexColor + 3] = (&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;byte&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;)col.A;&lt;br /&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;br /&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;br /&gt; &lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;.ImageDepth.Source = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;BitmapSource&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;.Create(&lt;br /&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; width,&lt;br /&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; height,&lt;br /&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; 96d,&lt;br /&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; 96d,&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;PixelFormats&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;font color="#000000"&gt;.Bgra32,&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;,&lt;br /&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; color,&lt;br /&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; width * 4&lt;br /&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;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; };&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;

&lt;p&gt;You are done!&lt;/p&gt;

&lt;p&gt;This sample will color code the first seven people identified by the kinect device. The most intensive part of this code is the &lt;em&gt;GetColorPixelCoordinatesFromDepthPixel&lt;/em&gt; call that maps depth pixels to the video image. To improve performance only pixels identified by the sensor as being a person are mapped. All other depth pixels are ignored.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8656429443005102101-4798277770752569624?l=kiwigis.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/PaJS/~4/kNEFgoQgYNU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://kiwigis.blogspot.com/feeds/4798277770752569624/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://kiwigis.blogspot.com/2011/08/how-to-align-kinects-depth-image-with.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8656429443005102101/posts/default/4798277770752569624?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8656429443005102101/posts/default/4798277770752569624?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/PaJS/~3/kNEFgoQgYNU/how-to-align-kinects-depth-image-with.html" title="How to align Kinect’s depth image with the color image?" /><author><name>Richie</name><uri>http://www.blogger.com/profile/10195785521277646822</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="30" src="http://3.bp.blogspot.com/-7rc6j-Jfa4M/TXCb1G2wvrI/AAAAAAAABxg/Yp9ZiEl52tA/s220/photo2.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/-y7QIIXi6994/TkWh6O5AisI/AAAAAAAAB-U/eSVVBRZ_WrQ/s72-c/image%25255B3%25255D.png?imgmax=800" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://kiwigis.blogspot.com/2011/08/how-to-align-kinects-depth-image-with.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QDR3oyeyp7ImA9WhdQEUw.&quot;"><id>tag:blogger.com,1999:blog-8656429443005102101.post-7261491352559272160</id><published>2011-08-11T18:07:00.001-07:00</published><updated>2011-08-11T18:09:36.493-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-11T18:09:36.493-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="WPF" /><category scheme="http://www.blogger.com/atom/ns#" term="Kinect" /><category scheme="http://www.blogger.com/atom/ns#" term=".NET 4.0" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows 7" /><title>Kinect Control for WPF</title><content type="html">&lt;p&gt;Yesterday, &lt;a href="http://www.esri.com/"&gt;Esri&lt;/a&gt;’s &lt;a href="http://blogs.esri.com/Dev/blogs/apl/"&gt;Applications Prototype Lab&lt;/a&gt; released a &lt;a href="http://blogs.esri.com/Dev/blogs/apl/archive/2011/08/10/Kinect-for-ArcGlobe.aspx"&gt;sample&lt;/a&gt; for &lt;a href="http://www.esri.com/software/arcgis/extensions/3danalyst/index.html"&gt;ArcGlobe&lt;/a&gt; that allows users to navigate in three dimensions using a &lt;a href="http://en.wikipedia.org/wiki/Kinect"&gt;Kinect&lt;/a&gt; sensor and simple hand gestures.&lt;/p&gt;  &lt;p&gt;This post describes a sample utility library developed in conjunction with the ArcGlobe add-in called &lt;strong&gt;KinectControl&lt;/strong&gt;. KinectControl is a &lt;a href="http://en.wikipedia.org/wiki/Windows_Presentation_Foundation"&gt;WPF&lt;/a&gt; user control that can display raw kinect feeds but most importantly provide developers with the orientation, inclination and extension of both arms relative to the sensor. KinectControl was developed a generic library that can used to kinect&lt;em&gt;ize&lt;/em&gt; any application. &lt;/p&gt;  &lt;p&gt;The following few screenshots demonstrate the capabilities of the KinectControl. By default, KinectControl displays the sensor’s video feed and the skeleton of the closest person to the sensor. The orange text at the bottom of the app is debug information from the test application.&lt;/p&gt;  &lt;p&gt;&lt;img style="display: inline" title="Kinect Control for WPF" alt="Kinect Control for WPF" src="http://lh5.ggpht.com/-C17KseP6TNk/TkR8uV7T1YI/AAAAAAAAB98/1PtM5qQGNf4/image%25255B1%25255D.png?imgmax=800" width="500" height="375" /&gt;&lt;/p&gt;  &lt;p&gt;Occasionally a limb may appear red, this indicates that one or more of the limb’s joints cannot be “tracked” and its position is “inferred” or approximated by the sensor. This often happens when a joint is obscured from view, for example, if a user is pointing their hand and arm directly towards the sensor, the user’s shoulder cannot be seen by the sensor.&lt;/p&gt;  &lt;p&gt;On the upper right hand corner of the KinectControl are three button that allow the user to toggle between three different views. The &lt;strong&gt;video&lt;/strong&gt; and &lt;strong&gt;depth&lt;/strong&gt; views are self explanatory but the third, &lt;strong&gt;blend&lt;/strong&gt;, is a combination of the both.&lt;/p&gt;  &lt;p&gt;&lt;img style="display: inline" title="Kinect Control for WPF" alt="Kinect Control for WPF" src="http://lh5.ggpht.com/-fsjTMfCsJnY/TkR8vMzoXII/AAAAAAAAB-A/k7c6KsZiTwU/image6%25255B1%25255D.png?imgmax=800" width="500" height="375" /&gt;&lt;/p&gt;  &lt;p&gt;The &lt;strong&gt;blend&lt;/strong&gt; view color codes each and every person identified by the kinect sensor with a different color as shown below. The kinect sensor can identify up to seven people.&lt;/p&gt;  &lt;p&gt;&lt;img style="display: inline" title="Kinect Control for WPF" alt="Kinect Control for WPF" src="http://lh6.ggpht.com/-Qiv3ntqOw_Q/TkR8whBHLkI/AAAAAAAAB-E/ECkC7u2GXts/image9%25255B1%25255D.png?imgmax=800" width="500" height="375" /&gt;&lt;/p&gt;  &lt;p&gt;This white stick figure graphic in the upper left hand corner is used to alert the user whenever he or she has moved beyond the kinect’s field of view. For example, in the screenshot below, the user has moved too far to their left.&lt;/p&gt;  &lt;p&gt;&lt;img style="display: inline" title="Kinect Control for WPF" alt="Kinect Control for WPF" src="http://lh4.ggpht.com/-Y4jMPP0Kyo0/TkR8xMHf9WI/AAAAAAAAB-I/krREkjmL_YU/image3%25255B1%25255D.png?imgmax=800" width="143" height="206" /&gt;&lt;/p&gt;  &lt;p&gt;In the bottom left hand corner are two buttons to control the inclination of the sensor. Each button click will move the sensor one degree up or down.&lt;/p&gt;  &lt;p&gt;&lt;img style="display: inline" title="Kinect Control for WPF" alt="Kinect Control for WPF" src="http://lh4.ggpht.com/-SNTVQWCoUi8/TkR8xkSBmOI/AAAAAAAAB-M/Xw_KLmjuuJ8/image12%25255B1%25255D.png?imgmax=800" width="144" height="168" /&gt;&lt;/p&gt;  &lt;p&gt;And lastly, the test app that is included with the sample uses binding to display the left and right arm orientation and inclination on the screen.&lt;/p&gt;  &lt;p&gt;&lt;img style="display: inline" title="Kinect Control for WPF" alt="Kinect Control for WPF" src="http://lh5.ggpht.com/-D4NmxSllFik/TkR8yJtUKLI/AAAAAAAAB-Q/f-Qt_JQkYi0/image15%25255B1%25255D.png?imgmax=800" width="314" height="146" /&gt;&lt;/p&gt;  &lt;p&gt;Please click the link below to download the KinectControl sample. To use this sample you must have a &lt;a href="http://www.xbox.com/kinect"&gt;Kinect&lt;/a&gt; connected to &lt;a href="http://windows.microsoft.com/en-US/windows7/products/home"&gt;Windows 7&lt;/a&gt; computer with &lt;a href="http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/"&gt;Kinect for Windows SDK&lt;/a&gt; installed.&lt;/p&gt; &lt;iframe style="padding-bottom: 0px; background-color: #fcfcfc; padding-left: 0px; width: 98px; padding-right: 0px; height: 115px; padding-top: 0px" title="Preview" marginheight="0" src="https://skydrive.live.com/embedicon.aspx/Kiwigis/ESRI.PrototypeLab.Beta.zip?cid=dd16c3f34f4d913e&amp;amp;sc=documents" frameborder="0" marginwidth="0" scrolling="no"&gt;&lt;/iframe&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8656429443005102101-7261491352559272160?l=kiwigis.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/PaJS/~4/eeDn3C86vgI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://kiwigis.blogspot.com/feeds/7261491352559272160/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://kiwigis.blogspot.com/2011/08/kinect-control-for-windows.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8656429443005102101/posts/default/7261491352559272160?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8656429443005102101/posts/default/7261491352559272160?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/PaJS/~3/eeDn3C86vgI/kinect-control-for-windows.html" title="Kinect Control for WPF" /><author><name>Richie</name><uri>http://www.blogger.com/profile/10195785521277646822</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="30" src="http://3.bp.blogspot.com/-7rc6j-Jfa4M/TXCb1G2wvrI/AAAAAAAABxg/Yp9ZiEl52tA/s220/photo2.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-C17KseP6TNk/TkR8uV7T1YI/AAAAAAAAB98/1PtM5qQGNf4/s72-c/image%25255B1%25255D.png?imgmax=800" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://kiwigis.blogspot.com/2011/08/kinect-control-for-windows.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A04FR3k_fSp7ImA9WhdQEE0.&quot;"><id>tag:blogger.com,1999:blog-8656429443005102101.post-3024223750722476120</id><published>2011-08-10T13:58:00.001-07:00</published><updated>2011-08-10T13:58:36.745-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-10T13:58:36.745-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="3D" /><category scheme="http://www.blogger.com/atom/ns#" term="Kinect" /><category scheme="http://www.blogger.com/atom/ns#" term=".NET 4.0" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows 7" /><category scheme="http://www.blogger.com/atom/ns#" term="OpenGL" /><category scheme="http://www.blogger.com/atom/ns#" term="AddIn" /><category scheme="http://www.blogger.com/atom/ns#" term="ArcGlobe" /><title>Kinect for ArcGlobe</title><content type="html">&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:67a90f47-d6f7-4483-8aa4-a0c2e9bc637e" class="wlWriterEditableSmartContent"&gt;&lt;div id="f30c58a0-1aa4-4c7d-9563-7c28979efab5" style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=yKeX0P6jcu4" target="_new"&gt;&lt;img src="http://lh4.ggpht.com/-cOJzFGRHbsw/TkLw_NSxO1I/AAAAAAAAB9I/4Lepqmj3T1k/video41de4243a708%25255B59%25255D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('f30c58a0-1aa4-4c7d-9563-7c28979efab5'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;448\&amp;quot; height=\&amp;quot;336\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/yKeX0P6jcu4?hl=en&amp;amp;hd=1\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/yKeX0P6jcu4?hl=en&amp;amp;hd=1\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;448\&amp;quot; height=\&amp;quot;336\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt=""&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;On June 16, 2011, Microsoft released the &lt;a href="http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/"&gt;Kinect for Windows SDK&lt;/a&gt;. This SDK allows windows developers to support motion with an Xbox 360 &lt;a href="http://en.wikipedia.org/wiki/Kinect"&gt;Kinect&lt;/a&gt; device. The &lt;a href="http://blogs.esri.com/Dev/blogs/apl/"&gt;Applications Prototype Lab&lt;/a&gt; at &lt;a href="http://www.esri.com/"&gt;Esri&lt;/a&gt; has just completed a prototype using a Kinect to navigate in &lt;a href="http://www.esri.com/software/arcgis/extensions/3danalyst/index.html"&gt;ArcGlobe&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;To fly forward, the user can raise their right hand. The display will navigate in the direct the right hand is pointing. We call this “superman navigation”. If the left hand is elevated, the display will pivot around a central location on the globe surface. And lastly, if both hands are raised, the screen will zoom in or out as the hands are both together or apart.&lt;/p&gt;  &lt;p&gt;To use the add-in you must have the following:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;a href="http://www.xbox.com/en-US/Xbox360/Accessories/Kinect/kinectforxbox360"&gt;Kinect for Xbox 360 sensor&lt;/a&gt;, &lt;/li&gt;    &lt;li&gt;&lt;a href="http://windows.microsoft.com/en-US/windows7/products/home"&gt;Windows 7&lt;/a&gt; (32 or 64bit), &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.microsoft.com/download/en/details.aspx?id=17851"&gt;.NET Framework 4.0&lt;/a&gt;, &lt;/li&gt;    &lt;li&gt;&lt;a href="http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/download.aspx"&gt;Kinect for Windows SDK beta&lt;/a&gt;. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;The add-in (with source code) is available &lt;a href="http://resources.arcgis.com/gallery/file/arcobjects-net-api/details?entryID=B5108F3F-1422-2418-34C6-560CDE5F4AA2"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;This add-in was challenging in sense that translating traditional mouse navigation to motion was not easy. With mouse or touch input devices, users have immediate sensory feedback once they have clicked a mouse button or touched a screen. In a number of Xbox games, this issue has been overcome with a paused hover. That is, a user uses his or her hand to move the screen cursor over a button and waits for a few seconds as an activation animation completes. This is fine for buttons that occupy discrete areas of a screen but not for interaction throughout the screen,&lt;/p&gt;  &lt;p&gt;The approach adopted, rightly or wrongly, by this add-in is that of a virtual screen that exists at arm’s length directly in front of the user. This virtual screen only extended +/- 25° from an arm point directly ahead at the real screen. This technique provides an approximate motion to screen mapping with screen contact only at full arm extension and only within a narrow 50°x50° area in front of the user.&lt;/p&gt;  &lt;p&gt;Ultimately a better approach could be to rely purely on touch-like gestures such as left swipe, right swipe and pinching. There has been exciting work in this area by &lt;a href="http://www.codeplex.com/site/users/view/Deltakosh"&gt;Deltakosh&lt;/a&gt; on the &lt;a href="http://kinecttoolbox.codeplex.com/"&gt;Kinect Toolbox&lt;/a&gt; project but I hope that the final release of the Kinect SDK includes gesture recognition.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8656429443005102101-3024223750722476120?l=kiwigis.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/PaJS/~4/64A6CAJ4rpc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://kiwigis.blogspot.com/feeds/3024223750722476120/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://kiwigis.blogspot.com/2011/08/kinect-for-arcglobe.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8656429443005102101/posts/default/3024223750722476120?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8656429443005102101/posts/default/3024223750722476120?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/PaJS/~3/64A6CAJ4rpc/kinect-for-arcglobe.html" title="Kinect for ArcGlobe" /><author><name>Richie</name><uri>http://www.blogger.com/profile/10195785521277646822</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="30" src="http://3.bp.blogspot.com/-7rc6j-Jfa4M/TXCb1G2wvrI/AAAAAAAABxg/Yp9ZiEl52tA/s220/photo2.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-cOJzFGRHbsw/TkLw_NSxO1I/AAAAAAAAB9I/4Lepqmj3T1k/s72-c/video41de4243a708%25255B59%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://kiwigis.blogspot.com/2011/08/kinect-for-arcglobe.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UGRXY7eSp7ImA9WhdSGEQ.&quot;"><id>tag:blogger.com,1999:blog-8656429443005102101.post-8621110584248209674</id><published>2011-07-28T15:12:00.001-07:00</published><updated>2011-07-28T15:13:44.801-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-28T15:13:44.801-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ArcGIS Desktop" /><category scheme="http://www.blogger.com/atom/ns#" term="Drag and drop" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><category scheme="http://www.blogger.com/atom/ns#" term="ArcMap" /><title>How to create a drop target for layers in ArcMap?</title><content type="html">&lt;p&gt;&lt;em&gt;This post as originally published 3/16/2007 on Microsoft Live Spaces.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/-GV_2D6sbMQw/TjHex_RdhoI/AAAAAAAAB8w/95Wy143nDHw/s1600-h/image%25255B2%25255D.png"&gt;&lt;img style="display: inline" title="How to create a drop target for layers in ArcMap?" alt="How to create a drop target for layers in ArcMap?" src="http://lh4.ggpht.com/-pqWG85X5Kxs/TjHezO3uXHI/AAAAAAAAB80/jW4-iZAvP0c/image_thumb.png?imgmax=800" width="500" height="344" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Drag and drop is a convenient and intuitive method of exchanging data between windows (and applications). &lt;a href="http://www.esri.com/"&gt;ESRI&lt;/a&gt; applications like &lt;a href="http://www.esri.com/software/arcgis/about/arccatalog.html"&gt;ArcCatalog&lt;/a&gt; and &lt;a href="http://www.esri.com/software/arcgis/about/arcmap.html"&gt;ArcMap&lt;/a&gt; have drop and drop capabilities, for example, you can drag layer into the &lt;a href="http://webhelp.esri.com/arcgisdesktop/9.2/index.cfm?TopicName=Buffer_(Analysis)"&gt;Buffer&lt;/a&gt; geoprocessing tool window (see above). &lt;/p&gt;  &lt;p&gt;Using the sample code below you can add this capability to your &lt;a href="http://msdn2.microsoft.com/en-us/netframework/default.aspx"&gt;.NET&lt;/a&gt; application, that is, you can make your window/control a drop target for layers dragged from the ArcMap table of contents. This code can be used in a window hosted by an &lt;a href="http://www.esri.com/"&gt;ESRI&lt;/a&gt; application such as an ArcMap dockable window or as a standalone application.&lt;/p&gt;  &lt;p&gt;To enable this feature, a utility class called &lt;em&gt;EsriDataObject&lt;/em&gt; is provided below to assist with the deserialization of dropped objects from &lt;a href="http://www.esri.com/software/arcgis/about/arcmap.html"&gt;ArcMap&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The first code sample demonstrates how to use &lt;em&gt;EsriDataObject&lt;/em&gt; in a .NET &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.forms.form.aspx"&gt;Form&lt;/a&gt;. The code will display the concatenate list of layer names that were dropped on the form. The code assumes there is Form called &lt;em&gt;form1&lt;/em&gt; and a &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.forms.textbox.aspx"&gt;TextBox&lt;/a&gt; called &lt;em&gt;textBox1&lt;/em&gt;. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;How to use &amp;quot;EsriDataObject&amp;quot; in a .NET Form.&lt;/strong&gt;&lt;/p&gt;  &lt;pre style="line-height: normal"&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff" size="2"&gt;using&lt;/font&gt;&lt;/span&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt; System;
&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt; System.Collections.Generic;
&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt; System.ComponentModel;
&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt; System.Data;
&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt; System.Drawing;
&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt; System.Text;
&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt; System.Windows.Forms;
&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt; ESRI.ArcGIS.Carto;

&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;namespace&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt; MyNamespace {
    &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;partial&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;class&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Form1&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; : &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Form&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt; {
        &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt; Form1() {
            InitializeComponent();
            &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;.textBox1.AllowDrop = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;true&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt;;
            &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt;.textBox1.DragEnter +=&lt;br /&gt;               &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;DragEventHandler&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt;.textBox1_DragEnter);
            &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt;.textBox1.DragOver  +=&lt;br /&gt;               &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;DragEventHandler&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt;.textBox1_DragOver);
            &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt;.textBox1.DragDrop  +=&lt;br /&gt;               &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;DragEventHandler&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt;.textBox1_DragDrop);
        }
        &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; textBox1_DragEnter(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt; sender, &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;DragEventArgs&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt; e) {
            e.Effect = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;EsriDataObject&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt;.IsValid(e.Data) ?&lt;br /&gt;                &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;DragDropEffects&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;.All : &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;DragDropEffects&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt;.None;
        }
        &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; textBox1_DragOver(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt; sender, &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;DragEventArgs&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt; e) {
            e.Effect = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;EsriDataObject&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt;.IsValid(e.Data) ?&lt;br /&gt;                &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;DragDropEffects&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;.All : &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;DragDropEffects&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt;.None;
        }
        &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; textBox1_DragDrop(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt; sender, &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;DragEventArgs&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt; e) {
            &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;EsriDataObject&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt; esriDataObject =&lt;br /&gt;              &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;EsriDataObject&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt;.ConvertToEsriDataObject(e.Data);
            &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;foreach&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; (&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;ILayer&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; layer &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;in&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt; esriDataObject.LayerCollection) {
                &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font color="#000000" size="2"&gt;.textBox1.Text += layer.Name + &amp;quot; &amp;quot;;
            }
        }
    }
}&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;Sample 2: Source code to &amp;quot;EsriDataObject&amp;quot;.&lt;/strong&gt;&lt;/p&gt;

&lt;pre style="line-height: normal"&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff" size="2"&gt;using&lt;/font&gt;&lt;/span&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt; System;
&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt; System.Collections.Generic;
&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt; System.IO;
&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt; System.Text;
&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt; System.Windows.Forms;
&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt; ESRI.ArcGIS.Carto;
&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt; ESRI.ArcGIS.ArcMapUI;
&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt; ESRI.ArcGIS.esriSystem;

&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;namespace&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt; MyNamespace {
    &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;class&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;EsriDataObject&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt; {
        &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;const&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; DATAOBJECT_ESRILAYERS = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;&amp;quot;ESRI Layers&amp;quot;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt;;
        &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;const&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; INTERFACE_ILAYER =&lt;br /&gt;            &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;&amp;quot;{34C20002-4D3C-11D0-92D8-00805F7C28B0}&amp;quot;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt;;
        &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;const&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; INTERFACE_ITABLEPROPERTY =&lt;br /&gt;            &lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;&amp;quot;{4657D951-5FFB-11D3-9F6C-00C04F6BC886}&amp;quot;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt;;
        &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;readonly&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;List&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;lt;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;ILayer&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;gt; _lc = &lt;/font&gt;&lt;font size="2"&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;List&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;lt;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;ILayer&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt;&amp;gt;()&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt;;
        &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;readonly&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;List&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;lt;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;ITableProperty&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;gt; _tpc = &lt;/font&gt;&lt;font size="2"&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;List&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;lt;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;ITableProperty&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font color="#000000" size="2"&gt;&amp;gt;()&lt;/font&gt;&lt;/font&gt;&lt;font color="#000000" size="2"&gt;;
&lt;/font&gt;&lt;font color="#000000" size="2"&gt;        &lt;/font&gt;&lt;font size="2"&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;//
&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;// PROPERTIES
&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;//
&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;List&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;lt;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;ILayer&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt;&amp;gt; LayerCollection {
            &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;get&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; { &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt;._lc; }
        }
        &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;List&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;lt;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;ITableProperty&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt;&amp;gt; TablePropertyCollection {
            &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;get&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; { &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font color="#000000" size="2"&gt;._tpc; }
        }
        &lt;/font&gt;&lt;font size="2"&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;//
&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;// STATIC METHODS
&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;//
&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;        &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;static&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;bool&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; IsValid(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;IDataObject&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt; dataObject) {
            &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt; dataObject.GetDataPresent(DATAOBJECT_ESRILAYERS);
        }
        &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;static&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;EsriDataObject&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; ConvertToEsriDataObject(&lt;br /&gt;            &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;IDataObject&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font color="#000000" size="2"&gt; dataObject) {
            &lt;/font&gt;&lt;font size="2"&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;//
&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;EsriDataObject&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; esriDataObject = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;EsriDataObject&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font color="#000000" size="2"&gt;();

            &lt;/font&gt;&lt;font size="2"&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;// Exit if dropped object is invalid
&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;            &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; (&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;EsriDataObject&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font color="#000000" size="2"&gt;.IsValid(dataObject)) {
                &lt;/font&gt;&lt;font size="2"&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;// Get Byte Array from DataObject
&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;               &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt; esriLayers = dataObject.GetData(DATAOBJECT_ESRILAYERS);
                &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;MemoryStream&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; memoryStream = (&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;MemoryStream&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt;)esriLayers;
                &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;byte&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font color="#000000" size="2"&gt;[] bytes = memoryStream.ToArray();

                &lt;/font&gt;&lt;font size="2"&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;// Load Byte Array into a Stream (ESRI Wrapper of IStream)
&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;                &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;IMemoryBlobStreamVariant&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; memoryBlobStreamVariant =&lt;br /&gt;                    &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;MemoryBlobStreamClass&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt;();
                memoryBlobStreamVariant.ImportFromVariant(bytes);
                &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;IMemoryBlobStream2&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; memoryBlobStream =&lt;br /&gt;                    (&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;IMemoryBlobStream2&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt;)memoryBlobStreamVariant;
                &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;IStream&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; stream = (&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;IStream&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font color="#000000" size="2"&gt;)memoryBlobStream;

                &lt;/font&gt;&lt;font size="2"&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;// Load Stream into an ESRI ObjectStream
&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;                &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;IObjectStream&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; objectStream = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;ObjectStreamClass&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font color="#000000" size="2"&gt;();
                objectStream.Stream = stream;

                &lt;/font&gt;&lt;font size="2"&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;// Get Number of Layers in Dropped Object
&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;                &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;byte&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt; pv;
                &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;uint&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; cb = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;sizeof&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt;);
                &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;uint&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt; pcbRead;
                objectStream.RemoteRead(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;out&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; pv, cb, &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;out&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt; pcbRead);
                &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; count = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Convert&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font color="#000000" size="2"&gt;.ToInt32(pv);

                &lt;/font&gt;&lt;font size="2"&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;// Define Guids
&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;                &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Guid&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; guidLayer = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Guid&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt;(INTERFACE_ILAYER);
                &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Guid&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; guidTable = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Guid&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font color="#000000" size="2"&gt;(INTERFACE_ITABLEPROPERTY);

                &lt;/font&gt;&lt;font size="2"&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;// Get Dropped Layers
&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;                &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;for&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; (&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt; i = 0; i &amp;lt; count; i++) {
                    &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; o = objectStream.LoadObject(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;ref&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; guidLayer, &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt;);
                    &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;ILayer&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; layer = (&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;ILayer&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font color="#000000" size="2"&gt;)o;
                    esriDataObject.LayerCollection.Add(layer);
                }

                &lt;/font&gt;&lt;font size="2"&gt;&lt;span style="color: "&gt;&lt;font color="#008000"&gt;// Get Dropped TableProperties
&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;                &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;for&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; (&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt; i = 0; i &amp;lt; count; i++) {
                    &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; o = objectStream.LoadObject(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;ref&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; guidTable, &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt;);
                    &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; (o == &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;) { &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;continue&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt;; }
                    &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;ITableProperty&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; tableProperty = (&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;ITableProperty&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font size="2"&gt;&lt;font color="#000000"&gt;)o;
                   esriDataObject.TablePropertyCollection.Add(tableProperty);
                }
            }

            &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font color="#000000" size="2"&gt; esriDataObject;
        }
    }
}&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;Additional information:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Dragging and dropping objects from ArcCatalog is a lot easier than ArcMap. In ArcMap, a dragged object is packaged as an &amp;quot;ESRI Layer&amp;quot; object in the DataObject. The code above describes how to unpack an &amp;quot;ESRI Layer&amp;quot; object. In ArcCatalog, a dragged object is packaged as an &amp;quot;ESRI Names&amp;quot; object in the DataObject. Fortunately, there are ArcObjects available to pack and unpack this object.&lt;/p&gt;

&lt;p&gt;To create an &amp;quot;ESRI Names&amp;quot; object use the following:
  &lt;br /&gt;&lt;a href="http://edndoc.esri.com/arcobjects/9.2/ComponentHelp/esriSystem/INameFactory_PackageNames.htm"&gt;INameFactory.PackageNames Method&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To unpackage an &amp;quot;ESRI Names&amp;quot; object use:
  &lt;br /&gt;&lt;a href="http://edndoc.esri.com/arcobjects/9.2/ComponentHelp/esriSystem/INameFactory_UnpackageNames.htm"&gt;INameFactory.UnpackageNames Method&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lastly, here is an online example showing how to unpackage an &amp;quot;ESRI Names&amp;quot; object:
  &lt;br /&gt;&lt;a href="http://edndoc.esri.com/arcobjects/9.2/ComponentHelp/esriSystem/esriSystem_NameFactory_Example.htm"&gt;esriSystem NameFactory Example&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8656429443005102101-8621110584248209674?l=kiwigis.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/PaJS/~4/slEQo3ybuLM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://kiwigis.blogspot.com/feeds/8621110584248209674/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://kiwigis.blogspot.com/2011/07/how-to-create-drop-target-for-layers-in.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8656429443005102101/posts/default/8621110584248209674?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8656429443005102101/posts/default/8621110584248209674?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/PaJS/~3/slEQo3ybuLM/how-to-create-drop-target-for-layers-in.html" title="How to create a drop target for layers in ArcMap?" /><author><name>Richie</name><uri>http://www.blogger.com/profile/10195785521277646822</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="30" src="http://3.bp.blogspot.com/-7rc6j-Jfa4M/TXCb1G2wvrI/AAAAAAAABxg/Yp9ZiEl52tA/s220/photo2.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/-pqWG85X5Kxs/TjHezO3uXHI/AAAAAAAAB80/jW4-iZAvP0c/s72-c/image_thumb.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://kiwigis.blogspot.com/2011/07/how-to-create-drop-target-for-layers-in.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkIBSHszeSp7ImA9WhdSF00.&quot;"><id>tag:blogger.com,1999:blog-8656429443005102101.post-3254060492668971206</id><published>2011-07-26T11:14:00.001-07:00</published><updated>2011-07-26T11:22:39.581-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-26T11:22:39.581-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="WPF" /><category scheme="http://www.blogger.com/atom/ns#" term="RichTextBox" /><category scheme="http://www.blogger.com/atom/ns#" term="Hyperlink" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><title>Adding a WPF RichTextBox hyperlink at specific character positions?</title><content type="html">&lt;p&gt;&lt;a href="http://commons.wikimedia.org/wiki/File:Hyperlink-Wikipedia.png"&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" src="http://upload.wikimedia.org/wikipedia/commons/1/10/Hyperlink-Wikipedia.png" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Adding hyperlinks to a &lt;a href="http://windowsclient.net/wpf/"&gt;WPF&lt;/a&gt; &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.forms.richtextbox.aspx"&gt;RichTextBox&lt;/a&gt; can be achieved at design time in &lt;a href="http://msdn.microsoft.com/en-us/library/ms752059.aspx"&gt;XAML&lt;/a&gt; or programmatically at run time. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.documents.hyperlink.aspx"&gt;Hyperlinks&lt;/a&gt; are created programmatically via the hyperlink &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.documents.hyperlink.hyperlink.aspx"&gt;constructor&lt;/a&gt; by parsing either the start and end &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.documents.textpointer.aspx"&gt;TextPointers&lt;/a&gt; or &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.documents.inline.aspx"&gt;InLine&lt;/a&gt; objects. These constructors are not particularly developer friendly unless the developer is programmatically populating a RichTextBox’s &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.documents.flowdocument.aspx"&gt;FlowDocument&lt;/a&gt; from &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.documents.run(v=VS.100).aspx"&gt;Runs&lt;/a&gt; (see &lt;a href="http://msdn.microsoft.com/en-us/magazine/cc163371.aspx"&gt;here&lt;/a&gt;).&lt;/p&gt;  &lt;p&gt;In a recent project I need to add a hyperlink for text between predefined character index. For example, I needed a hyperlink for the text located between character positions 100 and 110.&amp;#160; The following &lt;a href="http://msdn.microsoft.com/en-us/library/bb383977.aspx"&gt;extension method&lt;/a&gt; enables this.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;RichTextBox extension:&lt;/strong&gt;&lt;/p&gt;  &lt;pre style="line-height: normal; font-family: ; background: white; color: "&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff" face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;namespace&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; ESRI.PrototypeLab.Sample {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;static&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;class&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Extensions&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; {&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;static&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Hyperlink&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; ToHyperlink(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;RichTextBox&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; rtb, &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; start, &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; end) {&lt;br /&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 style="color: "&gt;&lt;font color="#2b91af"&gt;TextPointer&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; p1 = rtb.ToTextPointer(start);&lt;br /&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 style="color: "&gt;&lt;font color="#2b91af"&gt;TextPointer&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; p2 = rtb.ToTextPointer(end);&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; (p1 == &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; || p2 == &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;) { &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;; }&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;Hyperlink&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;(p1, p2);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;static&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;TextPointer&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; ToTextPointer(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;RichTextBox&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; rtb, &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; index) {&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; count = 0;&lt;br /&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 style="color: "&gt;&lt;font color="#2b91af"&gt;TextPointer&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; position = rtb.Document.ContentStart;&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;while&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; (position != &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;) {&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; (position.GetPointerContext(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;LogicalDirection&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;.Forward) ==&lt;br /&gt;                    &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;TextPointerContext&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;.Text) {&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt; textRun = position.GetTextInRun(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;LogicalDirection&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;.Forward);&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; length = textRun.Length;&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; (count + length &amp;gt; index) {&lt;br /&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;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt; position.GetPositionAtOffset(index - count);&lt;br /&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;br /&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; count += length;&lt;br /&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;br /&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; position = position.GetNextContextPosition(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;LogicalDirection&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;font color="#000000"&gt;.Forward);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&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 style="color: "&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;&amp;#160;&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;}&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;How to use:&lt;/strong&gt;&lt;/p&gt;

&lt;pre style="line-height: normal; font-family: ; background: white; color: "&gt;&lt;font face="Consolas"&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;&lt;font style="font-size: 9.8pt"&gt;Hyperlink&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;font color="#000000"&gt; hyperlink = &lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;.RichTextBox.ToHyperlink(100, 110);&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;
&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;&lt;font style="font-size: 9.8pt"&gt;hyperlink.Click += (s, e) =&amp;gt; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/font&gt;&lt;/font&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;span style="color: "&gt;&lt;font color="#2b91af"&gt;MessageBox&lt;/font&gt;&lt;/span&gt;&lt;font color="#000000"&gt;.Show(&lt;/font&gt;&lt;span style="color: "&gt;&lt;font color="#a31515"&gt;&amp;quot;Hyperlink Clicked&amp;quot;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;font face="Consolas"&gt;&lt;font color="#000000"&gt;);&lt;br /&gt;&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;font face="Consolas"&gt;&lt;font style="font-size: 9.8pt"&gt;&lt;font color="#000000"&gt;};&lt;/font&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8656429443005102101-3254060492668971206?l=kiwigis.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/PaJS/~4/sgCo2RCQpiQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://kiwigis.blogspot.com/feeds/3254060492668971206/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://kiwigis.blogspot.com/2011/07/how-to-add-index-based-hyperlink-to-wpf.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8656429443005102101/posts/default/3254060492668971206?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8656429443005102101/posts/default/3254060492668971206?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/PaJS/~3/sgCo2RCQpiQ/how-to-add-index-based-hyperlink-to-wpf.html" title="Adding a WPF RichTextBox hyperlink at specific character positions?" /><author><name>Richie</name><uri>http://www.blogger.com/profile/10195785521277646822</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="30" src="http://3.bp.blogspot.com/-7rc6j-Jfa4M/TXCb1G2wvrI/AAAAAAAABxg/Yp9ZiEl52tA/s220/photo2.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://kiwigis.blogspot.com/2011/07/how-to-add-index-based-hyperlink-to-wpf.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUDQX87eip7ImA9WhdSEk8.&quot;"><id>tag:blogger.com,1999:blog-8656429443005102101.post-1223397499498038373</id><published>2011-07-20T17:54:00.001-07:00</published><updated>2011-07-20T22:47:50.102-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-20T22:47:50.102-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="iPhone" /><category scheme="http://www.blogger.com/atom/ns#" term="Mobile" /><category scheme="http://www.blogger.com/atom/ns#" term="Chrystal Ball" /><category scheme="http://www.blogger.com/atom/ns#" term="super app" /><title>The App Interoperability Conundrum</title><content type="html">&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/File:IPhone_4_in_hand.jpg"&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" alt="File:IPhone 4 in hand.jpg" src="http://upload.wikimedia.org/wikipedia/en/e/eb/IPhone_4_in_hand.jpg" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I would argue that &lt;a href="http://en.wikipedia.org/wiki/Mobile_computing"&gt;mobile computing&lt;/a&gt; began the early &lt;a href="http://en.wikipedia.org/wiki/20th_century"&gt;20&lt;/a&gt;&lt;sup&gt;th&lt;/sup&gt; century with the popularization of &lt;a href="http://en.wikipedia.org/wiki/Watch"&gt;wristwatches&lt;/a&gt;. The wristwatch, like its ancestral pocket watch, allowed people to know, at any moment, what time it was. Mobile computers advanced significantly in &lt;a href="http://en.wikipedia.org/wiki/2007"&gt;2007&lt;/a&gt; when &lt;a href="http://www.apple.com/"&gt;Apple&lt;/a&gt; introduced the &lt;a href="http://en.wikipedia.org/wiki/IPhone"&gt;iPhone&lt;/a&gt;. This device was not only a mobile communication device but it allowed people know, at any moment, where they are.&lt;/p&gt;  &lt;p&gt;But I don’t want to discuss the historical importance of the iPhone, rather the paradigm shift in &lt;a href="http://en.wikipedia.org/wiki/Software_design"&gt;application design&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;For the past twenty years or so, the &lt;a href="http://en.wikipedia.org/wiki/Personal_computer"&gt;personal computer&lt;/a&gt; (or PC) has dominated homes and offices throughout the world. The vast majority of PCs used some generation of &lt;a href="http://en.wikipedia.org/wiki/Microsoft"&gt;Microsoft&lt;/a&gt;’s &lt;a href="http://en.wikipedia.org/wiki/Windows"&gt;Windows&lt;/a&gt; &lt;a href="http://en.wikipedia.org/wiki/Operating_system"&gt;operating system&lt;/a&gt;. Regardless of the criticism that Microsoft stifled innovation, Windows users have enjoyed one unquestioned privilege, &lt;b&gt;interoperability&lt;/b&gt;.&lt;/p&gt;  &lt;p&gt;Quite unconsciously, a PC user can perform information exchange between applications using operations like &lt;a href="http://en.wikipedia.org/wiki/Cut,_copy,_and_paste"&gt;copy and paste&lt;/a&gt; or &lt;a href="http://en.wikipedia.org/wiki/Drag_and_drop"&gt;drag and drop&lt;/a&gt;. Not only can a user exchange information, like text or imagery, between applications like &lt;a href="http://en.wikipedia.org/wiki/Internet_Explorer"&gt;Internet Explorer&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Microsoft_Excel"&gt;Excel&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Microsoft_Word"&gt;Word&lt;/a&gt; but also with third party applications. This interoperability is available because of two factors:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;All Windows applications understand the same data and file types, and &lt;/li&gt;    &lt;li&gt;Windows provides a built-in framework that software developers can use to enable the inter-application exchange of information. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;It is without question that mobile devices will continue to proliferate in the consumer market with improvements in mobile infrastructure, device affordability and cultural acceptance. However I see an uneasy trend in mobile application, that is, mobile applications are becoming increasingly focused but less interoperability.&lt;/p&gt;  &lt;p&gt;To illustrate this point, consider the following hypothetical example. I am in downtown Los Angeles, I’m hungry and need nourishment from a reputable establishment. On my iPhone I can use:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;a href="http://www.google.com/mobile/iphone/"&gt;Google Maps&lt;/a&gt; to find a nearby restaurant, &lt;/li&gt;    &lt;li&gt;&lt;a href="http://itunes.apple.com/us/app/mapquest-4-mobile/id316126557?mt=8"&gt;MapQuest&lt;/a&gt; to get voice guided routing directions, &lt;/li&gt;    &lt;li&gt;Built-in camera to record my memorable meal, &lt;/li&gt;    &lt;li&gt;&lt;a href="http://itunes.apple.com/us/app/foursquare/id306934924?mt=8"&gt;FourSquare&lt;/a&gt; to “check-in” and recommend this restaurant to my friends, and &lt;/li&gt;    &lt;li&gt;&lt;a href="http://itunes.apple.com/us/app/yelp/id284910350?mt=8"&gt;Yelp&lt;/a&gt; to post a review (and snapshot) of my dining experience. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;In this workflow, the only interoperable elements were the street address I copied from (1) to (2) and the photo created in (3) and shared with (5).&lt;/p&gt;  &lt;p&gt;Obviously this workflow could be optimized by using one app to perform two or more tasks like using Google Map to a find a restaurant and driving directions. But these five apps, in my hypothetical opinion, were the best in each task.&lt;/p&gt;  &lt;p&gt;My criticism is not targeted at the number of app used during my lunch break but the lack of interoperability between them. For example:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;From Google Map, why is it not possible to send the restaurant address directly to my favorite routing apps? &lt;/li&gt;    &lt;li&gt;From the camera app, why is it not possible to share a photo directly with Yelp. &lt;/li&gt;    &lt;li&gt;From MapQuest, can I send the “route” to my friends so that they know where I am driving from? &lt;/li&gt;    &lt;li&gt;To rate (or “check-in” at) the restaurant with FourSquare and Yelp why did I have to locate the restaurant in each app? Why not just click the “get current establishment” button in each app? &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;These comments may seem like iPhone-bashing, but they are not. I am just bringing your attention the unintentional &lt;a href="http://en.wikipedia.org/wiki/Stovepiping"&gt;stovepiping&lt;/a&gt; caused by increasingly focused mobile apps.&lt;/p&gt;  &lt;p&gt;To paraphrase Apple’s advertising slogan, there may be an “app for that” but what is lacking is the “&lt;a href="http://en.wikipedia.org/wiki/List_of_Apple_Inc._slogans#iPhone"&gt;app to app&lt;/a&gt;” interoperability. Again this is not a criticism of Apple or other mobile device vendors, just a mere observation of the consumer-driven “app paradigm”.&lt;/p&gt;  &lt;p&gt;The &amp;quot;app paradigm” does have its advantages. Smaller focused apps with a handful of capabilities can be deployed quickly, updated frequently, serve niches and most importantly, be profitable. Many software developers have made a health living by serving the “&lt;a href="http://en.wikipedia.org/wiki/Long_Tail"&gt;long tail&lt;/a&gt;” with $0.99 apps.&lt;/p&gt;  &lt;p&gt;But I predict that there may be an equilibrium shift in near future in which, due to the lack of app cohesion, that devices will eventually be ruled by a handful of super-apps. The foremost, without doubt, is Google. Google may (or should?) consolidate their shopping, social networking, mapping, translation, book and search services into a single super-app.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8656429443005102101-1223397499498038373?l=kiwigis.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/PaJS/~4/1RMu_HqmtGY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://kiwigis.blogspot.com/feeds/1223397499498038373/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://kiwigis.blogspot.com/2011/07/app-interoperability-conundrum.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8656429443005102101/posts/default/1223397499498038373?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8656429443005102101/posts/default/1223397499498038373?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/PaJS/~3/1RMu_HqmtGY/app-interoperability-conundrum.html" title="The App Interoperability Conundrum" /><author><name>Richie</name><uri>http://www.blogger.com/profile/10195785521277646822</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="30" src="http://3.bp.blogspot.com/-7rc6j-Jfa4M/TXCb1G2wvrI/AAAAAAAABxg/Yp9ZiEl52tA/s220/photo2.JPG" /></author><thr:total>2</thr:total><feedburner:origLink>http://kiwigis.blogspot.com/2011/07/app-interoperability-conundrum.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0IGR309eip7ImA9WhZaFUk.&quot;"><id>tag:blogger.com,1999:blog-8656429443005102101.post-7337149671443622800</id><published>2011-06-30T17:36:00.001-07:00</published><updated>2011-07-01T10:32:06.362-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-01T10:32:06.362-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="3D" /><category scheme="http://www.blogger.com/atom/ns#" term="Balder" /><category scheme="http://www.blogger.com/atom/ns#" term="JigLibX" /><category scheme="http://www.blogger.com/atom/ns#" term="Silverlight 5" /><category scheme="http://www.blogger.com/atom/ns#" term="Silverlight" /><title>Modeling the Real World with Silverlight 5 3D</title><content type="html">&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:a796a8e9-2616-4b88-8688-c1211048b01e" class="wlWriterEditableSmartContent"&gt;&lt;div id="17d1dc65-c4f9-41ea-8189-6eeb787bdfd8" style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=nHx7be21Z38" target="_new"&gt;&lt;img src="http://lh5.ggpht.com/-KAoOKZJYnqU/Tg4EleW9-AI/AAAAAAAAB6E/KufhhFdY-Ts/video4b6bb166f321%25255B5%25255D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('17d1dc65-c4f9-41ea-8189-6eeb787bdfd8'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;448\&amp;quot; height=\&amp;quot;336\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/nHx7be21Z38?hl=en&amp;amp;hd=1\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/nHx7be21Z38?hl=en&amp;amp;hd=1\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;448\&amp;quot; height=\&amp;quot;336\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt=""&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;p&gt;Late last year &lt;a href="http://www.esri.com/"&gt;Esri&lt;/a&gt;’s &lt;a href="http://blogs.esri.com/Dev/blogs/apl/"&gt;Applications Prototype Lab&lt;/a&gt; published a Silverlight-based web application that could render a small area of the Earth’s surface in three dimensions. This &lt;a href="http://blogs.esri.com/Dev/blogs/apl/archive/2010/10/08/3D-Terrain-Mapping-in-a-Browser.aspx"&gt;app&lt;/a&gt; used &lt;a href="http://www.ingebrigtsen.info/"&gt;Einar Ingebrigtsen&lt;/a&gt;’s graphics library called &lt;a href="http://balder.codeplex.com"&gt;Balder&lt;/a&gt; and referenced imagery and elevation services from &lt;a href="http://www.arcgis.com"&gt;arcgis.com&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;This year at &lt;a href="http://live.visitmix.com/"&gt;MIX11&lt;/a&gt;, Microsoft released the beta of the &lt;a href="http://www.silverlight.net/getstarted/silverlight-5-beta/"&gt;Silverlight 5&lt;/a&gt;. Probably the most important improvement is the added support for &lt;a href="http://en.wikipedia.org/wiki/Graphics_processing_unit"&gt;GPU&lt;/a&gt; accelerated 3d graphics. This means Silverlight apps with 3d content will be rendered by a computer’s graphics card rather than dominating the &lt;a href="http://en.wikipedia.org/wiki/CPU"&gt;CPU&lt;/a&gt;. It is now conceptually possible to develop &lt;a href="http://www.google.com/earth/index.html"&gt;Google Earth&lt;/a&gt;-like applications using Silverlight 5 3d!&lt;/p&gt;  &lt;p&gt;Creating a &lt;a href="http://en.wikipedia.org/wiki/Virtual_globe"&gt;virtual globe&lt;/a&gt; is a rather daunting project. However, inspired by &lt;a href="http://www.andybeaulieu.com"&gt;Andy Beaulieu&lt;/a&gt;’s physics &lt;a href="http://3dphysics.codeplex.com/"&gt;sample&lt;/a&gt; and associated blog &lt;a href="http://www.andybeaulieu.com/Home/tabid/67/EntryID/216/Default.aspx"&gt;post&lt;/a&gt; I decided to explore the possibility of modeling real world data in a browser.&lt;/p&gt;  &lt;p&gt;Nicknamed “project alpha”, the prototype shown in the &lt;a href="http://www.youtube.com/watch?v=nHx7be21Z38"&gt;video&lt;/a&gt; above used the following pieces:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;strong&gt;Esri Silverlight SDK 2.2&lt;/strong&gt; (&lt;a href="http://help.arcgis.com/en/webapi/silverlight/"&gt;link&lt;/a&gt;)       &lt;br /&gt;&lt;em&gt;Mapping&lt;/em&gt; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Microsoft Silverlight 5 &lt;em&gt;beta&lt;/em&gt;&lt;/strong&gt; (&lt;a href="http://www.silverlight.net/getstarted/silverlight-5-beta/"&gt;link&lt;/a&gt;)       &lt;br /&gt;&lt;em&gt;RIA&lt;/em&gt; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Balder 0.8.8.9&lt;/strong&gt; (&lt;a href="http://balder.codeplex.com/"&gt;link&lt;/a&gt;)       &lt;br /&gt;&lt;em&gt;3D graphics engine&lt;/em&gt; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;JigLibX 0.3.1&lt;/strong&gt; (&lt;a href="http://jiglibx.codeplex.com/"&gt;link&lt;/a&gt;)       &lt;br /&gt;&lt;em&gt;3D physics engine&lt;/em&gt; &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Displaying a 3d world using streaming imagery and elevation data is not new. What is interesting about this prototype is the inclusion of a physics engine. Objects such as cars, people, tanks, planes can interact with each other and the Earth’s surface. Additionally, this prototypes shows that any location, and at any scale, can be modeled completely within a browser.&lt;/p&gt;  &lt;p&gt;Whilst dropping hundred of tennis balls on &lt;a href="http://en.wikipedia.org/wiki/Mount_Ruapehu"&gt;Mount Ruapehu&lt;/a&gt; might seem a little fanciful, there are many practical uses of combining a 3d physics engine with mapping data. For example, an engineer may want to test drive a proposed road to examine it drivability and view. In defense, this technology can be for &lt;a href="http://www.msco.mil/"&gt;modeling and simulation&lt;/a&gt; of the battlefield.&lt;/p&gt;  &lt;p&gt;Unless there is significant interest, the app and source code will be published once Silverlight 5 goes final.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8656429443005102101-7337149671443622800?l=kiwigis.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/PaJS/~4/5XRCbU-jj74" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://kiwigis.blogspot.com/feeds/7337149671443622800/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://kiwigis.blogspot.com/2011/06/modeling-real-world-with-silverlight-5.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8656429443005102101/posts/default/7337149671443622800?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8656429443005102101/posts/default/7337149671443622800?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/PaJS/~3/5XRCbU-jj74/modeling-real-world-with-silverlight-5.html" title="Modeling the Real World with Silverlight 5 3D" /><author><name>Richie</name><uri>http://www.blogger.com/profile/10195785521277646822</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="30" src="http://3.bp.blogspot.com/-7rc6j-Jfa4M/TXCb1G2wvrI/AAAAAAAABxg/Yp9ZiEl52tA/s220/photo2.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/-KAoOKZJYnqU/Tg4EleW9-AI/AAAAAAAAB6E/KufhhFdY-Ts/s72-c/video4b6bb166f321%25255B5%25255D.jpg?imgmax=800" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://kiwigis.blogspot.com/2011/06/modeling-real-world-with-silverlight-5.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkAARnkzeyp7ImA9WhZVEUQ.&quot;"><id>tag:blogger.com,1999:blog-8656429443005102101.post-5921257590779108575</id><published>2011-05-23T15:45:00.001-07:00</published><updated>2011-05-23T15:45:47.783-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-23T15:45:47.783-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Windows 7" /><category scheme="http://www.blogger.com/atom/ns#" term="Touch" /><category scheme="http://www.blogger.com/atom/ns#" term="ArcGIS API for Silverlight" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><category scheme="http://www.blogger.com/atom/ns#" term="Silverlight" /><title>Landsat Touch for Silverlight</title><content type="html">&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_1XJYn8xCcGk/TdrjmQD0ThI/AAAAAAAAB5A/JEb2TUvn4ko/s1600-h/clip_image002%5B7%5D.jpg"&gt;&lt;img style="display: inline" title="clip_image002" alt="clip_image002" src="http://lh3.ggpht.com/_1XJYn8xCcGk/TdrjmgHCC7I/AAAAAAAAB5E/3V5GYjhAwAM/clip_image002_thumb%5B4%5D.jpg?imgmax=800" width="500" height="421" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The Lab is proud to release &lt;a href="http://maps.esri.com/sldemos/landsat/default.html"&gt;Landsat Touch&lt;/a&gt;, a Silverlight based web application for browsing the newly published Landsat imagery.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Try the application here:&lt;/strong&gt;     &lt;br /&gt;&lt;a href="http://maps.esri.com/sldemos/landsat/default.html"&gt;http://maps.esri.com/sldemos/landsat/default.html&lt;/a&gt;     &lt;br /&gt;&lt;em&gt;(click the “need help” button in the lower left hand corner for usage tips)&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Download the source code from here:      &lt;br /&gt;&lt;/strong&gt;&lt;a href="http://www.arcgis.com/home/item.html?id=04de702976434f4d8c054005ce4603a2"&gt;http://www.arcgis.com/home/item.html?id=04de702976434f4d8c054005ce4603a2&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Earlier this year Esri &lt;a href="http://www.esri.com/news/arcnews/spring11articles/esri-introduces-landsat-data-for-the-world.html"&gt;announced&lt;/a&gt; the publication of more than 8TB of Landsat imagery as image services on ArcGIS Online. These &lt;a href="http://www.esri.com/landsat-imagery/image-services.html"&gt;services&lt;/a&gt; can be consumed by any ArcGIS client, the &lt;a href="http://www.esri.com/landsat-imagery/viewer.html"&gt;ChangeMatters&lt;/a&gt; viewer or by any custom app using the &lt;a href="http://imagery.arcgisonline.com/ArcGIS/rest/services/LandsatGLS"&gt;REST API&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Landsat Touch is a custom web application developed using the &lt;a href="http://help.arcgis.com/en/webapi/silverlight/index.html"&gt;ArcGIS API for Silverlight&lt;/a&gt;. The objective of this project was to create an easy to use application that could browse, compare and contrast Landsat content and provide support for touch devices (if available). The application is fully functional using a mouse on Windows or Mac computer, but the application is optimized for Windows 7 touch devices.&lt;/p&gt;  &lt;p&gt;Multi-touch behavior is provided using the &lt;a href="http://multitouch.codeplex.com/"&gt;Multi-Touch Manipulation&lt;/a&gt; library from CodePlex which is partially derived from Microsoft’s &lt;a href="http://www.microsoft.com/downloads/en/details.aspx?displaylang=en&amp;amp;FamilyID=4b281bde-9b01-4890-b3d4-b3b45ca2c2e4"&gt;Manipulation and Inertial&lt;/a&gt; sample.&lt;/p&gt;  &lt;p&gt;The ability for this application to compare two layers of content is conceptually similar to ArcMap’s &lt;a href="http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#/Interactively_reveal_rasters_using_the_Swipe_Layer_tool/009t00000099000000/"&gt;swipe layer tool&lt;/a&gt;. An important distinction with Landsat Touch is that users can explicitly define the “swiped” area by manipulating the size, orientation and location of windows. However the most exciting features demonstrated by this application is its ability to be multi-touch &lt;em&gt;and&lt;/em&gt; multi-user. On large touch devices, say 40”+ diagonally, it is conceivable that two or more users can simultaneously add and manipulate Landsat windows.&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:81a34cd6-162b-485b-975b-1d269abb9931" class="wlWriterEditableSmartContent"&gt;&lt;div id="581a9688-8fae-4f7c-8047-811056293063" style="margin: 0px; padding: 0px; display: inline;"&gt;&lt;div&gt;&lt;a href="http://www.youtube.com/watch?v=3ghQWsPKVeY" target="_new"&gt;&lt;img src="http://lh5.ggpht.com/_1XJYn8xCcGk/Tdrjm8evoKI/AAAAAAAAB5I/SIXCG4wMdrI/video2bc571cc4b89%5B8%5D.jpg?imgmax=800" style="border-style: none" galleryimg="no" onload="var downlevelDiv = document.getElementById('581a9688-8fae-4f7c-8047-811056293063'); downlevelDiv.innerHTML = &amp;quot;&amp;lt;div&amp;gt;&amp;lt;object width=\&amp;quot;448\&amp;quot; height=\&amp;quot;336\&amp;quot;&amp;gt;&amp;lt;param name=\&amp;quot;movie\&amp;quot; value=\&amp;quot;http://www.youtube.com/v/3ghQWsPKVeY?hl=en&amp;amp;hd=1\&amp;quot;&amp;gt;&amp;lt;\/param&amp;gt;&amp;lt;embed src=\&amp;quot;http://www.youtube.com/v/3ghQWsPKVeY?hl=en&amp;amp;hd=1\&amp;quot; type=\&amp;quot;application/x-shockwave-flash\&amp;quot; width=\&amp;quot;448\&amp;quot; height=\&amp;quot;336\&amp;quot;&amp;gt;&amp;lt;\/embed&amp;gt;&amp;lt;\/object&amp;gt;&amp;lt;\/div&amp;gt;&amp;quot;;" alt=""&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8656429443005102101-5921257590779108575?l=kiwigis.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/PaJS/~4/PusgS3RXTp4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://kiwigis.blogspot.com/feeds/5921257590779108575/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://kiwigis.blogspot.com/2011/05/landsat-touch-for-silverlight.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8656429443005102101/posts/default/5921257590779108575?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8656429443005102101/posts/default/5921257590779108575?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/PaJS/~3/PusgS3RXTp4/landsat-touch-for-silverlight.html" title="Landsat Touch for Silverlight" /><author><name>Richie</name><uri>http://www.blogger.com/profile/10195785521277646822</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="30" src="http://3.bp.blogspot.com/-7rc6j-Jfa4M/TXCb1G2wvrI/AAAAAAAABxg/Yp9ZiEl52tA/s220/photo2.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh3.ggpht.com/_1XJYn8xCcGk/TdrjmgHCC7I/AAAAAAAAB5E/3V5GYjhAwAM/s72-c/clip_image002_thumb%5B4%5D.jpg?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://kiwigis.blogspot.com/2011/05/landsat-touch-for-silverlight.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkAHQXcyeCp7ImA9WhZQGUk.&quot;"><id>tag:blogger.com,1999:blog-8656429443005102101.post-6272417006966926489</id><published>2011-04-27T16:58:00.001-07:00</published><updated>2011-04-27T16:58:50.990-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-04-27T16:58:50.990-07:00</app:edited><title>Geochat for Silverlight</title><content type="html">&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_1XJYn8xCcGk/TbituJgWm0I/AAAAAAAABzM/boXV_flckmk/s1600-h/image%5B3%5D.png"&gt;&lt;img style="display: inline" title="image" alt="image" src="http://lh6.ggpht.com/_1XJYn8xCcGk/Tbituh6DYGI/AAAAAAAABzQ/G2p8hZHW1VU/image_thumb%5B1%5D.png?imgmax=800" width="500" height="400" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;a href="http://maps.esri.com/sldemos/geochat/default.html"&gt;Geochat for Silverlight&lt;/a&gt; is a browser-to-browser geo-collaboration sample. Graphics drawn in browser’s map can be immediately pushed to all other browsers on the internet. The web application uses Microsoft’s implementation of &lt;a href="http://en.wikipedia.org/wiki/Comet_(programming)"&gt;Comet&lt;/a&gt;, a model using long lived HTTP requests to simulate server to client communication without the overhead of polling.&lt;/p&gt;  &lt;p&gt;Geochat is implemented in two parts.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;strong&gt;Server-side&lt;/strong&gt;       &lt;br /&gt;A &lt;a href="http://msdn.microsoft.com/en-us/netframework/aa663324.aspx"&gt;Windows Communication Foundation&lt;/a&gt; (WCF) duplex service is created to maintain a connection to Silverlight clients.&amp;#160; The geochat implementation acts as broker between Silverlight clients by forwarding messages to individual (or all) clients.       &lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/cc645027(VS.95).aspx"&gt;http://msdn.microsoft.com/en-us/library/cc645027(VS.95).aspx&lt;/a&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Client-side&lt;/strong&gt;       &lt;br /&gt;The Silverlight client is using &lt;a href="http://msdn.microsoft.com/en-us/library/system.servicemodel.pollingduplexhttpbinding(VS.95).aspx"&gt;PollingDuplexHttpBinding&lt;/a&gt; to maintain a connection with the server using AJAX polling.&amp;#160; The polling occurs every five seconds.       &lt;br /&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/cc645028(VS.95).aspx"&gt;http://msdn.microsoft.com/en-us/library/cc645028(VS.95).aspx&lt;/a&gt;&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Click &lt;a href="http://maps.esri.com/sldemos/geochat/default.html"&gt;here&lt;/a&gt; to experiment with a live sample. Complete source code for this app is available &lt;a href="http://www.arcgis.com/home/item.html?id=7a71e4a19a514db7b7fc71cf4ed6d6ef"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8656429443005102101-6272417006966926489?l=kiwigis.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/PaJS/~4/OlvuuZFl20s" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://kiwigis.blogspot.com/feeds/6272417006966926489/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://kiwigis.blogspot.com/2011/04/geochat-for-silverlight.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8656429443005102101/posts/default/6272417006966926489?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8656429443005102101/posts/default/6272417006966926489?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/PaJS/~3/OlvuuZFl20s/geochat-for-silverlight.html" title="Geochat for Silverlight" /><author><name>Richie</name><uri>http://www.blogger.com/profile/10195785521277646822</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="30" src="http://3.bp.blogspot.com/-7rc6j-Jfa4M/TXCb1G2wvrI/AAAAAAAABxg/Yp9ZiEl52tA/s220/photo2.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_1XJYn8xCcGk/Tbituh6DYGI/AAAAAAAABzQ/G2p8hZHW1VU/s72-c/image_thumb%5B1%5D.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://kiwigis.blogspot.com/2011/04/geochat-for-silverlight.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0UERXoyeip7ImA9WhZVEUQ.&quot;"><id>tag:blogger.com,1999:blog-8656429443005102101.post-3429705185360437421</id><published>2011-03-28T15:09:00.001-07:00</published><updated>2011-05-23T15:53:24.492-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-05-23T15:53:24.492-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><category scheme="http://www.blogger.com/atom/ns#" term="invariant culture" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><title>How to be culturally sensitive with numbers!</title><content type="html">&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Ernest_Rutherford"&gt;&lt;img src="http://upload.wikimedia.org/wikipedia/commons/thumb/5/5c/Ernest_Rutherford_cropped.jpg/200px-Ernest_Rutherford_cropped.jpg" /&gt;&lt;/a&gt;     &lt;br /&gt;&lt;em&gt;&lt;font size="2"&gt;Earnest Rutherford from &lt;/font&gt;&lt;/em&gt;&lt;a href="http://en.wikipedia.org/wiki/Ernest_Rutherford"&gt;&lt;em&gt;&lt;font size="2"&gt;Wikipedia&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&lt;font size="2"&gt;. Image &lt;/font&gt;&lt;/em&gt;&lt;a href="http://en.wikipedia.org/wiki/File:Ernest_Rutherford_cropped.jpg"&gt;&lt;em&gt;&lt;font size="2"&gt;credits&lt;/font&gt;&lt;/em&gt;&lt;/a&gt;&lt;em&gt;&lt;font size="2"&gt;.&lt;/font&gt;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;As a developer, it is important to be culturally conscientious, specifically when it comes to the formatting and parsing of dates and numbers. A fact which I obviously overlooked recently when a user noticed some map coordinates that were displayed many orders of magnitude larger than they should have been. In this post I would like to present the issue encountered and how to resolve it.&lt;/p&gt;  &lt;p&gt;Here is the scenario. A third party service returns a map coordinate in decimal degrees as a string. For clarity, this is represented by the following constant.&lt;/p&gt;  &lt;pre style="font-family: consolas; background: white; color: black; font-size: 13px"&gt;&lt;span style="color: blue"&gt;const&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;string&lt;/span&gt; COORDINATE = &lt;span style="color: #a31515"&gt;&amp;quot;-117.182&amp;quot;&lt;/span&gt;;&lt;br /&gt;&lt;/pre&gt;

&lt;p&gt;And the goal is to convert this string representation to number and assigned it to the following variable.&lt;/p&gt;

&lt;pre style="font-family: consolas; background: white; color: black; font-size: 13px"&gt;&lt;span style="color: blue"&gt;double&lt;/span&gt; longitude;&lt;br /&gt;&lt;/pre&gt;

&lt;p&gt;This number’s format and my computer’s locale are both set to English (United States) or “en-US”. This means that “-117.182” is easily converted to a double as shown below.&lt;/p&gt;

&lt;pre style="font-family: consolas; background: white; color: black; font-size: 13px"&gt;&lt;span style="color: blue"&gt;double&lt;/span&gt;.TryParse(&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; COORDINATE,&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;out&lt;/span&gt; longitude);&lt;br /&gt;&lt;span style="color: #2b91af"&gt;MessageBox&lt;/span&gt;.Show(longitude.ToString());&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_1XJYn8xCcGk/TZEHEjrF8wI/AAAAAAAABys/Ii6Pu4puGBc/s1600-h/image%5B5%5D.png"&gt;&lt;img style="display: inline" title="image" alt="image" src="http://lh5.ggpht.com/_1XJYn8xCcGk/TZEHEwSIp9I/AAAAAAAAByw/LvQRvFnBVOA/image_thumb%5B1%5D.png?imgmax=800" width="179" height="179" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Under-the-hood, the .NET framework is using the computer’s current locale to guide the number conversion and subsequent display. So, the &lt;a href="http://msdn.microsoft.com/en-us/library/system.double.tryparse.aspx"&gt;TryParse&lt;/a&gt; above is actually identical to the following:&lt;/p&gt;

&lt;pre style="font-family: consolas; background: white; color: black; font-size: 13px"&gt;&lt;span style="color: blue"&gt;double&lt;/span&gt;.TryParse(&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; COORDINATE,&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; NumberStyles.Float | NumberStyles.AllowThousands,&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;new&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;CultureInfo&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;en-US&amp;quot;&lt;/span&gt;),&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;out&lt;/span&gt; longitude);&lt;br /&gt;&lt;span style="color: #2b91af"&gt;MessageBox&lt;/span&gt;.Show(longitude.ToString(&lt;span style="color: blue"&gt;new&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;CultureInfo&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;en-US&amp;quot;&lt;/span&gt;)));&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_1XJYn8xCcGk/TZEHFakC6xI/AAAAAAAABy0/Y9ljNtA_IhM/s1600-h/image%5B8%5D.png"&gt;&lt;img style="display: inline" title="image" alt="image" src="http://lh4.ggpht.com/_1XJYn8xCcGk/TZEHFw6TbgI/AAAAAAAABy4/hKykQTjiO94/image_thumb%5B2%5D.png?imgmax=800" width="180" height="184" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Now, problems occur when a number formatted using “en-US” is parsed on a computer set to a different locale such as Spanish (or “es-ES”).&lt;/p&gt;

&lt;pre style="font-family: consolas; background: white; color: black; font-size: 13px"&gt;&lt;span style="color: blue"&gt;double&lt;/span&gt;.TryParse(&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; COORDINATE,&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; NumberStyles.Float | NumberStyles.AllowThousands,&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;new&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;CultureInfo&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;es-ES&amp;quot;&lt;/span&gt;),&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;out&lt;/span&gt; longitude);&lt;br /&gt;&lt;span style="color: #2b91af"&gt;MessageBox&lt;/span&gt;.Show(longitude.ToString(&lt;span style="color: blue"&gt;new&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;CultureInfo&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;es-ES&amp;quot;&lt;/span&gt;)));&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_1XJYn8xCcGk/TZEHGOaokhI/AAAAAAAABy8/NMtU1R0S39M/s1600-h/image%5B11%5D.png"&gt;&lt;img style="display: inline" title="image" alt="image" src="http://lh3.ggpht.com/_1XJYn8xCcGk/TZEHGldj4EI/AAAAAAAABzA/Wz-3FMPO2Gg/image_thumb%5B3%5D.png?imgmax=800" width="180" height="183" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;In Spain, the convention is to use a “.” as a thousand delimiter rather than a decimal marker as in the US. This results in the number being one thousand times larger than it should be (or originally intended to be).&lt;/p&gt;

&lt;p&gt;We cannot change the third party service but the solution is to explicitly convert the string to a number using the “en-US” or the more generic &lt;a href="http://msdn.microsoft.com/en-us/library/system.globalization.cultureinfo.invariantculture.aspx"&gt;invariant culture&lt;/a&gt; formatter.&lt;/p&gt;

&lt;pre style="font-family: consolas; background: white; color: black; font-size: 13px"&gt;&lt;span style="color: blue"&gt;double&lt;/span&gt;.TryParse(&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; COORDINATE,&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; NumberStyles.Float | NumberStyles.AllowThousands,&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;CultureInfo&lt;/span&gt;.InvariantCulture,&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;out&lt;/span&gt; longitude);&lt;br /&gt;&lt;span style="color: #2b91af"&gt;MessageBox&lt;/span&gt;.Show(longitude.ToString(&lt;span style="color: blue"&gt;new&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;CultureInfo&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;es-ES&amp;quot;&lt;/span&gt;)));&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://lh3.ggpht.com/_1XJYn8xCcGk/TZEHHC3tPYI/AAAAAAAABzE/90MYLxUk8AI/s1600-h/image%5B14%5D.png"&gt;&lt;img style="display: inline" title="image" alt="image" src="http://lh6.ggpht.com/_1XJYn8xCcGk/TZEHHcBLvwI/AAAAAAAABzI/GoxTRV0VTrQ/image_thumb%5B4%5D.png?imgmax=800" width="179" height="184" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Now that the string is correctly parsed as a double it can be re-displayed using the current (or any other) locale.&lt;/p&gt;

&lt;h4&gt;In summary:&lt;/h4&gt;

&lt;ol&gt;
  &lt;li&gt;Whenever possible serialize dates and numbers to strings using the invariant culture, and &lt;/li&gt;

  &lt;li&gt;Never assume that dates and numbers are serialized with the current locale. &lt;/li&gt;
&lt;/ol&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8656429443005102101-3429705185360437421?l=kiwigis.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/PaJS/~4/U73-euo70OY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://kiwigis.blogspot.com/feeds/3429705185360437421/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://kiwigis.blogspot.com/2011/03/how-to-culturally-sensitive-with.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8656429443005102101/posts/default/3429705185360437421?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8656429443005102101/posts/default/3429705185360437421?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/PaJS/~3/U73-euo70OY/how-to-culturally-sensitive-with.html" title="How to be culturally sensitive with numbers!" /><author><name>Richie</name><uri>http://www.blogger.com/profile/10195785521277646822</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="30" src="http://3.bp.blogspot.com/-7rc6j-Jfa4M/TXCb1G2wvrI/AAAAAAAABxg/Yp9ZiEl52tA/s220/photo2.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/_1XJYn8xCcGk/TZEHEwSIp9I/AAAAAAAAByw/LvQRvFnBVOA/s72-c/image_thumb%5B1%5D.png?imgmax=800" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://kiwigis.blogspot.com/2011/03/how-to-culturally-sensitive-with.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEcHQHo9fip7ImA9WhZTF0g.&quot;"><id>tag:blogger.com,1999:blog-8656429443005102101.post-8551252489286425093</id><published>2011-03-21T18:06:00.001-07:00</published><updated>2011-03-21T18:07:11.466-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-21T18:07:11.466-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Anonymous Method" /><category scheme="http://www.blogger.com/atom/ns#" term=".NET 4.0" /><category scheme="http://www.blogger.com/atom/ns#" term="Sort" /><category scheme="http://www.blogger.com/atom/ns#" term="IComparable" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><category scheme="http://www.blogger.com/atom/ns#" term="Linq" /><title>How to sort List&lt;T&gt; using an Anonymous Method</title><content type="html">&lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Gottfried_Leibniz"&gt;&lt;img src="http://upload.wikimedia.org/wikipedia/commons/6/6a/Gottfried_Wilhelm_von_Leibniz.jpg" width="190" height="240" /&gt;&lt;/a&gt;    &lt;br /&gt;&lt;font size="1"&gt;Gottfried Wilhem &lt;/font&gt;&lt;a href="http://en.wikipedia.org/wiki/Gottfried_Leibniz"&gt;&lt;font size="1"&gt;Leibniz&lt;/font&gt;&lt;/a&gt;&lt;font size="1"&gt; (from &lt;/font&gt;&lt;a href="http://en.wikipedia.org/wiki/File:Gottfried_Wilhelm_von_Leibniz.jpg"&gt;&lt;font size="1"&gt;wikipedia&lt;/font&gt;&lt;/a&gt;&lt;font size="1"&gt;)&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;This post illustrates how to use an &lt;a href="http://msdn.microsoft.com/en-us/library/0yw3tz5k(v=VS.100).aspx"&gt;anonymous method&lt;/a&gt; to perform “in line” sorting of a &lt;a href="http://msdn.microsoft.com/en-us/library/6sh2ey19(v=VS.100).aspx"&gt;generic list&lt;/a&gt;. Let’s start with the definition of a “person” object.&lt;/p&gt;  &lt;pre style="font-family: consolas; background: white; color: black; font-size: 13px"&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;class&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;Person&lt;/span&gt;&amp;#160; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;string&lt;/span&gt; FirstName { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;string&lt;/span&gt; LastName { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;}&lt;/pre&gt;

&lt;p&gt;And in our project we have created a generic list of “person” objects called “people”. The following code create the &lt;em&gt;people&lt;/em&gt; variable and populates it with well known physicists.&lt;/p&gt;

&lt;pre style="font-family: consolas; background: white; color: black; font-size: 13px"&gt;&lt;span style="color: green"&gt;// Create a list of people&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Person&lt;/span&gt;&amp;gt; people = &lt;span style="color: blue"&gt;new&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Person&lt;/span&gt;&amp;gt;();&lt;br /&gt;people.Add(&lt;span style="color: blue"&gt;new&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;Person&lt;/span&gt;() { FirstName = &lt;span style="color: #a31515"&gt;&amp;quot;Gottfried&amp;quot;&lt;/span&gt;, LastName = &lt;span style="color: #a31515"&gt;&amp;quot;Leibniz&amp;quot;&lt;/span&gt; });&lt;br /&gt;people.Add(&lt;span style="color: blue"&gt;new&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;Person&lt;/span&gt;() { FirstName = &lt;span style="color: #a31515"&gt;&amp;quot;Marie&amp;quot;&lt;/span&gt;, LastName = &lt;span style="color: #a31515"&gt;&amp;quot;Curry&amp;quot;&lt;/span&gt; });&lt;br /&gt;people.Add(&lt;span style="color: blue"&gt;new&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;Person&lt;/span&gt;() { FirstName = &lt;span style="color: #a31515"&gt;&amp;quot;Albert&amp;quot;&lt;/span&gt;, LastName = &lt;span style="color: #a31515"&gt;&amp;quot;Einsten&amp;quot;&lt;/span&gt; });&lt;br /&gt;people.Add(&lt;span style="color: blue"&gt;new&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;Person&lt;/span&gt;() { FirstName = &lt;span style="color: #a31515"&gt;&amp;quot;Isaac&amp;quot;&lt;/span&gt;, LastName = &lt;span style="color: #a31515"&gt;&amp;quot;Newton&amp;quot;&lt;/span&gt; });&lt;br /&gt;people.Add(&lt;span style="color: blue"&gt;new&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;Person&lt;/span&gt;() { FirstName = &lt;span style="color: #a31515"&gt;&amp;quot;Niels&amp;quot;&lt;/span&gt;, LastName = &lt;span style="color: #a31515"&gt;&amp;quot;Bohr&amp;quot;&lt;/span&gt; });&lt;/pre&gt;

&lt;p&gt;Next, let’s display the “before” list in a popup. This code uses a &lt;a href="http://msdn.microsoft.com/en-us/library/bb397687.aspx"&gt;lambda expression&lt;/a&gt; in a &lt;a href="http://msdn.microsoft.com/en-us/netframework/aa904594"&gt;LINQ&lt;/a&gt; expression to concatenate the names of our favorite &lt;a href="http://en.wikipedia.org/wiki/Physicist"&gt;physicists&lt;/a&gt;.&lt;/p&gt;

&lt;pre style="font-family: consolas; background: white; color: black; font-size: 13px"&gt;&lt;span style="color: green"&gt;// Display &amp;quot;before&amp;quot; list of people&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt; before = &lt;span style="color: blue"&gt;string&lt;/span&gt;.Empty;&lt;br /&gt;people.ForEach(&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;new&lt;/span&gt; Action&amp;lt;&lt;span style="color: #2b91af"&gt;Person&lt;/span&gt;&amp;gt;(&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; p =&amp;gt; before += &lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;br /&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: #a31515"&gt;&amp;quot;{0} {1} {2}&amp;quot;&lt;/span&gt;,&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; p.FirstName,&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; p.LastName,&lt;br /&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: #2b91af"&gt;Environment&lt;/span&gt;.NewLine&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; )&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; )&lt;br /&gt;);&lt;br /&gt;&lt;span style="color: #2b91af"&gt;MessageBox&lt;/span&gt;.Show(before);&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_1XJYn8xCcGk/TYf2DmjXu9I/AAAAAAAAByc/SFSnwhfTyq0/s1600-h/image%5B2%5D.png"&gt;&lt;img style="display: inline" title="image" alt="image" src="http://lh5.ggpht.com/_1XJYn8xCcGk/TYf2DxYWDrI/AAAAAAAAByg/xPcgZI17H8U/image_thumb.png?imgmax=800" width="184" height="250" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Now, let’s sort the list of physicists based on their first name. This code block associates an anonymous method to the List’s &lt;a href="http://msdn.microsoft.com/en-us/library/w56d4y5z.aspx"&gt;Sort&lt;/a&gt; method.&lt;/p&gt;

&lt;pre style="font-family: consolas; background: white; color: black; font-size: 13px"&gt;&lt;span style="color: green"&gt;// Sort on *FirstName*&lt;/span&gt;&lt;br /&gt;people.Sort(&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;delegate&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;Person&lt;/span&gt; x, &lt;span style="color: #2b91af"&gt;Person&lt;/span&gt; y) {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;if&lt;/span&gt; (x == &lt;span style="color: blue"&gt;null&lt;/span&gt;) {&lt;br /&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;if&lt;/span&gt; (y == &lt;span style="color: blue"&gt;null&lt;/span&gt;) { &lt;span style="color: blue"&gt;return&lt;/span&gt; 0; }&lt;br /&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;return&lt;/span&gt; -1;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;if&lt;/span&gt; (y == &lt;span style="color: blue"&gt;null&lt;/span&gt;) { &lt;span style="color: blue"&gt;return&lt;/span&gt; 0; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;return&lt;/span&gt; x.FirstName.CompareTo(y.FirstName);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;);&lt;/pre&gt;

&lt;p&gt;To verify that the code worked…&lt;/p&gt;

&lt;pre style="font-family: consolas; background: white; color: black; font-size: 13px"&gt;&lt;span style="color: green"&gt;// Display &amp;quot;after&amp;quot; list of people&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue"&gt;string&lt;/span&gt; after = &lt;span style="color: blue"&gt;string&lt;/span&gt;.Empty;&lt;br /&gt;people.ForEach(&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;new&lt;/span&gt; Action&amp;lt;&lt;span style="color: #2b91af"&gt;Person&lt;/span&gt;&amp;gt;(&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; p =&amp;gt; after += &lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;br /&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: #a31515"&gt;&amp;quot;{0} {1} {2}&amp;quot;&lt;/span&gt;,&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; p.FirstName,&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; p.LastName,&lt;br /&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: #2b91af"&gt;Environment&lt;/span&gt;.NewLine&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; )&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; )&lt;br /&gt;);&lt;br /&gt;&lt;span style="color: #2b91af"&gt;MessageBox&lt;/span&gt;.Show(after);&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_1XJYn8xCcGk/TYf2EcxQcyI/AAAAAAAAByk/YE24h8heBO4/s1600-h/image%5B5%5D.png"&gt;&lt;img style="display: inline" title="image" alt="image" src="http://lh6.ggpht.com/_1XJYn8xCcGk/TYf2EsZ8d0I/AAAAAAAAByo/vocd4kmEzoA/image_thumb%5B1%5D.png?imgmax=800" width="181" height="242" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;This technique offers a number of advantages, namely:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;No need to create a separate static method,&lt;/li&gt;

  &lt;li&gt;Source types (eg “person”) do not need to support &lt;a href="http://msdn.microsoft.com/en-us/library/system.icomparable.aspx"&gt;IComparable&lt;/a&gt;,&lt;/li&gt;

  &lt;li&gt;It binds sorting logic tightly with the sorting method.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One possible disadvantage is that it may result is code duplication. For example, if “sort by first name” is frequently used it may be prudent to add this code as a static method as shown below.&lt;/p&gt;

&lt;pre style="font-family: consolas; background: white; color: black; font-size: 13px"&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;class&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;Person&lt;/span&gt;&amp;#160; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;string&lt;/span&gt; FirstName { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;string&lt;/span&gt; LastName { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;static&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;int&lt;/span&gt; SortByFirstName(&lt;span style="color: #2b91af"&gt;Person&lt;/span&gt; x, &lt;span style="color: #2b91af"&gt;Person&lt;/span&gt; y){&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;if&lt;/span&gt; (x == &lt;span style="color: blue"&gt;null&lt;/span&gt;) {&lt;br /&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;if&lt;/span&gt; (y == &lt;span style="color: blue"&gt;null&lt;/span&gt;) { &lt;span style="color: blue"&gt;return&lt;/span&gt; 0; }&lt;br /&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;return&lt;/span&gt; -1;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;if&lt;/span&gt; (y == &lt;span style="color: blue"&gt;null&lt;/span&gt;) { &lt;span style="color: blue"&gt;return&lt;/span&gt; 0; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;return&lt;/span&gt; x.FirstName.CompareTo(y.FirstName);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;}&lt;/pre&gt;

&lt;p&gt;This static method would then be referenced as shown below.&lt;/p&gt;

&lt;pre style="font-family: consolas; background: white; color: black; font-size: 13px"&gt;&lt;span style="color: green"&gt;// Sort on *FirstName*&lt;/span&gt;&lt;br /&gt;people.Sort(&lt;span style="color: #2b91af"&gt;Person&lt;/span&gt;.SortFirstName);&lt;/pre&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8656429443005102101-8551252489286425093?l=kiwigis.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/PaJS/~4/lSS6LsE2vFI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://kiwigis.blogspot.com/feeds/8551252489286425093/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://kiwigis.blogspot.com/2011/03/how-to-sort-list-using-anonymous-method.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8656429443005102101/posts/default/8551252489286425093?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8656429443005102101/posts/default/8551252489286425093?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/PaJS/~3/lSS6LsE2vFI/how-to-sort-list-using-anonymous-method.html" title="How to sort List&amp;lt;T&amp;gt; using an Anonymous Method" /><author><name>Richie</name><uri>http://www.blogger.com/profile/10195785521277646822</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="30" src="http://3.bp.blogspot.com/-7rc6j-Jfa4M/TXCb1G2wvrI/AAAAAAAABxg/Yp9ZiEl52tA/s220/photo2.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/_1XJYn8xCcGk/TYf2DxYWDrI/AAAAAAAAByg/xPcgZI17H8U/s72-c/image_thumb.png?imgmax=800" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://kiwigis.blogspot.com/2011/03/how-to-sort-list-using-anonymous-method.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkEGQ3g9fyp7ImA9WhZTFEQ.&quot;"><id>tag:blogger.com,1999:blog-8656429443005102101.post-5038786916183115038</id><published>2011-03-18T16:23:00.001-07:00</published><updated>2011-03-18T16:23:42.667-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-18T16:23:42.667-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Bing" /><category scheme="http://www.blogger.com/atom/ns#" term="WPF" /><category scheme="http://www.blogger.com/atom/ns#" term=".NET 4.0" /><category scheme="http://www.blogger.com/atom/ns#" term="Internet Search" /><title>Bing Web Search in C#</title><content type="html">&lt;p&gt;&lt;a href="http://lh4.ggpht.com/_1XJYn8xCcGk/TYPpelca16I/AAAAAAAAByU/uVU5tDM2pos/s1600-h/image%5B4%5D.png"&gt;&lt;img style="display: block; float: none; margin-left: auto; margin-right: auto" title="image" alt="image" src="http://lh5.ggpht.com/_1XJYn8xCcGk/TYPpfFw9ElI/AAAAAAAAByY/TYBi_cowIK4/image_thumb%5B2%5D.png?imgmax=800" width="500" height="274" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This blog post contains a C# wrapper of the &lt;a href="http://msdn.microsoft.com/en-us/library/dd251056.aspx"&gt;Bing API&lt;/a&gt; (Microsoft’s internet search engine). In my previous post I presented a similar wrapper for Google’s &lt;a href="https://code.google.com/apis/customsearch/v1/overview.html"&gt;Custom Search API&lt;/a&gt;, successor to the &lt;a href="http://code.google.com/apis/websearch/"&gt;Web Search API&lt;/a&gt;.&amp;#160; I was frankly less than impressed with Google custom search API as it appears to be engineered to favor specific themes and/or domains.&lt;/p&gt;  &lt;p&gt;To use use this code below you must first create a Live ID and request an App ID.&amp;#160; This &lt;a href="http://msdn.microsoft.com/en-us/library/dd251020.aspx"&gt;page&lt;/a&gt; provided more details.&lt;/p&gt;  &lt;p&gt;How to use:&lt;/p&gt;  &lt;p&gt;If you have a .NET 4.0 WPF application, like this:&lt;/p&gt;  &lt;pre style="font-family: consolas; background: white; color: black; font-size: 13px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Window&lt;/span&gt;&lt;span style="color: red"&gt; x&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Class&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;WpfApplication6.MainWindow&amp;quot;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: red"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: red"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;x&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: red"&gt; Title&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;MainWindow&amp;quot;&lt;/span&gt;&lt;span style="color: red"&gt; Height&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;350&amp;quot;&lt;/span&gt;&lt;span style="color: red"&gt; Width&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;525&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Grid&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;DataGrid&lt;/span&gt;&lt;span style="color: red"&gt; x&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;myDataGrid&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Grid&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Window&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;

&lt;p&gt;Then all you need to do to populate the window with internet search results about &lt;a href="http://en.wikipedia.org/wiki/Albert_Einstein"&gt;Albert Einstein&lt;/a&gt; is to called the asynchronous search method on &lt;span style="color: #2b91af"&gt;BingSearch&lt;/span&gt; .&lt;/p&gt;

&lt;pre style="font-family: consolas; background: white; color: black; font-size: 13px"&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;partial&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;class&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;MainWindow&lt;/span&gt; : &lt;span style="color: #2b91af"&gt;Window&lt;/span&gt; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt; MainWindow() {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; InitializeComponent();&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;this&lt;/span&gt;.Loaded += (s, e) =&amp;gt; {&lt;br /&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: #2b91af"&gt;BingSearch&lt;/span&gt; search = &lt;span style="color: blue"&gt;new&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;BingSearch&lt;/span&gt;() {&lt;br /&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; AppId = &lt;span style="color: #a31515"&gt;&amp;quot;&amp;lt;Your App ID&amp;gt;&amp;quot;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; };&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; search.SearchCompleted += (a, b) =&amp;gt; {&lt;br /&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;this&lt;/span&gt;.myDataGrid.ItemsSource = b.Response.Web.Results;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; };&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; search.SearchAsync(&lt;span style="color: #a31515"&gt;&amp;quot;Albert Einstein&amp;quot;&lt;/span&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;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; };&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;}&lt;/pre&gt;

&lt;p&gt;Below is the source code to &lt;span style="color: #2b91af"&gt;BingSearch&lt;/span&gt;, a class that provides both a synchronous and an asynchronous method to search the internet using Bing.&lt;/p&gt;

&lt;pre style="font-family: consolas; background: white; color: black; font-size: 13px"&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;class&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;BingSearch&lt;/span&gt; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt; BingSearch() {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;this&lt;/span&gt;.Count = 50;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;this&lt;/span&gt;.Offset = 0;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;this&lt;/span&gt;.Sources = &lt;span style="color: #a31515"&gt;&amp;quot;Web&amp;quot;&lt;/span&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;this&lt;/span&gt;.Adult = &lt;span style="color: #2b91af"&gt;BingSafeLevel&lt;/span&gt;.Moderate;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;this&lt;/span&gt;.Options = &lt;span style="color: #a31515"&gt;&amp;quot;DisableLocationDetection&amp;quot;&lt;/span&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;this&lt;/span&gt;.WebOptions = &lt;span style="color: #a31515"&gt;&amp;quot;DisableHostCollapsing+DisableQueryAlterations&amp;quot;&lt;/span&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;// PROPERTIES&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;string&lt;/span&gt; AppId { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;string&lt;/span&gt; Sources { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;int&lt;/span&gt; Count { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;int&lt;/span&gt; Offset { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;BingSafeLevel&lt;/span&gt; Adult { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;string&lt;/span&gt; Options { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;string&lt;/span&gt; WebOptions { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;// EVENTS&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;event&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;EventHandler&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;BingSearchEventArgs&lt;/span&gt;&amp;gt; SearchCompleted;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;// METHODs&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;protected&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;void&lt;/span&gt; OnSearchCompleted(&lt;span style="color: #2b91af"&gt;BingSearchEventArgs&lt;/span&gt; e) {&lt;br /&gt;&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: blue"&gt;this&lt;/span&gt;.SearchCompleted != &lt;span style="color: blue"&gt;null&lt;/span&gt;) {&lt;br /&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;this&lt;/span&gt;.SearchCompleted(&lt;span style="color: blue"&gt;this&lt;/span&gt;, e);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;BingSearchResponse&lt;/span&gt; Search(&lt;span style="color: blue"&gt;string&lt;/span&gt; search) {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;UriBuilder&lt;/span&gt; builder = &lt;span style="color: blue"&gt;this&lt;/span&gt;.BuilderQuery(search);&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;// Submit Request&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;WebClient&lt;/span&gt; w = &lt;span style="color: blue"&gt;new&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;WebClient&lt;/span&gt;();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;string&lt;/span&gt; result = w.DownloadString(builder.Uri);&lt;br /&gt;&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: blue"&gt;string&lt;/span&gt;.IsNullOrWhiteSpace(result)) { &lt;span style="color: blue"&gt;return&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;null&lt;/span&gt;; }&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;// Desearealize from JSON to .NET objects&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;Byte&lt;/span&gt;[] bytes = &lt;span style="color: #2b91af"&gt;Encoding&lt;/span&gt;.Unicode.GetBytes(result);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;MemoryStream&lt;/span&gt; memoryStream = &lt;span style="color: blue"&gt;new&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;MemoryStream&lt;/span&gt;(bytes);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;DataContractJsonSerializer&lt;/span&gt; dataContractJsonSerializer =&lt;br /&gt;            &lt;span style="color: blue"&gt;new&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;DataContractJsonSerializer&lt;/span&gt;(&lt;span style="color: blue"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;BingWebResponse&lt;/span&gt;));&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;BingWebResponse&lt;/span&gt; bingWebResponse =&lt;br /&gt;            dataContractJsonSerializer.ReadObject(memoryStream) &lt;span style="color: blue"&gt;as&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;BingWebResponse&lt;/span&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; memoryStream.Close();&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;return&lt;/span&gt; bingWebResponse.SearchResponse;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;void&lt;/span&gt; SearchAsync(&lt;span style="color: blue"&gt;string&lt;/span&gt; search) {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;// Get URL&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;UriBuilder&lt;/span&gt; builder = &lt;span style="color: blue"&gt;this&lt;/span&gt;.BuilderQuery(search);&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;// Submit Request&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;WebClient&lt;/span&gt; w = &lt;span style="color: blue"&gt;new&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;WebClient&lt;/span&gt;();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; w.DownloadStringCompleted += (a, b) =&amp;gt; {&lt;br /&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;// Check for errors&lt;/span&gt;&lt;br /&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;if&lt;/span&gt; (b == &lt;span style="color: blue"&gt;null&lt;/span&gt;) { &lt;span style="color: blue"&gt;return&lt;/span&gt;; }&lt;br /&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;if&lt;/span&gt; (b.Error != &lt;span style="color: blue"&gt;null&lt;/span&gt;) { &lt;span style="color: blue"&gt;return&lt;/span&gt;; }&lt;br /&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;if&lt;/span&gt; (&lt;span style="color: blue"&gt;string&lt;/span&gt;.IsNullOrWhiteSpace(b.Result)) { &lt;span style="color: blue"&gt;return&lt;/span&gt;; }&lt;br /&gt; &lt;br /&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;// Desearealize from JSON to .NET objects&lt;/span&gt;&lt;br /&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: #2b91af"&gt;Byte&lt;/span&gt;[] bytes = &lt;span style="color: #2b91af"&gt;Encoding&lt;/span&gt;.Unicode.GetBytes(b.Result);&lt;br /&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: #2b91af"&gt;MemoryStream&lt;/span&gt; memoryStream = &lt;span style="color: blue"&gt;new&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;MemoryStream&lt;/span&gt;(bytes);&lt;br /&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: #2b91af"&gt;DataContractJsonSerializer&lt;/span&gt; dataContractJsonSerializer =&lt;br /&gt;                &lt;span style="color: blue"&gt;new&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;DataContractJsonSerializer&lt;/span&gt;(&lt;span style="color: blue"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;BingWebResponse&lt;/span&gt;));&lt;br /&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: #2b91af"&gt;BingWebResponse&lt;/span&gt; bingWebResponse =&lt;br /&gt;                dataContractJsonSerializer.ReadObject(memoryStream) &lt;span style="color: blue"&gt;as&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;BingWebResponse&lt;/span&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; memoryStream.Close();&lt;br /&gt; &lt;br /&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;// Raise Event&lt;/span&gt;&lt;br /&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;this&lt;/span&gt;.OnSearchCompleted(&lt;br /&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;new&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;BingSearchEventArgs&lt;/span&gt;() {&lt;br /&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; Response = bingWebResponse.SearchResponse&lt;br /&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;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; );&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; };&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; w.DownloadStringAsync(builder.Uri);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;private&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;UriBuilder&lt;/span&gt; BuilderQuery(&lt;span style="color: blue"&gt;string&lt;/span&gt; search) {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;// Build Query&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;string&lt;/span&gt; query = &lt;span style="color: blue"&gt;string&lt;/span&gt;.Empty;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; query += &lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515"&gt;&amp;quot;AppId={0}&amp;quot;&lt;/span&gt;, &lt;span style="color: blue"&gt;this&lt;/span&gt;.AppId);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; query += &lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515"&gt;&amp;quot;&amp;amp;Query={0}&amp;quot;&lt;/span&gt;, search);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; query += &lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515"&gt;&amp;quot;&amp;amp;Sources={0}&amp;quot;&lt;/span&gt;, &lt;span style="color: blue"&gt;this&lt;/span&gt;.Sources);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; query += &lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515"&gt;&amp;quot;&amp;amp;Adult={0}&amp;quot;&lt;/span&gt;, &lt;span style="color: blue"&gt;this&lt;/span&gt;.Adult);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; query += &lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515"&gt;&amp;quot;&amp;amp;Options={0}&amp;quot;&lt;/span&gt;, &lt;span style="color: blue"&gt;this&lt;/span&gt;.Options);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; query += &lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515"&gt;&amp;quot;&amp;amp;Web.Count={0}&amp;quot;&lt;/span&gt;, &lt;span style="color: blue"&gt;this&lt;/span&gt;.Count);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; query += &lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515"&gt;&amp;quot;&amp;amp;Web.Offset={0}&amp;quot;&lt;/span&gt;, &lt;span style="color: blue"&gt;this&lt;/span&gt;.Offset);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; query += &lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515"&gt;&amp;quot;&amp;amp;Web.Options={0}&amp;quot;&lt;/span&gt;, &lt;span style="color: blue"&gt;this&lt;/span&gt;.WebOptions);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; query += &lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515"&gt;&amp;quot;&amp;amp;JsonType={0}&amp;quot;&lt;/span&gt;, &lt;span style="color: #a31515"&gt;&amp;quot;raw&amp;quot;&lt;/span&gt;);&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;// Construct URL&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;UriBuilder&lt;/span&gt; builder = &lt;span style="color: blue"&gt;new&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;UriBuilder&lt;/span&gt;() {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Scheme = &lt;span style="color: #2b91af"&gt;Uri&lt;/span&gt;.UriSchemeHttp,&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Host = &lt;span style="color: #a31515"&gt;&amp;quot;api.bing.net&amp;quot;&lt;/span&gt;,&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Path = &lt;span style="color: #a31515"&gt;&amp;quot;json.aspx&amp;quot;&lt;/span&gt;,&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Query = query&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; };&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;// Return URL&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;return&lt;/span&gt; builder;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;enum&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;BingSafeLevel&lt;/span&gt; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Off, Moderate, Strict&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;class&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;BingSearchEventArgs&lt;/span&gt; : &lt;span style="color: #2b91af"&gt;EventArgs&lt;/span&gt; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;BingSearchResponse&lt;/span&gt; Response { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;[&lt;span style="color: #2b91af"&gt;DataContract&lt;/span&gt;]&lt;br /&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;class&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;BingWebResponse&lt;/span&gt; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;&amp;quot;SearchResponse&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;BingSearchResponse&lt;/span&gt; SearchResponse { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;[&lt;span style="color: #2b91af"&gt;DataContract&lt;/span&gt;]&lt;br /&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;class&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;BingSearchResponse&lt;/span&gt; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;&amp;quot;Version&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;string&lt;/span&gt; Version { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;&amp;quot;Query&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;BingQuery&lt;/span&gt; Query { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;&amp;quot;Web&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;BingWeb&lt;/span&gt; Web { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;[&lt;span style="color: #2b91af"&gt;DataContract&lt;/span&gt;]&lt;br /&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;class&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;BingQuery&lt;/span&gt; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;&amp;quot;SearchTerms&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;string&lt;/span&gt; SearchTerms { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;[&lt;span style="color: #2b91af"&gt;DataContract&lt;/span&gt;]&lt;br /&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;class&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;BingWeb&lt;/span&gt; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;&amp;quot;Total&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;int&lt;/span&gt; Total { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;&amp;quot;Offset&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;int&lt;/span&gt; Offset { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;&amp;quot;Results&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;BingResult&lt;/span&gt;&amp;gt; Results { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;[&lt;span style="color: #2b91af"&gt;DataContract&lt;/span&gt;]&lt;br /&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;class&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;BingResult&lt;/span&gt; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;&amp;quot;Title&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;string&lt;/span&gt; Title { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;&amp;quot;Description&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;string&lt;/span&gt; Description { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;&amp;quot;Url&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;string&lt;/span&gt; Url { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;&amp;quot;DisplayUrl&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;string&lt;/span&gt; DisplayUrl { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;&amp;quot;DateTime&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;string&lt;/span&gt; DateTimeOriginal { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;// Convert Date&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;DateTime&lt;/span&gt;? DateTimeConverted {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;get&lt;/span&gt; {&lt;br /&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;if&lt;/span&gt; (&lt;span style="color: blue"&gt;string&lt;/span&gt;.IsNullOrWhiteSpace(&lt;span style="color: blue"&gt;this&lt;/span&gt;.DateTimeOriginal)) { &lt;span style="color: blue"&gt;return&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;null&lt;/span&gt;; }&lt;br /&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: #2b91af"&gt;DateTime&lt;/span&gt; d;&lt;br /&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;if&lt;/span&gt; (!&lt;span style="color: #2b91af"&gt;DateTime&lt;/span&gt;.TryParse(&lt;span style="color: blue"&gt;this&lt;/span&gt;.DateTimeOriginal, &lt;span style="color: blue"&gt;out&lt;/span&gt; d)) { &lt;span style="color: blue"&gt;return&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;null&lt;/span&gt;; }&lt;br /&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;return&lt;/span&gt; d;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;}&lt;/pre&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8656429443005102101-5038786916183115038?l=kiwigis.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/PaJS/~4/zLy9JAB3yvQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://kiwigis.blogspot.com/feeds/5038786916183115038/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://kiwigis.blogspot.com/2011/03/bing-web-search-in-c.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8656429443005102101/posts/default/5038786916183115038?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8656429443005102101/posts/default/5038786916183115038?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/PaJS/~3/zLy9JAB3yvQ/bing-web-search-in-c.html" title="Bing Web Search in C#" /><author><name>Richie</name><uri>http://www.blogger.com/profile/10195785521277646822</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="30" src="http://3.bp.blogspot.com/-7rc6j-Jfa4M/TXCb1G2wvrI/AAAAAAAABxg/Yp9ZiEl52tA/s220/photo2.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh5.ggpht.com/_1XJYn8xCcGk/TYPpfFw9ElI/AAAAAAAAByY/TYBi_cowIK4/s72-c/image_thumb%5B2%5D.png?imgmax=800" height="72" width="72" /><thr:total>2</thr:total><feedburner:origLink>http://kiwigis.blogspot.com/2011/03/bing-web-search-in-c.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0YFQnw9fyp7ImA9Wx9aFU8.&quot;"><id>tag:blogger.com,1999:blog-8656429443005102101.post-7832331981366368243</id><published>2011-03-04T18:36:00.001-08:00</published><updated>2011-03-07T11:11:53.267-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-07T11:11:53.267-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><category scheme="http://www.blogger.com/atom/ns#" term="Silverlight" /><category scheme="http://www.blogger.com/atom/ns#" term="Google" /><category scheme="http://www.blogger.com/atom/ns#" term="Google Custom Search API" /><title>Google Custom Search in C#</title><content type="html">&lt;p&gt;This post contains a C# class to search the internet using &lt;a href="http://www.google.com"&gt;Google&lt;/a&gt;’s &lt;a href="https://code.google.com/apis/customsearch/v1/overview.html"&gt;custom search API&lt;/a&gt;. Before using this class you must first create a Google account (&lt;a href="http://code.google.com/apis/customsearch/v1/getting_started.html#get_account"&gt;link&lt;/a&gt;) and generate an API key (&lt;a href="http://code.google.com/apis/customsearch/v1/getting_started.html#get_key"&gt;link&lt;/a&gt;).&lt;/p&gt;  &lt;p&gt;Unfortunately, this code cannot be used directly from a &lt;a href="http://www.silverlight.net/"&gt;Silverlight&lt;/a&gt; application because of security limitations (see &lt;a href="http://msdn.microsoft.com/en-us/library/cc197955(VS.95).aspx"&gt;cross domain policy&lt;/a&gt;). If you need this capability in a Silverlight web application I would suggest performing the search via an ASP.NET proxy (license permitting).&lt;/p&gt;  &lt;p&gt;In this sample, I called the Google search API from a &lt;a href="http://en.wikipedia.org/wiki/Windows_Presentation_Foundation"&gt;WPF&lt;/a&gt; application, but it would also work in a &lt;a href="http://en.wikipedia.org/wiki/Windows_Forms"&gt;WinForms&lt;/a&gt; or ASP.NET application as suggested above.&lt;/p&gt;  &lt;p&gt;Here is the XAML of the Window that displays the results of the Google search.&lt;/p&gt;  &lt;pre style="font-family: consolas; background: white; color: black; font-size: 13px"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Window&lt;/span&gt;&lt;span style="color: red"&gt; x&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Class&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;ESRI.PrototypeLab.MapServiceHarvester.MainWindow&amp;quot;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: red"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: red"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;x&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: red"&gt; Height&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;600&amp;quot;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: red"&gt; Width&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;800&amp;quot;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt; &amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Grid&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;DataGrid&lt;/span&gt;&lt;span style="color: red"&gt; x&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;DataGridResults&amp;quot;&lt;/span&gt;&lt;span style="color: red"&gt; &lt;/span&gt;&lt;span style="color: red"&gt;AutoGenerateColumns&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;True&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Grid&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Window&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;Here is the code behind that makes that performs the internet search and displays the results in the &lt;a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.datagrid(v=VS.100).aspx"&gt;datagrid&lt;/a&gt; defined above.&lt;/p&gt;
&lt;pre style="font-family: consolas; background: white; color: black; font-size: 13px"&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;partial&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;class&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;MainWindow&lt;/span&gt; : &lt;span style="color: #2b91af"&gt;Window&lt;/span&gt; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt; MainWindow() {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; InitializeComponent();&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;this&lt;/span&gt;.Loaded += (s, e) =&amp;gt; {&lt;br /&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: #2b91af"&gt;GoogleSearch&lt;/span&gt; search = &lt;span style="color: blue"&gt;new&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;GoogleSearch&lt;/span&gt;() {&lt;br /&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; Key = &lt;span style="color: #a31515"&gt;&amp;quot;&amp;lt;enter your key here&amp;gt;&amp;quot;&lt;/span&gt;,&lt;br /&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; CX = &lt;span style="color: #a31515"&gt;&amp;quot;013036536707430787589:_pqjad5hr1a&amp;quot;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; };&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; search.SearchCompleted += (a, b) =&amp;gt; {&lt;br /&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;this&lt;/span&gt;.DataGridResults.ItemsSource = b.Response.Items;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; };&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; search.Search(&lt;span style="color: #a31515"&gt;&amp;quot;gis&amp;quot;&lt;/span&gt;);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; };&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;}&lt;/pre&gt;

&lt;p&gt;And here is the class that calls Google’s custom search API, desterilizes the &lt;a href="http://en.wikipedia.org/wiki/JSON"&gt;JSON&lt;/a&gt; response and returns the result as single .NET objects.&lt;/p&gt;

&lt;pre style="font-family: consolas; background: white; color: black; font-size: 13px"&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;class&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;GoogleSearch&lt;/span&gt; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt; GoogleSearch() {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;this&lt;/span&gt;.Num = 10;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;this&lt;/span&gt;.Start = 1;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;this&lt;/span&gt;.SafeLevel = &lt;span style="color: #2b91af"&gt;SafeLevel&lt;/span&gt;.off;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;// PROPERTIES&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;string&lt;/span&gt; Key { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;string&lt;/span&gt; CX { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;int&lt;/span&gt; Num { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;int&lt;/span&gt; Start { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;SafeLevel&lt;/span&gt; SafeLevel { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;// EVENTS&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;event&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;EventHandler&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;SearchEventArgs&lt;/span&gt;&amp;gt; SearchCompleted;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;// METHODs&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;protected&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;void&lt;/span&gt; OnSearchCompleted(&lt;span style="color: #2b91af"&gt;SearchEventArgs&lt;/span&gt; e) {&lt;br /&gt;&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: blue"&gt;this&lt;/span&gt;.SearchCompleted != &lt;span style="color: blue"&gt;null&lt;/span&gt;) {&lt;br /&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;this&lt;/span&gt;.SearchCompleted(&lt;span style="color: blue"&gt;this&lt;/span&gt;, e);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;void&lt;/span&gt; Search(&lt;span style="color: blue"&gt;string&lt;/span&gt; search) {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;// Check Parameters&lt;/span&gt;&lt;br /&gt;&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: blue"&gt;string&lt;/span&gt;.IsNullOrWhiteSpace(&lt;span style="color: blue"&gt;this&lt;/span&gt;.Key)) {&lt;br /&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;throw&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;new&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;Exception&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;Google Search 'Key' cannot be null&amp;quot;&lt;/span&gt;);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&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: blue"&gt;string&lt;/span&gt;.IsNullOrWhiteSpace(&lt;span style="color: blue"&gt;this&lt;/span&gt;.CX)) {&lt;br /&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;throw&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;new&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;Exception&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;Google Search 'CX' cannot be null&amp;quot;&lt;/span&gt;);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&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: blue"&gt;string&lt;/span&gt;.IsNullOrWhiteSpace(search)) {&lt;br /&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;throw&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;new&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;ArgumentNullException&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;search&amp;quot;&lt;/span&gt;);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&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: blue"&gt;this&lt;/span&gt;.Num &amp;lt; 0 || &lt;span style="color: blue"&gt;this&lt;/span&gt;.Num &amp;gt; 10) {&lt;br /&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;throw&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;new&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;ArgumentNullException&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;Num must be between 1 and 10&amp;quot;&lt;/span&gt;);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&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: blue"&gt;this&lt;/span&gt;.Start &amp;lt; 1 || &lt;span style="color: blue"&gt;this&lt;/span&gt;.Start &amp;gt; 100) {&lt;br /&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;throw&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;new&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;ArgumentNullException&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;Start must be between 1 and 100&amp;quot;&lt;/span&gt;);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&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; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;// Build Query&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;string&lt;/span&gt; query = &lt;span style="color: blue"&gt;string&lt;/span&gt;.Empty;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; query += &lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515"&gt;&amp;quot;q={0}&amp;quot;&lt;/span&gt;, search);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; query += &lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515"&gt;&amp;quot;&amp;amp;key={0}&amp;quot;&lt;/span&gt;, &lt;span style="color: blue"&gt;this&lt;/span&gt;.Key);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; query += &lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515"&gt;&amp;quot;&amp;amp;cx={0}&amp;quot;&lt;/span&gt;, &lt;span style="color: blue"&gt;this&lt;/span&gt;.CX);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; query += &lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515"&gt;&amp;quot;&amp;amp;safe={0}&amp;quot;&lt;/span&gt;, &lt;span style="color: blue"&gt;this&lt;/span&gt;.SafeLevel.ToString());&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; query += &lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515"&gt;&amp;quot;&amp;amp;alt={0}&amp;quot;&lt;/span&gt;, &lt;span style="color: #a31515"&gt;&amp;quot;json&amp;quot;&lt;/span&gt;);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; query += &lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515"&gt;&amp;quot;&amp;amp;num={0}&amp;quot;&lt;/span&gt;, &lt;span style="color: blue"&gt;this&lt;/span&gt;.Num);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; query += &lt;span style="color: blue"&gt;string&lt;/span&gt;.Format(&lt;span style="color: #a31515"&gt;&amp;quot;&amp;amp;start={0}&amp;quot;&lt;/span&gt;, &lt;span style="color: blue"&gt;this&lt;/span&gt;.Start);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;// Construct URL&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;UriBuilder&lt;/span&gt; builder = &lt;span style="color: blue"&gt;new&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;UriBuilder&lt;/span&gt;() {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Scheme = &lt;span style="color: #2b91af"&gt;Uri&lt;/span&gt;.UriSchemeHttps,&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Host = &lt;span style="color: #a31515"&gt;&amp;quot;www.googleapis.com&amp;quot;&lt;/span&gt;,&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Path = &lt;span style="color: #a31515"&gt;&amp;quot;customsearch/v1&amp;quot;&lt;/span&gt;,&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Query = query&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; };&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;// Submit Request&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #2b91af"&gt;WebClient&lt;/span&gt; w = &lt;span style="color: blue"&gt;new&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;WebClient&lt;/span&gt;();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; w.DownloadStringCompleted += (a, b) =&amp;gt; {&lt;br /&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;// Check for errors&lt;/span&gt;&lt;br /&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;if&lt;/span&gt; (b == &lt;span style="color: blue"&gt;null&lt;/span&gt;) { &lt;span style="color: blue"&gt;return&lt;/span&gt;; }&lt;br /&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;if&lt;/span&gt; (b.Error != &lt;span style="color: blue"&gt;null&lt;/span&gt;) { &lt;span style="color: blue"&gt;return&lt;/span&gt;; }&lt;br /&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;if&lt;/span&gt; (&lt;span style="color: blue"&gt;string&lt;/span&gt;.IsNullOrWhiteSpace(b.Result)) { &lt;span style="color: blue"&gt;return&lt;/span&gt;; }&lt;br /&gt; &lt;br /&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;// Desearealize from JSON to .NET objects&lt;/span&gt;&lt;br /&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: #2b91af"&gt;Byte&lt;/span&gt;[] bytes = &lt;span style="color: #2b91af"&gt;Encoding&lt;/span&gt;.Unicode.GetBytes(b.Result);&lt;br /&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: #2b91af"&gt;MemoryStream&lt;/span&gt; memoryStream = &lt;span style="color: blue"&gt;new&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;MemoryStream&lt;/span&gt;(bytes);&lt;br /&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: #2b91af"&gt;DataContractJsonSerializer&lt;/span&gt; dataContractJsonSerializer =&lt;br /&gt;                &lt;span style="color: blue"&gt;new&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;DataContractJsonSerializer&lt;/span&gt;(&lt;span style="color: blue"&gt;typeof&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;GoogleSearchResponse&lt;/span&gt;));&lt;br /&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: #2b91af"&gt;GoogleSearchResponse&lt;/span&gt; googleSearchResponse =&lt;br /&gt;           dataContractJsonSerializer.ReadObject(memoryStream) &lt;span style="color: blue"&gt;as&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;GoogleSearchResponse&lt;/span&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; memoryStream.Close();&lt;br /&gt; &lt;br /&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;// Raise Event&lt;/span&gt;&lt;br /&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;this&lt;/span&gt;.OnSearchCompleted(&lt;br /&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;new&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;SearchEventArgs&lt;/span&gt;() {&lt;br /&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; Response = googleSearchResponse&lt;br /&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;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; );&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; };&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; w.DownloadStringAsync(builder.Uri);&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;enum&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;SafeLevel&lt;/span&gt; { off, medium, high }&lt;br /&gt; &lt;br /&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;class&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;SearchEventArgs&lt;/span&gt; : &lt;span style="color: #2b91af"&gt;EventArgs&lt;/span&gt; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;GoogleSearchResponse&lt;/span&gt; Response { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;[&lt;span style="color: #2b91af"&gt;DataContract&lt;/span&gt;]&lt;br /&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;class&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;GoogleSearchResponse&lt;/span&gt; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;&amp;quot;kind&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;string&lt;/span&gt; Kind { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;&amp;quot;url&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;Url&lt;/span&gt; Url { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;&amp;quot;queries&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;Queries&lt;/span&gt; Queries { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;&amp;quot;context&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;Context&lt;/span&gt; Context { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;&amp;quot;items&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Item&lt;/span&gt;&amp;gt; Items { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;[&lt;span style="color: #2b91af"&gt;DataContract&lt;/span&gt;]&lt;br /&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;class&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;Url&lt;/span&gt; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;&amp;quot;type&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;string&lt;/span&gt; Type { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;&amp;quot;template&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;string&lt;/span&gt; Template { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;[&lt;span style="color: #2b91af"&gt;DataContract&lt;/span&gt;]&lt;br /&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;class&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;Queries&lt;/span&gt; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;&amp;quot;nextPage&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Page&lt;/span&gt;&amp;gt; NextPage { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;&amp;quot;request&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Page&lt;/span&gt;&amp;gt; Request { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;[&lt;span style="color: #2b91af"&gt;DataContract&lt;/span&gt;]&lt;br /&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;class&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;Page&lt;/span&gt; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;&amp;quot;title&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;string&lt;/span&gt; Title { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;&amp;quot;totalResults&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;int&lt;/span&gt; Request { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;&amp;quot;searchTerms&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;string&lt;/span&gt; SearchTerms { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;&amp;quot;count&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;int&lt;/span&gt; Count { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;&amp;quot;startIndex&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;int&lt;/span&gt; StartIndex { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;&amp;quot;inputEncoding&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;string&lt;/span&gt; InputEncoding { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;&amp;quot;outputEncoding&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;string&lt;/span&gt; OutputEncoding { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;&amp;quot;safe&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;string&lt;/span&gt; Safe { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;&amp;quot;cx&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;string&lt;/span&gt; CX { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;[&lt;span style="color: #2b91af"&gt;DataContract&lt;/span&gt;]&lt;br /&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;class&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;Context&lt;/span&gt; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;&amp;quot;title&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;string&lt;/span&gt; Title { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;&amp;quot;facets&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Facet&lt;/span&gt;&amp;gt;&amp;gt; Facets { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;[&lt;span style="color: #2b91af"&gt;DataContract&lt;/span&gt;]&lt;br /&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;class&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;Facet&lt;/span&gt; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;&amp;quot;label&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;string&lt;/span&gt; Label { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;&amp;quot;anchor&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;string&lt;/span&gt; Anchor { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;[&lt;span style="color: #2b91af"&gt;DataContract&lt;/span&gt;]&lt;br /&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;class&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;Item&lt;/span&gt; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;&amp;quot;kind&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;string&lt;/span&gt; Kind { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;&amp;quot;title&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;string&lt;/span&gt; Title { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;&amp;quot;htmlTitle&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;string&lt;/span&gt; HtmlTitle { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;&amp;quot;link&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;string&lt;/span&gt; Link { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;&amp;quot;displayLink&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;string&lt;/span&gt; DisplayLink { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;&amp;quot;snippet&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;string&lt;/span&gt; Snippet { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;&amp;quot;htmlSnippet&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;string&lt;/span&gt; HtmlSnippet { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;&amp;quot;cacheId&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;string&lt;/span&gt; CacheId { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//[DataMember(Name = &amp;quot;pagemap&amp;quot;)]        ***&lt;/span&gt;&lt;span style="color: green"&gt; Cannot deserialize JSON to .NET! ***&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//public Pagemap Pagemap { get; set; }&lt;/span&gt;&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;[&lt;span style="color: #2b91af"&gt;DataContract&lt;/span&gt;]&lt;br /&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;class&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;Pagemap&lt;/span&gt; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;&amp;quot;metatags&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Dictionary&lt;/span&gt;&amp;lt;&lt;span style="color: blue"&gt;string&lt;/span&gt;, &lt;span style="color: blue"&gt;string&lt;/span&gt;&amp;gt;&amp;gt; Metatags { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;[&lt;span style="color: #2b91af"&gt;DataContract&lt;/span&gt;]&lt;br /&gt;&lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;class&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;Metatag&lt;/span&gt; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;&amp;quot;creationdate&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;string&lt;/span&gt; Creationdate { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #2b91af"&gt;DataMember&lt;/span&gt;(Name = &lt;span style="color: #a31515"&gt;&amp;quot;moddate&amp;quot;&lt;/span&gt;)]&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;string&lt;/span&gt; Moddate { &lt;span style="color: blue"&gt;get&lt;/span&gt;; &lt;span style="color: blue"&gt;set&lt;/span&gt;; }&lt;br /&gt;}&lt;/pre&gt;

&lt;p&gt;And lastly, here is the result.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://lh5.ggpht.com/_1XJYn8xCcGk/TXUs7xGkiRI/AAAAAAAAByI/EyQiOYNcnYk/s1600-h/image%5B4%5D.png"&gt;&lt;img style="display: inline" title="image" alt="image" src="http://lh6.ggpht.com/_1XJYn8xCcGk/TXUs8BZwSrI/AAAAAAAAByM/uSfvvvP2qTc/image_thumb%5B1%5D.png?imgmax=800" width="500" height="205" /&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;The only issue I had with this sample was trying to deserialize the JSON associated with the “pagemap” property (see commented out code above). Any tips would be appreciated.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8656429443005102101-7832331981366368243?l=kiwigis.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/PaJS/~4/7VMbxLM5kfo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://kiwigis.blogspot.com/feeds/7832331981366368243/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://kiwigis.blogspot.com/2011/03/google-custom-search-in-c.html#comment-form" title="8 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8656429443005102101/posts/default/7832331981366368243?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8656429443005102101/posts/default/7832331981366368243?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/PaJS/~3/7VMbxLM5kfo/google-custom-search-in-c.html" title="Google Custom Search in C#" /><author><name>Richie</name><uri>http://www.blogger.com/profile/10195785521277646822</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="30" src="http://3.bp.blogspot.com/-7rc6j-Jfa4M/TXCb1G2wvrI/AAAAAAAABxg/Yp9ZiEl52tA/s220/photo2.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh6.ggpht.com/_1XJYn8xCcGk/TXUs8BZwSrI/AAAAAAAAByM/uSfvvvP2qTc/s72-c/image_thumb%5B1%5D.png?imgmax=800" height="72" width="72" /><thr:total>8</thr:total><feedburner:origLink>http://kiwigis.blogspot.com/2011/03/google-custom-search-in-c.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0YERHcycSp7ImA9Wx9aEEQ.&quot;"><id>tag:blogger.com,1999:blog-8656429443005102101.post-6815254508304171772</id><published>2011-03-02T11:34:00.001-08:00</published><updated>2011-03-02T11:45:05.999-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-03-02T11:45:05.999-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="P2P" /><category scheme="http://www.blogger.com/atom/ns#" term="ArcGIS 10" /><category scheme="http://www.blogger.com/atom/ns#" term=".NET" /><category scheme="http://www.blogger.com/atom/ns#" term="AddIn" /><title>P2P Collaboration in ArcMap</title><content type="html">&lt;p&gt;Most collaboration technologies require a central server to manager communication. Email, web browsing and instant messaging all require a server to handle communication between clients. This post re-introduces a &lt;a href="http://arcscripts.esri.com/details.asp?dbid=15578"&gt;sample&lt;/a&gt; originally published in May of 2008 that facilitates server-less map collaboration or “peer-to-peer geo-collaboration”.&lt;/p&gt;  &lt;p&gt;The new add-in for ArcGIS 10 can be downloaded (with source code) from &lt;a href="http://resources.arcgis.com/gallery/file/arcobjects-net-api/details?entryID=73C459C1-1422-2418-3466-DA2953EC6EED"&gt;here&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;How to Install:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Download the contribution from the code gallery (link), unzip the file and double click on file with the &lt;strong&gt;esriAddIn&lt;/strong&gt; extension. This will launch the Esri add-in installer, click &lt;strong&gt;Install Add-In&lt;/strong&gt; &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;How to Uninstall:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The add-in can be removed by clicking &lt;strong&gt;Customize &amp;gt; Add-In Manager&lt;/strong&gt;, selecting &lt;strong&gt;P2P Collaboration&lt;/strong&gt; from the list of installed add-ins and clicking &lt;strong&gt;Delete this Add-In&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;How to Use:&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;First, display the collaboration toolbar by clicking &lt;strong&gt;Customize &amp;gt; Toolbars &amp;gt; P2P Collaboration&lt;/strong&gt;. Clicking on the only button on the toolbar will display the p2p collaboration dockable window as shown below.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://lh6.ggpht.com/_1XJYn8xCcGk/TW6bvfXy7-I/AAAAAAAABwE/IcneVRlu1KE/s1600-h/image%5B7%5D.png"&gt;&lt;img style="display: inline" title="image" alt="image" src="http://lh4.ggpht.com/_1XJYn8xCcGk/TW6bvkY_GLI/AAAAAAAABwI/c9gEvnAxw5Q/image_thumb%5B5%5D.png?imgmax=800" width="500" height="385" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Before you can collaborate with other peers you must first connect to a &lt;a href="http://en.wikipedia.org/wiki/Mesh_network"&gt;mesh&lt;/a&gt; (or peer cloud).&amp;#160; A mesh is virtual network comprising of two or more &lt;a href="http://en.wikipedia.org/wiki/Node_(networking)"&gt;peers&lt;/a&gt;.&amp;#160; When the &lt;strong&gt;Connect&lt;/strong&gt; button is clicked the following dialog is displayed. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_1XJYn8xCcGk/TW6bvwaL8SI/AAAAAAAABwM/_biAntG8s74/s1600-h/image%5B14%5D.png"&gt;&lt;img style="display: inline" title="image" alt="image" src="http://lh3.ggpht.com/_1XJYn8xCcGk/TW6bwJigx0I/AAAAAAAABwQ/Vaen-awkDBo/image_thumb%5B10%5D.png?imgmax=800" width="298" height="475" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The &lt;strong&gt;Username&lt;/strong&gt; is a friendly name that you want to be identified on the mesh as.&amp;#160; By default, a password is not used. If you specify a password then you will ONLY be able to &amp;quot;see&amp;quot; other peers that used the same password. Using a password is a good method of excluding unwanted peers.&lt;/p&gt;  &lt;p&gt;Most P2P applications are considered to be examples of &lt;em&gt;&lt;/em&gt;&lt;a href="http://en.wikipedia.org/wiki/Peer-to-peer#Classifications_of_P2P_networks"&gt;hybrid P2P&lt;/a&gt; technology. This is because most rely on some sort of server interaction, such as a DNS server.&amp;#160; In the case of this add-in, a centralized resource is required for peers to find other peers. This central resource is called a peer resolver. &lt;/p&gt;  &lt;p&gt;The p2p collaboration add-in supports two resolver types: &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;strong&gt;PNRP&lt;/strong&gt;       &lt;br /&gt;&lt;a href="http://en.wikipedia.org/wiki/PNRP"&gt;Peer Name Resolution Protocol&lt;/a&gt; (or PNRP) is a proprietary technology by Microsoft. The add-in supports PNRP 2.0 which is installed by default on computers running &lt;a href="http://www.microsoft.com/windows/products/windowsvista/default.aspx"&gt;Microsoft Windows Vista&lt;/a&gt; and an optional install for &lt;a href="http://www.microsoft.com/windows/products/windowsxp/default.mspx"&gt;Microsoft Windows XP&lt;/a&gt; &lt;a href="http://www.microsoft.com/windowsxp/sp2/default.mspx"&gt;SP2&lt;/a&gt;.&amp;#160; Unfortunately PNRP is not supported on Microsoft Windows &lt;a href="http://www.microsoft.com/windowsserver2003/default.mspx"&gt;2003&lt;/a&gt;/&lt;a href="http://www.microsoft.com/windowsserver2008/en/us/default.aspx"&gt;2008&lt;/a&gt;. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Custom&lt;/strong&gt;       &lt;br /&gt;This is the address of a custom peer resolver running on your network. Details on how to configure and start a custom peer resolver are detailed below. The purpose of the resolver is to exchange &lt;a href="http://en.wikipedia.org/wiki/IP_address"&gt;IP addresses&lt;/a&gt; (and &lt;a href="http://en.wikipedia.org/wiki/Computer_port_(software)"&gt;ports&lt;/a&gt;) of other peers. All subsequent communication is done on a peer-to-peer basis. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;Within a few seconds on connecting you should see the names of other peers appearing in the list. The user in &lt;strong&gt;bold&lt;/strong&gt; is you.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href="http://lh5.ggpht.com/_1XJYn8xCcGk/TW6bwqWgekI/AAAAAAAABwU/KTk6HiM-Epw/s1600-h/image%5B20%5D.png"&gt;&lt;img style="display: inline" title="image" alt="image" src="http://lh6.ggpht.com/_1XJYn8xCcGk/TW6bw8MsZbI/AAAAAAAABwY/RLI9g-f-Gds/image_thumb%5B14%5D.png?imgmax=800" width="500" height="362" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;There are five ways you can collaborate with other peers: &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;strong&gt;Chatting&lt;/strong&gt;       &lt;br /&gt;To chat click the &lt;strong&gt;Chat&lt;/strong&gt; tab and start typing. It is important to note that chatting is communal, that is, all peers see all text messages.&amp;#160; &lt;br /&gt;&lt;img style="display: inline" title="image" alt="image" src="http://lh6.ggpht.com/_1XJYn8xCcGk/TW6bxEIv7DI/AAAAAAAABwc/R70JGM5D2cw/image%5B40%5D.png?imgmax=800" width="285" height="500" /&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Publishing geo-referenced screenshots&lt;/strong&gt;       &lt;br /&gt;Returning to the Users tab, if you right click on another peer's name you will see the following context menu appear. Clicking on &lt;strong&gt;Publish Map &lt;/strong&gt;will send your current map display to the selected user.&amp;#160; The selected user (i.e. Jim) will automatically receive a new raster layer in his map document.&amp;#160; &lt;br /&gt;&lt;img style="display: inline" title="image" alt="image" src="http://lh6.ggpht.com/_1XJYn8xCcGk/TW6bxWPqwHI/AAAAAAAABwg/iXVpKv29Mos/image%5B41%5D.png?imgmax=800" width="325" height="500" /&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Requesting geo-referenced screenshots&lt;/strong&gt;       &lt;br /&gt;In the example above, Jim sent a screenshot to Bob. This would have required Bob to make an explicit request to Jim. The p2p collaboration add-in has the capability of requesting a screenshots from other peers without them knowing! To covertly request a screenshot, select &lt;strong&gt;Request Map&lt;/strong&gt; in the context menu. To stop other peers from harvesting screenshots (or &amp;quot;maps&amp;quot;) from your computer, unchecked the &lt;strong&gt;Map &amp;gt; Share&lt;/strong&gt; option from the main menu.      &lt;br /&gt;&lt;img style="display: inline" title="image" alt="image" src="http://lh3.ggpht.com/_1XJYn8xCcGk/TW6bxmQaSLI/AAAAAAAABwk/fHEQyACfPpM/image%5B42%5D.png?imgmax=800" width="277" height="293" /&gt;      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Add, removing, editing shared graphics and ink&lt;/strong&gt;       &lt;br /&gt;Shared graphics is probably the most useful feature of the add-in. All peers can add, remove, edit graphics collectively. A line or box added by one peer can be moved or deleted by another peer. Any graphic from the Drawing toolbar or ink from the &lt;a href="http://en.wikipedia.org/wiki/Tablet_PC"&gt;Tablet&lt;/a&gt; toolbar is supported.      &lt;br /&gt;      &lt;br /&gt;&lt;img style="display: inline" title="image" alt="image" src="http://lh5.ggpht.com/_1XJYn8xCcGk/TW6bx5GzRzI/AAAAAAAABwo/4kgG0QAtaVc/image%5B36%5D.png?imgmax=800" width="272" height="186" /&gt;&amp;#160;&amp;#160; &lt;br /&gt;      &lt;br /&gt;By default, all graphics/ink that is added to the map are shared with all other peers. If you want to add graphics/ink to your map without it being shared then you can disable sharing by clicking &lt;strong&gt;Graphics &amp;gt; Share&lt;/strong&gt;.&amp;#160; &lt;br /&gt;&lt;img style="display: inline" title="image" alt="image" src="http://lh3.ggpht.com/_1XJYn8xCcGk/TW6byde_NKI/AAAAAAAABws/f9yI9uPYk58/image%5B43%5D.png?imgmax=800" width="273" height="301" /&gt;&amp;#160; &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Share navigation        &lt;br /&gt;&lt;/strong&gt;From a screenshot above you may have noticed a entry in the peer context menu called &lt;strong&gt;Zoom to Map&lt;/strong&gt;.&amp;#160; This will change your map extent to be same as the peer you selected.&amp;#160; Essentially you can see what areas other people are looking at.&amp;#160; However there is a significantly more advanced feature called &lt;em&gt;shared navigation &lt;/em&gt;that allows one peer to control the map display of other peers.&amp;#160; The controlling peer (aka the &lt;em&gt;master&lt;/em&gt;) must first enable extent sharing from the main menu (&lt;strong&gt;Extents &amp;gt; Share&lt;/strong&gt;).&amp;#160; &lt;br /&gt;&lt;img style="display: inline" title="image" alt="image" src="http://lh4.ggpht.com/_1XJYn8xCcGk/TW6by3xyeZI/AAAAAAAABww/nlLFYeSe4q0/image%5B47%5D.png?imgmax=800" width="274" height="307" /&gt;      &lt;br /&gt;      &lt;br /&gt;Other peers (aka &lt;em&gt;slaves&lt;/em&gt;) must then subscribe to the master peer’s map extent.&amp;#160; To subscribe to another peers extents click Follow in the peer context menu as shown below.&amp;#160; &lt;br /&gt;&lt;img style="display: inline" title="image" alt="image" src="http://lh3.ggpht.com/_1XJYn8xCcGk/TW6bzE802oI/AAAAAAAABw0/hVcZak5aM3Y/image%5B51%5D.png?imgmax=800" width="330" height="393" /&gt;       &lt;br /&gt; &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;If you choose to use PNRP as your organization’s peer resolver then please remember that this is only supported on Microsoft Window XP SP2, Microsoft Windows Vista and Microsoft Windows 7. Another disadvantage of PNRP is that it requires partial support for IPv6. If your network and routes do not support this protocol then PNRP may not function correctly. On Vista, PNRP 2.0 is already installed and running. However, PNRP, by default is not installed on Microsoft Windows XP. To install PNRP on Microsoft Windows XP follow these steps: &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;In the &lt;strong&gt;Control Panel&lt;/strong&gt;, double-click &lt;strong&gt;Add or Remove Programs&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;In the &lt;strong&gt;Add or Remove Programs&lt;/strong&gt; dialog box, click &lt;strong&gt;Add/Remove Windows Components&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;In the &lt;strong&gt;Windows Components Wizard&lt;/strong&gt;, select the &amp;quot;Networking Services&amp;quot; check box and click &amp;quot;Details&amp;quot;. &lt;/li&gt;    &lt;li&gt;Check the &amp;quot;Peer-to-Peer&amp;quot; check box and click &amp;quot;OK&amp;quot;. &lt;/li&gt;    &lt;li&gt;Click &amp;quot;Next&amp;quot; in the &lt;strong&gt;Windows Components Wizard&lt;/strong&gt;. &lt;/li&gt;    &lt;li&gt;When the installation completes, click &amp;quot;Finish&amp;quot;. &lt;/li&gt;    &lt;li&gt;From a command shell prompt, start the PNRP service with the following command: &lt;font size="2" face="Courier New"&gt;net start pnrpsvc&lt;/font&gt;. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;After installing PNRP on Microsoft Windows XP, there is one more step. The version of PNRP that is included with Microsoft Windows XP is not compatible with Microsoft Windows Vista. To upgrade PNRP 1.0 to the Vista compatible PNRP 2.0 you need to install &lt;a href="http://support.microsoft.com/kb/920342"&gt;KB920342&lt;/a&gt; from &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=55219164-EC71-4A32-A648-4ED2582EBC7C&amp;amp;displaylang=en"&gt;here&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;For greater compatibility, your organization may choose to run a custom peer resolver on your network. The downloadable contribution includes a sample custom peer resolver that is specifically designed for the ArcMap add-in. The customer peer resolver is named &lt;em&gt;ESRI.PrototypeLab.P2P.PeerResolver.exe&lt;/em&gt; and is located in the following subdirectory of the download.    &lt;br /&gt;&lt;em&gt;ESRI.PrototypeLab.P2P\ESRI.PrototypeLab.P2P.PeerResolver\bin\Release&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;img style="display: inline" title="image" alt="image" src="http://lh6.ggpht.com/_1XJYn8xCcGk/TW6bzWP6huI/AAAAAAAABw4/mb3naI-INYE/image%5B55%5D.png?imgmax=800" width="283" height="351" /&gt; &lt;/p&gt;  &lt;p&gt;The for best results, leave the &lt;strong&gt;Server &lt;/strong&gt;name as &lt;em&gt;&lt;a href="http://en.wikipedia.org/wiki/Localhost"&gt;localhost&lt;/a&gt;&lt;/em&gt; and the &lt;strong&gt;Protocol&lt;/strong&gt; set to &lt;em&gt;&lt;a href="http://en.wikipedia.org/wiki/Transmission_Control_Protocol"&gt;Tcp&lt;/a&gt;&lt;/em&gt;. If there is an obvious port conflict then change it to something else. For example, port 80 might be used by a web server. To start the peer resolver service click &lt;strong&gt;Start&lt;/strong&gt;.&amp;#160; If you close the application by clicking the &amp;quot;X&amp;quot; button then the application will continue running in the windows system tray as shown below. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.ggpht.com/_1XJYn8xCcGk/TW6bz1_SQuI/AAAAAAAABw8/m4Znzxy0kpw/s1600-h/image%5B58%5D.png"&gt;&lt;img style="display: inline" title="image" alt="image" src="http://lh5.ggpht.com/_1XJYn8xCcGk/TW6b0kOEuyI/AAAAAAAABxA/2SvB_-muUOA/image_thumb%5B26%5D.png?imgmax=800" width="364" height="162" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;When the peer resolver is minimized to the system tray, use the right click menu (or “context menu”) to start, stop, open or close the resolver.&lt;/p&gt;  &lt;p&gt;Lastly, to assist with configuring and testing your setup, the download includes a simple test app. This file is called &lt;em&gt;ESRI.PrototypeLab.P2P.Test.exe&lt;/em&gt; and is located here:    &lt;br /&gt;&lt;em&gt;ESRI.PrototypeLab.P2P\ESRI.PrototypeLab.P2P.Test\bin\Release&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;img style="display: inline" title="image" alt="image" src="http://lh3.ggpht.com/_1XJYn8xCcGk/TW6eQJykKJI/AAAAAAAABxE/buAaG6WtLVs/image%5B62%5D.png?imgmax=800" width="331" height="333" /&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8656429443005102101-6815254508304171772?l=kiwigis.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/PaJS/~4/PYDPDhUV1r0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://kiwigis.blogspot.com/feeds/6815254508304171772/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://kiwigis.blogspot.com/2011/03/p2p-collaboration-in-arcmap.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8656429443005102101/posts/default/6815254508304171772?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8656429443005102101/posts/default/6815254508304171772?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/PaJS/~3/PYDPDhUV1r0/p2p-collaboration-in-arcmap.html" title="P2P Collaboration in ArcMap" /><author><name>Richie</name><uri>http://www.blogger.com/profile/10195785521277646822</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="30" src="http://3.bp.blogspot.com/-7rc6j-Jfa4M/TXCb1G2wvrI/AAAAAAAABxg/Yp9ZiEl52tA/s220/photo2.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/_1XJYn8xCcGk/TW6bvkY_GLI/AAAAAAAABwI/c9gEvnAxw5Q/s72-c/image_thumb%5B5%5D.png?imgmax=800" height="72" width="72" /><thr:total>4</thr:total><feedburner:origLink>http://kiwigis.blogspot.com/2011/03/p2p-collaboration-in-arcmap.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck8BR3g-eyp7ImA9Wx9UEkQ.&quot;"><id>tag:blogger.com,1999:blog-8656429443005102101.post-280289867578258087</id><published>2011-02-09T14:34:00.001-08:00</published><updated>2011-02-09T14:34:16.653-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-09T14:34:16.653-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ArcGIS API for Silverlight" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><category scheme="http://www.blogger.com/atom/ns#" term="Silverlight" /><title>Custom Magnifier for Esri’s Silverlight SDK</title><content type="html">&lt;p&gt;&lt;a href="http://lh6.ggpht.com/_1XJYn8xCcGk/TVMWXQoNIQI/AAAAAAAABvQ/WYdlLxEaJ-s/s1600-h/image%5B6%5D.png"&gt;&lt;img style="display: inline" title="Custom Magnifier for Esri’s Silverlight SDK" alt="Custom Magnifier for Esri’s Silverlight SDK" src="http://lh4.ggpht.com/_1XJYn8xCcGk/TVMWXhkKBDI/AAAAAAAABvU/HgfHbnvPxmY/image_thumb%5B4%5D.png?imgmax=800" width="240" height="231" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Map &lt;a href="http://en.wikipedia.org/wiki/Magnifying_glass"&gt;magnifiers&lt;/a&gt; are very intuitive and compelling for end users. They allow a user to examine a map in more detail without having to to change the map scale (or “zoom in”). Magnifiers can also be used to like an “x-ray” to reveal alternative content. For example, if a base map shows a street map information for a city, a magnifier could reveal satellite imagery at the same scale.&lt;/p&gt;  &lt;p&gt;The &lt;a href="http://esrisilverlight.codeplex.com/"&gt;ArcGIS Silverlight Toolkit&lt;/a&gt; extends &lt;a href="http://www.esri.com/"&gt;ESRI&lt;/a&gt;’s &lt;a href="http://help.arcgis.com/en/webapi/silverlight/"&gt;ArcGIS API for Microsoft Silverlight&lt;/a&gt; with useful widgets like a &lt;a href="http://help.arcgis.com/en/webapi/silverlight/samples/start.htm#Navigation"&gt;navigation control&lt;/a&gt;, &lt;a href="http://help.arcgis.com/en/webapi/silverlight/samples/start.htm#ToolBarWidget"&gt;toolbar&lt;/a&gt; and two types of magnifiers.&lt;/p&gt;  &lt;p&gt;The toolkit’s &lt;a href="http://help.arcgis.com/en/webapi/silverlight/samples/start.htm#Magnify"&gt;Magnifier&lt;/a&gt; is a control that allows the user to temporarily swipe a stylized magnifying glass over the map. Developers can specify any magnification and any map content for the magnifier.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh6.ggpht.com/_1XJYn8xCcGk/TVMWYF0euUI/AAAAAAAABvY/TZEShh2ABGM/s1600-h/image%5B12%5D.png"&gt;&lt;img style="display: inline" title="Magnifier" alt="Magnifier" src="http://lh3.ggpht.com/_1XJYn8xCcGk/TVMWYoWJbKI/AAAAAAAABvg/gX_1ChQ-aEE/image_thumb%5B8%5D.png?imgmax=800" width="240" height="204" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;The toolkit’s &lt;a href="http://help.arcgis.com/en/webapi/silverlight/samples/start.htm#MagnifyingGlass"&gt;MagnifyingGlass&lt;/a&gt; is an alternative magnifier with a simpler design. Developers can specify any magnification but are limited to single &lt;a href="http://help.arcgis.com/en/webapi/silverlight/apiref/ESRI.ArcGIS.Client~ESRI.ArcGIS.Client.TiledMapServiceLayer.html"&gt;tiled map service layer&lt;/a&gt; for the contents. Unlike the Magnifier described above, this control can resided in the web application permanently. As the base map updates, the extent in the MagnifyingGlass will also update.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh5.ggpht.com/_1XJYn8xCcGk/TVMWZUGgq9I/AAAAAAAABvk/-kfbEXwZc4E/s1600-h/image%5B18%5D.png"&gt;&lt;img style="display: inline" title="MagnifyingGlass" alt="MagnifyingGlass" src="http://lh5.ggpht.com/_1XJYn8xCcGk/TVMWZ-E-1TI/AAAAAAAABvo/p_-90aLqGl0/image_thumb%5B12%5D.png?imgmax=800" width="240" height="204" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;These two controls are very useful but did not satisfy my requirement to have permanent magnifier that supported &lt;a href="http://help.arcgis.com/en/webapi/silverlight/apiref/ESRI.ArcGIS.Client~ESRI.ArcGIS.Client.DynamicLayer.html"&gt;dynamic layers&lt;/a&gt; such as an &lt;a href="http://help.arcgis.com/en/webapi/silverlight/apiref/ESRI.ArcGIS.Client~ESRI.ArcGIS.Client.ArcGISImageServiceLayer.html"&gt;image service layer&lt;/a&gt;. The code below is a blend of both toolkit magnifiers.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Here is the XAML:&lt;/strong&gt;&lt;/p&gt;  &lt;pre style="font-family: consolas"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;UserControl&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160; &lt;span style="color: red"&gt; x&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Class&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;TestMagnify.Magnify&amp;quot;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160; &lt;span style="color: red"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160; &lt;span style="color: red"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;x&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160; &lt;span style="color: red"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;d&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;http://schemas.microsoft.com/expression/blend/2008&amp;quot;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160; &lt;span style="color: red"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;mc&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;http://schemas.openxmlformats.org/markup-compatibility/2006&amp;quot;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160; &lt;span style="color: red"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;esri&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;http://schemas.esri.com/arcgis/client/2009&amp;quot;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160; &lt;span style="color: red"&gt; mc&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Ignorable&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;d&amp;quot;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160; &lt;span style="color: red"&gt; d&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;DesignHeight&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;225&amp;quot;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160; &lt;span style="color: red"&gt; d&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;DesignWidth&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;225&amp;quot;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160; &lt;span style="color: red"&gt; Width&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;225&amp;quot;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160; &lt;span style="color: red"&gt; Height&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;225&amp;quot;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt; &amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Grid&lt;/span&gt;&lt;span style="color: red"&gt; x&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;LayoutRoot&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Grid.RenderTransform&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;TranslateTransform&lt;/span&gt;&lt;span style="color: red"&gt; x&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;Translate&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Grid.RenderTransform&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Ellipse&lt;/span&gt;&lt;span style="color: red"&gt; x&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;MagShadow&amp;quot;&lt;/span&gt;&lt;span style="color: red"&gt; Margin&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;-2&amp;quot;&lt;/span&gt;&lt;span style="color: red"&gt; Fill&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;Black&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Ellipse.Effect&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;BlurEffect&lt;/span&gt;&lt;span style="color: red"&gt; Radius&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;25&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Ellipse.Effect&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Ellipse&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Ellipse&lt;/span&gt;&lt;span style="color: red"&gt; x&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;MagFrameBack&amp;quot;&lt;/span&gt;&lt;span style="color: red"&gt; Margin&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;0&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Ellipse.Fill&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;LinearGradientBrush&lt;/span&gt;&lt;span style="color: red"&gt; EndPoint&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;0.5,1&amp;quot;&lt;/span&gt;&lt;span style="color: red"&gt; StartPoint&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;0.5,0&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;GradientStop&lt;/span&gt;&lt;span style="color: red"&gt; Color&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;#FF000000&amp;quot;&lt;/span&gt;&lt;span style="color: red"&gt; Offset&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;1&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;GradientStop&lt;/span&gt;&lt;span style="color: red"&gt; Color&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;#FFFFFFFF&amp;quot;&lt;/span&gt;&lt;span style="color: red"&gt; Offset&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;0&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;GradientStop&lt;/span&gt;&lt;span style="color: red"&gt; Color&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;#FF353535&amp;quot;&lt;/span&gt;&lt;span style="color: red"&gt; Offset&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;0.875&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;GradientStop&lt;/span&gt;&lt;span style="color: red"&gt; Color&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;#FF515151&amp;quot;&lt;/span&gt;&lt;span style="color: red"&gt; Offset&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;0.21&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;LinearGradientBrush&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Ellipse.Fill&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Ellipse&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Ellipse&lt;/span&gt;&lt;span style="color: red"&gt; x&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;MagFrameFront&amp;quot;&lt;/span&gt;&lt;span style="color: red"&gt; Margin&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;5&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Ellipse.Fill&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;LinearGradientBrush&lt;/span&gt;&lt;span style="color: red"&gt; EndPoint&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;0.5,1&amp;quot;&lt;/span&gt;&lt;span style="color: red"&gt; StartPoint&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;0.5,0&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;GradientStop&lt;/span&gt;&lt;span style="color: red"&gt; Color&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;#FF000000&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;GradientStop&lt;/span&gt;&lt;span style="color: red"&gt; Color&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;#FFFFFFFF&amp;quot;&lt;/span&gt;&lt;span style="color: red"&gt; Offset&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;1&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;GradientStop&lt;/span&gt;&lt;span style="color: red"&gt; Color&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;#FF505050&amp;quot;&lt;/span&gt;&lt;span style="color: red"&gt; Offset&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;0.134&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;GradientStop&lt;/span&gt;&lt;span style="color: red"&gt; Color&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;#FE787878&amp;quot;&lt;/span&gt;&lt;span style="color: red"&gt; Offset&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;0.728&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;GradientStop&lt;/span&gt;&lt;span style="color: red"&gt; Color&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;#FE9D9D9D&amp;quot;&lt;/span&gt;&lt;span style="color: red"&gt; Offset&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;0.915&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;LinearGradientBrush&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Ellipse.Fill&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Ellipse&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Grid&lt;/span&gt;&lt;span style="color: red"&gt; Margin&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;10&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Grid.OpacityMask&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;RadialGradientBrush&lt;/span&gt;&lt;span style="color: red"&gt; GradientOrigin&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;0.5,0.5&amp;quot;&lt;br /&gt;                                     &lt;/span&gt;&lt;span style="color: red"&gt;Center&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;0.5,0.5&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;GradientStop&lt;/span&gt;&lt;span style="color: red"&gt; Color&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;White&amp;quot;&lt;/span&gt;&lt;span style="color: red"&gt; Offset&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;0.9999&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;GradientStop&lt;/span&gt;&lt;span style="color: red"&gt; Offset&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;1&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;RadialGradientBrush&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Grid.OpacityMask&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;esri&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Map&lt;/span&gt;&lt;span style="color: red"&gt; x&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;MagMap&amp;quot;&lt;/span&gt;&lt;br /&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; &lt;span style="color: red"&gt; IsLogoVisible&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;False&amp;quot;&lt;/span&gt;&lt;br /&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; &lt;span style="color: red"&gt; IsHitTestVisible&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;False&amp;quot;&lt;/span&gt;&lt;br /&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; &lt;span style="color: red"&gt; PanDuration&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;00:00:00&amp;quot;&lt;/span&gt;&lt;br /&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; &lt;span style="color: red"&gt; ZoomDuration&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;00:00:00&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Grid&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Ellipse&lt;/span&gt;&lt;span style="color: red"&gt; x&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;MagGlass&amp;quot;&lt;/span&gt;&lt;span style="color: red"&gt; Stroke&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;#FF000000&amp;quot;&lt;/span&gt;&lt;span style="color: red"&gt; Margin&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;10&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Ellipse.Fill&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;RadialGradientBrush&lt;/span&gt;&lt;span style="color: red"&gt; GradientOrigin&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;1, 1&amp;quot;&lt;/span&gt;&lt;span style="color: red"&gt; Center&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;0.5,0.5&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;GradientStop&lt;/span&gt;&lt;span style="color: red"&gt; Color&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;#48FFFFFF&amp;quot;&lt;/span&gt;&lt;span style="color: red"&gt; Offset&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;0.009&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;GradientStop&lt;/span&gt;&lt;span style="color: red"&gt; Color&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;#22FFFFFF&amp;quot;&lt;/span&gt;&lt;span style="color: red"&gt; Offset&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;0.107&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;GradientStop&lt;/span&gt;&lt;span style="color: red"&gt; Color&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;#00BBBBBB&amp;quot;&lt;/span&gt;&lt;span style="color: red"&gt; Offset&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;0.567&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;GradientStop&lt;/span&gt;&lt;span style="color: red"&gt; Color&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;#00BCBCBC&amp;quot;&lt;/span&gt;&lt;span style="color: red"&gt; Offset&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;0.585&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;GradientStop&lt;/span&gt;&lt;span style="color: red"&gt; Color&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;#00BBBBBB&amp;quot;&lt;/span&gt;&lt;span style="color: red"&gt; Offset&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;0.625&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;GradientStop&lt;/span&gt;&lt;span style="color: red"&gt; Color&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;#04C4C4C4&amp;quot;&lt;/span&gt;&lt;span style="color: red"&gt; Offset&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;0.696&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;GradientStop&lt;/span&gt;&lt;span style="color: red"&gt; Color&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;#1AC4C4C4&amp;quot;&lt;/span&gt;&lt;span style="color: red"&gt; Offset&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;0.888&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;GradientStop&lt;/span&gt;&lt;span style="color: red"&gt; Color&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;#2FFFFFFF&amp;quot;&lt;/span&gt;&lt;span style="color: red"&gt; Offset&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;1&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;/&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;RadialGradientBrush&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Ellipse.Fill&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Ellipse&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Grid&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;UserControl&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;Here is the code behind:&lt;/strong&gt;&lt;/p&gt;

&lt;pre style="font-family: consolas"&gt;&lt;span style="color: blue"&gt;using&lt;/span&gt; System.Windows;&lt;br /&gt;&lt;span style="color: blue"&gt;using&lt;/span&gt; System.Windows.Controls;&lt;br /&gt;&lt;span style="color: blue"&gt;using&lt;/span&gt; System.Windows.Input;&lt;br /&gt;&lt;span style="color: blue"&gt;using&lt;/span&gt; ESRI.ArcGIS.Client;&lt;br /&gt;&lt;span style="color: blue"&gt;using&lt;/span&gt; ESRI.ArcGIS.Client.Geometry;&lt;br /&gt; &lt;br /&gt;&lt;span style="color: blue"&gt;namespace&lt;/span&gt; TestMagnify {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;partial&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;class&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;Magnify&lt;/span&gt; : &lt;span style="color: #2b91af"&gt;UserControl&lt;/span&gt; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;private&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;Point&lt;/span&gt; _begin;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;private&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;Point&lt;/span&gt; _current;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;private&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;Cursor&lt;/span&gt; _cursor = &lt;span style="color: blue"&gt;null&lt;/span&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;private&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;bool&lt;/span&gt; _isdrag = &lt;span style="color: blue"&gt;false&lt;/span&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: green"&gt;//&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt; Magnify() {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; InitializeComponent();&lt;br /&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;this&lt;/span&gt;.MouseLeftButtonDown += &lt;span style="color: blue"&gt;this&lt;/span&gt;.MagnifyBox_MouseLeftButtonDown;&lt;br /&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;this&lt;/span&gt;.MouseLeftButtonUp += &lt;span style="color: blue"&gt;this&lt;/span&gt;.MagnifyBox_MouseLeftButtonUp;&lt;br /&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;this&lt;/span&gt;.MouseMove += &lt;span style="color: blue"&gt;this&lt;/span&gt;.MagnifyBox_MouseMove;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;static&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;readonly&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;DependencyProperty&lt;/span&gt; MapProperty = &lt;br /&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: #2b91af"&gt;DependencyProperty&lt;/span&gt;.Register(&lt;br /&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: #a31515"&gt;&amp;quot;Map&amp;quot;&lt;/span&gt;, &lt;br /&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;typeof&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;Map&lt;/span&gt;),&lt;br /&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;typeof&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;Magnify&lt;/span&gt;),&lt;br /&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;new&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;PropertyMetadata&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;Magnify&lt;/span&gt;.OnMapPropertyChanged));&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;static&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;readonly&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;DependencyProperty&lt;/span&gt; LayersProperty = &lt;br /&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: #2b91af"&gt;DependencyProperty&lt;/span&gt;.RegisterAttached(&lt;br /&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: #a31515"&gt;&amp;quot;Layers&amp;quot;&lt;/span&gt;,&lt;br /&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;typeof&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;LayerCollection&lt;/span&gt;),&lt;br /&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;typeof&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;Magnify&lt;/span&gt;),&lt;br /&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;new&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;PropertyMetadata&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;Magnify&lt;/span&gt;.OnLayersPropertyChanged));&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;static&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;readonly&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;DependencyProperty&lt;/span&gt; ZoomFactorProperty = &lt;br /&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: #2b91af"&gt;DependencyProperty&lt;/span&gt;.Register(&lt;br /&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: #a31515"&gt;&amp;quot;ZoomFactor&amp;quot;&lt;/span&gt;, &lt;br /&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;typeof&lt;/span&gt;(&lt;span style="color: blue"&gt;double&lt;/span&gt;), &lt;br /&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;typeof&lt;/span&gt;(&lt;span style="color: #2b91af"&gt;Magnify&lt;/span&gt;),&lt;br /&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;new&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;PropertyMetadata&lt;/span&gt;(2d,&lt;br /&gt;                                     &lt;span style="color: #2b91af"&gt;Magnify&lt;/span&gt;.OnZoomFactorPropertyChanged));&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;Map&lt;/span&gt; Map {&lt;br /&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;get&lt;/span&gt; { &lt;span style="color: blue"&gt;return&lt;/span&gt; (&lt;span style="color: #2b91af"&gt;Map&lt;/span&gt;)&lt;span style="color: blue"&gt;this&lt;/span&gt;.GetValue(MapProperty); }&lt;br /&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;set&lt;/span&gt; { &lt;span style="color: blue"&gt;this&lt;/span&gt;.SetValue(MapProperty, &lt;span style="color: blue"&gt;value&lt;/span&gt;); }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;LayerCollection&lt;/span&gt; Layers {&lt;br /&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;get&lt;/span&gt; { &lt;span style="color: blue"&gt;return&lt;/span&gt; (&lt;span style="color: #2b91af"&gt;LayerCollection&lt;/span&gt;)GetValue(LayersProperty); }&lt;br /&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;set&lt;/span&gt; { SetValue(LayersProperty, &lt;span style="color: blue"&gt;value&lt;/span&gt;); }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;double&lt;/span&gt; ZoomFactor {&lt;br /&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;get&lt;/span&gt; { &lt;span style="color: blue"&gt;return&lt;/span&gt; (&lt;span style="color: blue"&gt;double&lt;/span&gt;)&lt;span style="color: blue"&gt;this&lt;/span&gt;.GetValue(ZoomFactorProperty); }&lt;br /&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;set&lt;/span&gt; { &lt;span style="color: blue"&gt;this&lt;/span&gt;.SetValue(ZoomFactorProperty, &lt;span style="color: blue"&gt;value&lt;/span&gt;); }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;private&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;static&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;void&lt;/span&gt; OnLayersPropertyChanged(&lt;span style="color: #2b91af"&gt;DependencyObject&lt;/span&gt; d,&lt;br /&gt;                                     &lt;span style="color: #2b91af"&gt;DependencyPropertyChangedEventArgs&lt;/span&gt; e) {&lt;br /&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: #2b91af"&gt;Magnify&lt;/span&gt; magnify = d &lt;span style="color: blue"&gt;as&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;Magnify&lt;/span&gt;;&lt;br /&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;if&lt;/span&gt; (magnify.MagMap != &lt;span style="color: blue"&gt;null&lt;/span&gt;) {&lt;br /&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; magnify.MagMap.Layers = e.NewValue &lt;span style="color: blue"&gt;as&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;LayerCollection&lt;/span&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;private&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;static&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;void&lt;/span&gt; OnMapPropertyChanged(&lt;span style="color: #2b91af"&gt;DependencyObject&lt;/span&gt; d,&lt;br /&gt;                                     &lt;span style="color: #2b91af"&gt;DependencyPropertyChangedEventArgs&lt;/span&gt; e) {&lt;br /&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: #2b91af"&gt;Magnify&lt;/span&gt; glass = d &lt;span style="color: blue"&gt;as&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;Magnify&lt;/span&gt;;&lt;br /&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: #2b91af"&gt;Map&lt;/span&gt; mapOld = e.OldValue &lt;span style="color: blue"&gt;as&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;Map&lt;/span&gt;;&lt;br /&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;if&lt;/span&gt; (mapOld != &lt;span style="color: blue"&gt;null&lt;/span&gt;) {&lt;br /&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; mapOld.ExtentChanged -= glass.Map_ExtentChanged;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&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: #2b91af"&gt;Map&lt;/span&gt; mapNew = e.NewValue &lt;span style="color: blue"&gt;as&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;Map&lt;/span&gt;;&lt;br /&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;if&lt;/span&gt; (mapNew != &lt;span style="color: blue"&gt;null&lt;/span&gt;) {&lt;br /&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; mapNew.ExtentChanged += glass.Map_ExtentChanged;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;private&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;static&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;void&lt;/span&gt; OnZoomFactorPropertyChanged(&lt;span style="color: #2b91af"&gt;DependencyObject&lt;/span&gt; d,&lt;br /&gt;                                     &lt;span style="color: #2b91af"&gt;DependencyPropertyChangedEventArgs&lt;/span&gt; e) {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; (d &lt;span style="color: blue"&gt;as&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;Magnify&lt;/span&gt;).UpdateMagnifier();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;private&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;void&lt;/span&gt; Map_ExtentChanged(&lt;span style="color: blue"&gt;object&lt;/span&gt; sender, &lt;span style="color: #2b91af"&gt;ExtentEventArgs&lt;/span&gt; e) {&lt;br /&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;this&lt;/span&gt;.UpdateMagnifier();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;private&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;void&lt;/span&gt; MagnifyBox_MouseLeftButtonDown(&lt;span style="color: blue"&gt;object&lt;/span&gt; sender,&lt;br /&gt;                                                   &lt;span style="color: #2b91af"&gt;MouseButtonEventArgs&lt;/span&gt; e) {&lt;br /&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;this&lt;/span&gt;._isdrag = &lt;span style="color: blue"&gt;true&lt;/span&gt;;&lt;br /&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;this&lt;/span&gt;._cursor = &lt;span style="color: blue"&gt;this&lt;/span&gt;.Cursor;&lt;br /&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;this&lt;/span&gt;._begin = e.GetPosition(&lt;span style="color: blue"&gt;null&lt;/span&gt;);&lt;br /&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;this&lt;/span&gt;.Cursor = &lt;span style="color: #2b91af"&gt;Cursors&lt;/span&gt;.None;&lt;br /&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;this&lt;/span&gt;.CaptureMouse();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;private&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;void&lt;/span&gt; MagnifyBox_MouseLeftButtonUp(&lt;span style="color: blue"&gt;object&lt;/span&gt; sender,&lt;br /&gt;                                                   &lt;span style="color: #2b91af"&gt;MouseButtonEventArgs&lt;/span&gt; e) {&lt;br /&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;if&lt;/span&gt; (&lt;span style="color: blue"&gt;this&lt;/span&gt;._isdrag) {&lt;br /&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;this&lt;/span&gt;._isdrag = &lt;span style="color: blue"&gt;false&lt;/span&gt;;&lt;br /&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;this&lt;/span&gt;.ReleaseMouseCapture();&lt;br /&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;this&lt;/span&gt;.UpdateMagnifier();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&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;this&lt;/span&gt;.Cursor = &lt;span style="color: blue"&gt;this&lt;/span&gt;._cursor;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;private&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;void&lt;/span&gt; MagnifyBox_MouseMove(&lt;span style="color: blue"&gt;object&lt;/span&gt; sender, &lt;span style="color: #2b91af"&gt;MouseEventArgs&lt;/span&gt; e) {&lt;br /&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;if&lt;/span&gt; (&lt;span style="color: blue"&gt;this&lt;/span&gt;._isdrag) {&lt;br /&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;this&lt;/span&gt;._current = e.GetPosition(&lt;span style="color: blue"&gt;null&lt;/span&gt;);&lt;br /&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;double&lt;/span&gt; x = &lt;span style="color: blue"&gt;this&lt;/span&gt;._current.X - &lt;span style="color: blue"&gt;this&lt;/span&gt;._begin.X;&lt;br /&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;double&lt;/span&gt; y = &lt;span style="color: blue"&gt;this&lt;/span&gt;._current.Y - &lt;span style="color: blue"&gt;this&lt;/span&gt;._begin.Y;&lt;br /&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; (&lt;span style="color: blue"&gt;this&lt;/span&gt;.FlowDirection == &lt;span style="color: #2b91af"&gt;FlowDirection&lt;/span&gt;.RightToLeft) {&lt;br /&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; x *= -1d;&lt;br /&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;br /&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;this&lt;/span&gt;.Translate.X += x;&lt;br /&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;this&lt;/span&gt;.Translate.Y += y;&lt;br /&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;this&lt;/span&gt;._begin = &lt;span style="color: blue"&gt;this&lt;/span&gt;._current;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;private&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;void&lt;/span&gt; UpdateMagnifier() {&lt;br /&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;if&lt;/span&gt; (&lt;span style="color: blue"&gt;this&lt;/span&gt;.Visibility == &lt;span style="color: #2b91af"&gt;Visibility&lt;/span&gt;.Collapsed) { &lt;span style="color: blue"&gt;return&lt;/span&gt;; }&lt;br /&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;if&lt;/span&gt; (&lt;span style="color: blue"&gt;this&lt;/span&gt;.Map == &lt;span style="color: blue"&gt;null&lt;/span&gt;) { &lt;span style="color: blue"&gt;return&lt;/span&gt;; }&lt;br /&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: #2b91af"&gt;Point&lt;/span&gt; point = &lt;span style="color: blue"&gt;this&lt;/span&gt;.TransformToVisual(&lt;span style="color: blue"&gt;this&lt;/span&gt;.Map).Transform(&lt;br /&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;new&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;Point&lt;/span&gt;(&lt;br /&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;this&lt;/span&gt;.RenderSize.Width * 0.5d + &lt;span style="color: blue"&gt;this&lt;/span&gt;.Translate.X,&lt;br /&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;this&lt;/span&gt;.RenderSize.Height * 0.5d + &lt;span style="color: blue"&gt;this&lt;/span&gt;.Translate.Y&lt;br /&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;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; );&lt;br /&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: #2b91af"&gt;MapPoint&lt;/span&gt; center = &lt;span style="color: blue"&gt;this&lt;/span&gt;.Map.ScreenToMap(point);&lt;br /&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;double&lt;/span&gt; resolution = &lt;span style="color: blue"&gt;this&lt;/span&gt;.Map.Resolution;&lt;br /&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;double&lt;/span&gt; zoomResolution = resolution / &lt;span style="color: blue"&gt;this&lt;/span&gt;.ZoomFactor;&lt;br /&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;double&lt;/span&gt; width = 0.5d * &lt;span style="color: blue"&gt;this&lt;/span&gt;.MagMap.ActualWidth * zoomResolution;&lt;br /&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: #2b91af"&gt;Envelope&lt;/span&gt; envelope = &lt;span style="color: blue"&gt;new&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;Envelope&lt;/span&gt;() {&lt;br /&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; XMin = center.X - width,&lt;br /&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; YMin = center.Y - width,&lt;br /&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; XMax = center.X + width,&lt;br /&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; YMax = center.Y + width,&lt;br /&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; SpatialReference = &lt;span style="color: blue"&gt;this&lt;/span&gt;.MagMap.SpatialReference&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; };&lt;br /&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;this&lt;/span&gt;.MagMap.Extent = envelope;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;}&lt;/pre&gt;

&lt;p&gt;&lt;strong&gt;Here is how to use it:&lt;/strong&gt;&lt;/p&gt;

&lt;pre style="font-family: consolas"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;UserControl&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160; &lt;span style="color: red"&gt; x&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Class&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;TestMagnify.MainPage&amp;quot;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160; &lt;span style="color: red"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160; &lt;span style="color: red"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;x&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160; &lt;span style="color: red"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;d&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;http://schemas.microsoft.com/expression/blend/2008&amp;quot;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160; &lt;span style="color: red"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;mc&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;http://schemas.openxmlformats.org/markup-compatibility/2006&amp;quot;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160; &lt;span style="color: red"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;esri&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;http://schemas.esri.com/arcgis/client/2009&amp;quot;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160; &lt;span style="color: red"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;local&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;clr-namespace:TestMagnify&amp;quot;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160; &lt;span style="color: red"&gt; mc&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Ignorable&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;d&amp;quot;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160; &lt;span style="color: red"&gt; d&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;DesignHeight&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;300&amp;quot;&lt;/span&gt;&lt;span style="color: red"&gt; d&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;DesignWidth&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;400&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Grid&lt;/span&gt;&lt;span style="color: red"&gt; x&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;LayoutRoot&amp;quot;&lt;/span&gt;&lt;span style="color: red"&gt; Background&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;White&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;esri&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Map&lt;/span&gt;&lt;span style="color: red"&gt; x&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;Map&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;esri&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;ArcGISImageServiceLayer&lt;/span&gt;&lt;br /&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; &lt;span style="color: red"&gt; Url&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;http://sampleserver3.arcgisonline.com ~&lt;br /&gt;                     /ArcGIS/rest/services/Portland/Aerial/ImageServer&amp;quot;&lt;/span&gt;&lt;br /&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; &lt;span style="color: red"&gt; ImageFormat&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;JPGPNG&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;esri&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Map&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;local&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Magnify&lt;/span&gt;&lt;span style="color: red"&gt; x&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;Magnify&amp;quot;&lt;/span&gt;&lt;br /&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; &lt;span style="color: red"&gt; Map&lt;/span&gt;&lt;span style="color: blue"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #a31515"&gt;Binding&lt;/span&gt;&lt;span style="color: red"&gt; ElementName&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;Map&lt;/span&gt;&lt;span style="color: blue"&gt;}&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;&lt;/span&gt;&lt;br /&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; &lt;span style="color: red"&gt; ZoomFactor&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;5&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;local&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Magnify.Layers&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;esri&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;LayerCollection&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;esri&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;ArcGISImageServiceLayer&lt;/span&gt;&lt;br /&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; &lt;span style="color: red"&gt; Url&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;http://sampleserver3.arcgisonline.com ~&lt;br /&gt;                        /ArcGIS/rest/services/Portland/Aerial/ImageServer&amp;quot;&lt;/span&gt;&lt;br /&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; &lt;span style="color: red"&gt; ImageFormat&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;JPGPNG&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;esri&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;LayerCollection&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;local&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Magnify.Layers&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;local&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Magnify&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Grid&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;UserControl&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Note: “~” denotes an editorial line continuation.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In conclusion, based on source code extracted from Esri’s &lt;a href="http://esrisilverlight.codeplex.com/"&gt;ArcGIS Silverlight toolkit&lt;/a&gt; project page on &lt;a href="http://www.codeplex.com/"&gt;codeplex&lt;/a&gt;, I was able to create a new magnifier that could support any layer or layers regardless of type. In order to support dynamic layers such an image service layers the new magnifier had to reserve updates until after a drag operation is completed. This is not ideal but unavoidable.&lt;/p&gt;

&lt;p&gt;Using this code I hope you can explore some innovative variants like “x-ray” controls. Fun &lt;em&gt;and&lt;/em&gt; productive controls like these are being increasingly important as web apps are becoming more tactile with &lt;a href="http://www.microsoft.com/windows/windows-7/features/windows-touch.aspx"&gt;touch support&lt;/a&gt; in new hardware like &lt;a href="http://www.microsoft.com/surface/"&gt;this&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8656429443005102101-280289867578258087?l=kiwigis.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/PaJS/~4/stQ7UqFPPT8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://kiwigis.blogspot.com/feeds/280289867578258087/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://kiwigis.blogspot.com/2011/02/custom-magnifier-for-esris-silverlight.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8656429443005102101/posts/default/280289867578258087?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8656429443005102101/posts/default/280289867578258087?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/PaJS/~3/stQ7UqFPPT8/custom-magnifier-for-esris-silverlight.html" title="Custom Magnifier for Esri’s Silverlight SDK" /><author><name>Richie</name><uri>http://www.blogger.com/profile/10195785521277646822</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="30" src="http://3.bp.blogspot.com/-7rc6j-Jfa4M/TXCb1G2wvrI/AAAAAAAABxg/Yp9ZiEl52tA/s220/photo2.JPG" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://lh4.ggpht.com/_1XJYn8xCcGk/TVMWXhkKBDI/AAAAAAAABvU/HgfHbnvPxmY/s72-c/image_thumb%5B4%5D.png?imgmax=800" height="72" width="72" /><thr:total>3</thr:total><feedburner:origLink>http://kiwigis.blogspot.com/2011/02/custom-magnifier-for-esris-silverlight.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUFQHgyeSp7ImA9Wx9VFkU.&quot;"><id>tag:blogger.com,1999:blog-8656429443005102101.post-4785456638046732536</id><published>2011-02-02T15:10:00.001-08:00</published><updated>2011-02-02T15:10:11.691-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-02-02T15:10:11.691-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ArcGIS API for Silverlight" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><category scheme="http://www.blogger.com/atom/ns#" term="Silverlight" /><title>How to preserve the map center as the browser resizes</title><content type="html">&lt;p&gt;By default, when a &lt;a href="http://help.arcgis.com/en/webapi/silverlight/index.html"&gt;Silverlight map&lt;/a&gt; (or its parent) is resized the map scale (or &lt;a href="http://help.arcgis.com/en/webapi/silverlight/apiref/ESRI.ArcGIS.Client~ESRI.ArcGIS.Client.Map~Resolution.html"&gt;resolution&lt;/a&gt;) is preserved but not the map center. Instead, the map is “pinned” to the upper left hand corner.&lt;/p&gt;  &lt;p&gt;In most situations this is desirable but occasionally it is not. The following code snippet will ensure that the current map center (and scale) is preserved as the browser is resized.&lt;/p&gt;  &lt;pre style="font-family: consolas"&gt;&lt;span style="color: blue"&gt;using&lt;/span&gt; System;&lt;br /&gt;&lt;span style="color: blue"&gt;using&lt;/span&gt; System.Windows;&lt;br /&gt;&lt;span style="color: blue"&gt;using&lt;/span&gt; System.Windows.Controls;&lt;br /&gt;&lt;span style="color: blue"&gt;using&lt;/span&gt; ESRI.ArcGIS.Client.Geometry;&lt;br /&gt; &lt;br /&gt;&lt;span style="color: blue"&gt;namespace&lt;/span&gt; SilverlightApplication2 {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;partial&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;class&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;MainPage&lt;/span&gt; : &lt;span style="color: #2b91af"&gt;UserControl&lt;/span&gt; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt; MainPage() {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; InitializeComponent();&lt;br /&gt; &lt;br /&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;this&lt;/span&gt;.SizeChanged += (s, e) =&amp;gt; {&lt;br /&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; (e.PreviousSize.Height == 0 ||&lt;br /&gt;                    e.PreviousSize.Width == 0) { &lt;span style="color: blue"&gt;return&lt;/span&gt;; }&lt;br /&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: #2b91af"&gt;Point&lt;/span&gt; p = &lt;span style="color: blue"&gt;new&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;Point&lt;/span&gt;() {&lt;br /&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; X = (&lt;span style="color: blue"&gt;this&lt;/span&gt;.MyMap.ActualWidth / 2d) - &lt;br /&gt;                        (e.NewSize.Width - e.PreviousSize.Width),&lt;br /&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; Y = (&lt;span style="color: blue"&gt;this&lt;/span&gt;.MyMap.ActualHeight / 2d) -&lt;br /&gt;                        (e.NewSize.Height - e.PreviousSize.Height)&lt;br /&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;br /&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: #2b91af"&gt;MapPoint&lt;/span&gt; m = &lt;span style="color: blue"&gt;this&lt;/span&gt;.MyMap.ScreenToMap(p);&lt;br /&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: #2b91af"&gt;TimeSpan&lt;/span&gt; t = &lt;span style="color: blue"&gt;this&lt;/span&gt;.MyMap.PanDuration;&lt;br /&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;this&lt;/span&gt;.MyMap.PanDuration = &lt;span style="color: #2b91af"&gt;TimeSpan&lt;/span&gt;.Zero;&lt;br /&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;this&lt;/span&gt;.MyMap.PanTo(m);&lt;br /&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;this&lt;/span&gt;.MyMap.PanDuration = t;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; };&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8656429443005102101-4785456638046732536?l=kiwigis.blogspot.com' alt='' /&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/PaJS/~4/JtBl85c5nEA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://kiwigis.blogspot.com/feeds/4785456638046732536/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://kiwigis.blogspot.com/2011/02/how-to-preserve-map-center-as-browser.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8656429443005102101/posts/default/4785456638046732536?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8656429443005102101/posts/default/4785456638046732536?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/PaJS/~3/JtBl85c5nEA/how-to-preserve-map-center-as-browser.html" title="How to preserve the map center as the browser resizes" /><author><name>Richie</name><uri>http://www.blogger.com/profile/10195785521277646822</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="32" height="30" src="http://3.bp.blogspot.com/-7rc6j-Jfa4M/TXCb1G2wvrI/AAAAAAAABxg/Yp9ZiEl52tA/s220/photo2.JPG" /></author><thr:total>0</thr:total><feedburner:origLink>http://kiwigis.blogspot.com/2011/02/how-to-preserve-map-center-as-browser.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEEAQXcyeCp7ImA9Wx9QEUk.&quot;"><id>tag:blogger.com,1999:blog-8656429443005102101.post-1001377352931599881</id><published>2010-12-23T14:17:00.001-08:00</published><updated>2010-12-23T14:17:20.990-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-23T14:17:20.990-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ArcGIS API for Silverlight" /><category scheme="http://www.blogger.com/atom/ns#" term="C#" /><category scheme="http://www.blogger.com/atom/ns#" term="Silverlight" /><title>Remove map whitespace with an alternative “full extent”</title><content type="html">&lt;p&gt;This post describes a technique for calculating an adjusted “full extent” for a &lt;a href="http://help.arcgis.com/en/webapi/silverlight/apiref/ESRI.ArcGIS.Client~ESRI.ArcGIS.Client.Layer.html"&gt;layer&lt;/a&gt; so that content can uniformly fill a &lt;a href="http://help.arcgis.com/en/webapi/silverlight/apiref/ESRI.ArcGIS.Client~ESRI.ArcGIS.Client.Map.html"&gt;map&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;The following &lt;a href="http://msdn.microsoft.com/en-us/library/ms752059.aspx"&gt;XAML&lt;/a&gt; will display simple map using &lt;a href="http://www.esri.com/"&gt;ESRI&lt;/a&gt;’s &lt;a href="http://help.arcgis.com/en/webapi/silverlight/"&gt;ArcGIS API for Silverlight&lt;/a&gt;. The map contains the &lt;a href="http://www.arcgis.com/home/item.html?id=f2498e3d0ff642bfb4b155828351ef0e"&gt;world topo&lt;/a&gt; map service from &lt;a href="http://www.arcgis.com"&gt;ArcGIS Online&lt;/a&gt;.&lt;/p&gt;  &lt;pre style="font-family: consolas"&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;UserControl&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160; &lt;span style="color: red"&gt; x&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Class&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;ESRI.PrototypeLab.DynamicDesign.MainPage&amp;quot;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160; &lt;span style="color: red"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160; &lt;span style="color: red"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;x&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160; &lt;span style="color: red"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;d&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;http://schemas.microsoft.com/expression/blend/2008&amp;quot;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160; &lt;span style="color: red"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;mc&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;http://schemas.openxmlformats.org/markup-compatibility/2006&amp;quot;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160; &lt;span style="color: red"&gt; xmlns&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;esri&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;http://schemas.esri.com/arcgis/client/2009&amp;quot;&lt;/span&gt;&amp;#160;&lt;br /&gt;&amp;#160;&amp;#160; &lt;span style="color: red"&gt; mc&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Ignorable&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;d&amp;quot;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160; &lt;span style="color: red"&gt; d&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;DesignHeight&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;600&amp;quot;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160; &lt;span style="color: red"&gt; d&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;DesignWidth&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;800&amp;quot;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt; &amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;Grid&lt;/span&gt;&lt;span style="color: red"&gt; Background&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;Gray&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;esri&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Map&lt;/span&gt;&lt;span style="color: red"&gt; x&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: red"&gt;Name&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;Map&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;esri&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Map.Layers&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #a31515"&gt;esri&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;ArcGISTiledMapServiceLayer&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: red"&gt;ID&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;topo&amp;quot;&lt;br /&gt;                    &lt;/span&gt;&lt;span style="color: red"&gt;Visible&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;True&amp;quot;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: red"&gt;                    Url&lt;/span&gt;&lt;span style="color: blue"&gt;=&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;quot;http://services.arcgisonline.com/&lt;br /&gt;                         ArcGIS/rest/services/World_Topo_Map/MapServer&amp;quot;&lt;/span&gt;&lt;span style="color: blue"&gt; /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&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&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;esri&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Map.Layers&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;esri&lt;/span&gt;&lt;span style="color: blue"&gt;:&lt;/span&gt;&lt;span style="color: #a31515"&gt;Map&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #a31515"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;Grid&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: blue"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #a31515"&gt;UserControl&lt;/span&gt;&lt;span style="color: blue"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

&lt;p&gt;The code behind below will zoom to the full extent of topo map service.&lt;/p&gt;

&lt;pre style="font-family: consolas"&gt;&lt;span style="color: blue"&gt;using&lt;/span&gt; System.Windows.Controls;&lt;br /&gt; &lt;br /&gt;&lt;span style="color: blue"&gt;namespace&lt;/span&gt; ESRI.PrototypeLab.DynamicDesign {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;partial&lt;/span&gt;&amp;#160;&lt;span style="color: blue"&gt;class&lt;/span&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;MainPage&lt;/span&gt; : &lt;span style="color: #2b91af"&gt;UserControl&lt;/span&gt; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;public&lt;/span&gt; MainPage() {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; InitializeComponent();&lt;br /&gt; &lt;br /&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;// Zoom to full extent&lt;/span&gt;&lt;br /&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;this&lt;/span&gt;.Map.Layers[0].Initialized += (s, e) =&amp;gt; {&lt;br /&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;this&lt;/span&gt;.Map.ZoomTo(&lt;span style="color: blue"&gt;this&lt;/span&gt;.Map.Layers[0].FullExtent);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; };&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;}&lt;/pre&gt;

&lt;p&gt;Depending on the aspect ratio of the browser, this will result in a map with “white space” (or whatever color you use for the background) at either the top/bottom or left/right as sho
