<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.microsoft.co.il/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Shai Raiten&amp;#39;s Blog : .NET 4</title><link>http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET+4/default.aspx</link><description>Tags: .NET 4</description><dc:language>en</dc:language><generator>CommunityServer 2007.1 (Build: 20917.1142)</generator><item><title>הרצת בדיקות על דפדפנים שונים עם Coded UI Testing</title><link>http://blogs.microsoft.co.il/blogs/shair/archive/2013/02/20/coded-ui-testing.aspx</link><pubDate>Thu, 21 Feb 2013 00:05:53 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1757113</guid><dc:creator>shair</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/shair/rsscomments.aspx?PostID=1757113</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2013/02/20/coded-ui-testing.aspx#comments</comments><description>&lt;p dir="rtl"&gt;לאחרונה נתקלתי במספר טענות שלא ניתן להריץ בדיקות Coded UI&amp;#160; על דפדפנים שונים למעט Internet Explorer, אז רק להבהיר – &lt;strong&gt;אכן אפשר!&lt;/strong&gt;&lt;/p&gt;  &lt;p dir="rtl"&gt;אתם צריכים את הדברים הבאים על מנת שהתוסף יעבוד ויאפשר לכם להריץ בדיקות Coded UI על דפדפנים שונים:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div&gt;Visual Studio 2012 Update 1&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div&gt;Chrome 21+&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div&gt;Firefox 15+&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div&gt;IE 9/10&lt;/div&gt;   &lt;/li&gt;    &lt;li&gt;     &lt;div&gt;Windows 7,8 and Server 2008 R2 SP1&lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p dir="rtl"&gt;במידה ואתם עובדים עם Visual Studio 2010 אין צורך לשדרג את השרת, רק להתקין Visual Studio 2012 שיכול לעבוד במקביל עם Visual Studio 2010.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;     &lt;div&gt;ראשית יש להוריד את &lt;a href="http://visualstudiogallery.msdn.microsoft.com/11cfc881-f8c9-4f96-b303-a2780156628d" target="_blank"&gt;Selenium components for Coded UI Cross Browser Testing&lt;/a&gt; או תוכלו להשתמש ב – Visual Studio Extension &lt;/div&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Tools –&amp;gt; Extensions and Updates… –&amp;gt; Online –&amp;gt; Search for = Cross Browser &lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_0B31966A.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_299BD753.png" width="669" height="464" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;לאחר ההתקנה יש להוריד את הדברים הבאים:      &lt;ul&gt;       &lt;li&gt;&lt;a href="http://chromedriver.googlecode.com/files/chromedriver_win_23.0.1240.0.zip" target="_blank"&gt;Chrome Driver&lt;/a&gt; &lt;/li&gt;        &lt;li&gt;&lt;a href="http://selenium.googlecode.com/files/selenium-dotnet-2.25.1.zip" target="_blank"&gt;Selenium dot net bindings&lt;/a&gt; &lt;/li&gt;     &lt;/ul&gt;   &lt;/li&gt; &lt;/ul&gt;  &lt;p dir="rtl"&gt;אחרי שסיימתם להוריד יש להעתיק את התוכן שלהם לספריה המצויינת מטה, מ – Selenium יש להעתיק את התוכן של net40)&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&amp;quot;C:\Program Files\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages&amp;quot; (for 32 bit machines) &lt;/li&gt;    &lt;li&gt;&amp;quot;C:\Program Files (x86)\Common Files\microsoft shared\VSTT\11.0\UITestExtensionPackages&amp;quot; (for 64 bit machines) &lt;/li&gt; &lt;/ul&gt;  &lt;p dir="rtl"&gt;אחרי שסיימנו עם ההתקנות כל מה שנשאר הוא להקליט בדיקה בעזרת Coded UI ולשנות את הערך של BrowserWindow.CurrentBrowser לדפדפן שאתם מעוניינים להריץ עליו את הבדיקה.&lt;/p&gt;  &lt;blockquote&gt;   &lt;pre class="csharpcode"&gt;[TestMethod]
&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; Simple_CUIT_For_WebSite()
{
    BrowserWindow.CurrentBrowser = &lt;span class="str"&gt;&amp;quot;chrome&amp;quot;&lt;/span&gt;; &lt;span class="rem"&gt;//&amp;quot;firefox&amp;quot;&lt;/span&gt;
    &lt;span class="rem"&gt;//Coded UI Methods.....&lt;/span&gt;
}&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p dir="rtl"&gt;סיימתם, עכשיו בדיקות Coded UI יכולות לרוץ על FireFox ו – Google Chrome&lt;/p&gt;

&lt;p dir="rtl"&gt;תהנו!&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1757113" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Testing/default.aspx">Testing</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TECH/default.aspx">TECH</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/How+To/default.aspx">How To</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Coded+UI+Test/default.aspx">Coded UI Test</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/HTML+5/default.aspx">HTML 5</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET+4/default.aspx">.NET 4</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/ALM/default.aspx">ALM</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/IE/default.aspx">IE</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET+4.5/default.aspx">.NET 4.5</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Visual+Studio+2012/default.aspx">Visual Studio 2012</category></item><item><title>Run Windows Store Apps From Desktop</title><link>http://blogs.microsoft.co.il/blogs/shair/archive/2013/02/07/run-windows-store-apps-from-desktop.aspx</link><pubDate>Thu, 07 Feb 2013 14:09:49 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1736848</guid><dc:creator>shair</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/shair/rsscomments.aspx?PostID=1736848</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2013/02/07/run-windows-store-apps-from-desktop.aspx#comments</comments><description>&lt;div class="wlWriterHeaderFooter" style="float:none;margin:0px;padding:4px 0px 4px 0px;"&gt;&lt;iframe src="http://www.facebook.com/widgets/like.php?href=http://blogs.microsoft.co.il/blogs/shair/archive/2013/02/07/run-windows-store-apps-from-desktop.aspx" scrolling="no" frameborder="0" style="border:none;width:450px;height:80px;"&gt;&lt;/iframe&gt;&lt;/div&gt;&lt;p&gt;When customers ask me how they can run Windows Store app from Desktop usually the answer is – &lt;strong&gt;You Can’t, &lt;/strong&gt;but if you really want there is a way to do that.&lt;/p&gt;  &lt;p&gt;The reason I usually answer is You Can’t is because – In order to run Windows Store app from Desktop you need to install &lt;a href="http://msdn.microsoft.com/en-US/windows/apps/jj572486" target="_blank"&gt;Windows App Certification Kit&lt;/a&gt;, this pack contains “&lt;strong&gt;microsoft.windows.softwarelogo.appxlauncher.exe&lt;/strong&gt;” file that can run a Windows Store app by his application model id.&lt;/p&gt;  &lt;p&gt;So if you plan on publishing your app you can’t assume the ACK is installed on the client machine.&lt;/p&gt;  &lt;p&gt;Again, if you really want… Let me show you.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_11119BD1.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_75C91D02.png" width="907" height="538" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/1736841/download.aspx" target="_blank"&gt;Download Demo Project&lt;/a&gt;&lt;/p&gt;  &lt;h2&gt;Step 1: Getting Started&lt;/h2&gt;  &lt;p&gt;First create a WPF project and add the following reference:&lt;/p&gt;  &lt;p&gt;“C:\Program Files (x86)\Windows Kits\8.0\App Certification Kit\microsoft.windows.softwarelogo.shared.dll”&lt;/p&gt;  &lt;h2&gt;Step 2: Getting Windows App List&lt;/h2&gt;  &lt;p&gt;The reason you need to add reference to “Microsoft.Windows.Softwarelogo.Shared.dll” so we can receive the program inventory xml file, this file contains the complete list of all installed Windows Store apps.&lt;/p&gt;  &lt;p&gt;Under my PC here is the file location - &lt;u&gt;&amp;quot;C:\\Users\\Shai\\AppData\\Local\\Microsoft\\AppCertKit\\programinventory_e25bb752-e7cf-4fb2-8194-874ba9b91c7b.xml&amp;quot;&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;As I said this file contains all Windows Store app installed on you machine, each Program element under that file will show all the information regarding that specific app.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_70B6B986.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_268B88D4.png" width="924" height="357" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;So, how do you get the file location?&lt;/p&gt;  &lt;p&gt;It’s very simple, using &lt;strong&gt;GlobaldataAccessor&lt;/strong&gt; method from &lt;strong&gt;softwarelogo.shared.dll&lt;/strong&gt; you can get the Program Inventory Location string.&lt;/p&gt;  &lt;blockquote&gt;   &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;string&lt;/span&gt; itemValue = GlobalDataAccessor.GetItemValue(&lt;span class="str"&gt;&amp;quot;ProgramInventoryLocation&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;PRE_PROCESS&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;Once you got this file all you need is parsing the XML and create a collection on Apps.&lt;/p&gt;

&lt;p&gt;I’ve create a &lt;strong&gt;ProductInfo&lt;/strong&gt; class that will represent each Program in the file, as you can see from the code below I simply taking the attributes and elements from the Program element.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; ProductInfo : INotifyPropertyChanged
    {
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;event&lt;/span&gt; PropertyChangedEventHandler PropertyChanged;

        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; NotifyPropertyChanged(String propertyName = &lt;span class="str"&gt;&amp;quot;&amp;quot;&lt;/span&gt;)
        {
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (PropertyChanged != &lt;span class="kwrd"&gt;null&lt;/span&gt;)
            {
                PropertyChanged(&lt;span class="kwrd"&gt;this&lt;/span&gt;, &lt;span class="kwrd"&gt;new&lt;/span&gt; PropertyChangedEventArgs(propertyName));
            }
        }

        &lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; _Status;
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Status
        {
            get { &lt;span class="kwrd"&gt;return&lt;/span&gt; _Status; }
            set
            {
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (&lt;span class="kwrd"&gt;value&lt;/span&gt; != &lt;span class="kwrd"&gt;this&lt;/span&gt;._Status)
                {
                    &lt;span class="kwrd"&gt;this&lt;/span&gt;._Status = &lt;span class="kwrd"&gt;value&lt;/span&gt;;
                    NotifyPropertyChanged(&lt;span class="str"&gt;&amp;quot;Status&amp;quot;&lt;/span&gt;);
                }
            }
        }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; LogoUrl { get; set; }
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; ProductName { get; set; }
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; ProductVendor { get; set; }
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; ProductLanguage { get; set; }
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; ProductVersion { get; set; }
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; RootDirPath { get; set; }
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; Id { get; set; }
        &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; PackageFullName { get; set; }

        &lt;span class="kwrd"&gt;public&lt;/span&gt; ProductInfo(XmlNode xNode)
        {
            var attrib = xNode.Attributes[&lt;span class="str"&gt;&amp;quot;Name&amp;quot;&lt;/span&gt;];
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (attrib != &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; !&lt;span class="kwrd"&gt;string&lt;/span&gt;.IsNullOrEmpty(attrib.Value)) ProductName = attrib.Value;

            attrib = xNode.Attributes[&lt;span class="str"&gt;&amp;quot;Version&amp;quot;&lt;/span&gt;];
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (attrib != &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; !&lt;span class="kwrd"&gt;string&lt;/span&gt;.IsNullOrEmpty(attrib.Value)) ProductVersion = attrib.Value;

            attrib = xNode.Attributes[&lt;span class="str"&gt;&amp;quot;Language&amp;quot;&lt;/span&gt;];
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (attrib != &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; !&lt;span class="kwrd"&gt;string&lt;/span&gt;.IsNullOrEmpty(attrib.Value)) ProductLanguage = attrib.Value;

            attrib = xNode.Attributes[&lt;span class="str"&gt;&amp;quot;Publisher&amp;quot;&lt;/span&gt;];
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (attrib != &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; !&lt;span class="kwrd"&gt;string&lt;/span&gt;.IsNullOrEmpty(attrib.Value)) ProductVendor = attrib.Value;

            attrib = xNode.Attributes[&lt;span class="str"&gt;&amp;quot;RootDirPath&amp;quot;&lt;/span&gt;];
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (attrib != &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; !&lt;span class="kwrd"&gt;string&lt;/span&gt;.IsNullOrEmpty(attrib.Value)) RootDirPath = attrib.Value;

            attrib = xNode.Attributes[&lt;span class="str"&gt;&amp;quot;Id&amp;quot;&lt;/span&gt;];
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (attrib != &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; !&lt;span class="kwrd"&gt;string&lt;/span&gt;.IsNullOrEmpty(attrib.Value)) Id = attrib.Value;

            var node = xNode.SelectSingleNode(&lt;span class="str"&gt;&amp;quot;/Log/ProgramList/Program[@Id=&amp;#39;&amp;quot;&lt;/span&gt; + &lt;span class="kwrd"&gt;this&lt;/span&gt;.Id + &lt;span class="str"&gt;&amp;quot;&amp;#39;]/Indicators/PackageManifestIndicator/Properties/Logo&amp;quot;&lt;/span&gt;);
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (node != &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; !&lt;span class="kwrd"&gt;string&lt;/span&gt;.IsNullOrEmpty(node.InnerText))
            {
                var imgUrl = System.IO.Path.Combine(RootDirPath, node.InnerText);
                &lt;span class="kwrd"&gt;if&lt;/span&gt; (File.Exists(imgUrl))
                    LogoUrl = imgUrl;
            }

            node = xNode.SelectSingleNode(&lt;span class="str"&gt;&amp;quot;/Log/ProgramList/Program[@Id=&amp;#39;&amp;quot;&lt;/span&gt; + &lt;span class="kwrd"&gt;this&lt;/span&gt;.Id + &lt;span class="str"&gt;&amp;quot;&amp;#39;]/Indicators/PackageManifestIndicator/PackageManifest&amp;quot;&lt;/span&gt;);
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (node != &lt;span class="kwrd"&gt;null&lt;/span&gt; &amp;amp;&amp;amp; !&lt;span class="kwrd"&gt;string&lt;/span&gt;.IsNullOrEmpty(node.Attributes[&lt;span class="str"&gt;&amp;quot;PackageFullName&amp;quot;&lt;/span&gt;].InnerText))
            {
                PackageFullName = node.Attributes[&lt;span class="str"&gt;&amp;quot;PackageFullName&amp;quot;&lt;/span&gt;].InnerText;
            }
        }
    }&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;And now, let’s connect the two part together, the first thing is getting the &lt;strong&gt;ProgramInventorylocation&lt;/strong&gt; and after that just load that Xml file and parse it to objects with the information you want.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; BuildAppsList()
{
    &lt;span class="kwrd"&gt;string&lt;/span&gt; itemValue = GlobalDataAccessor.GetItemValue(&lt;span class="str"&gt;&amp;quot;ProgramInventoryLocation&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;PRE_PROCESS&amp;quot;&lt;/span&gt;);

    XmlNodeList list = &lt;span class="kwrd"&gt;null&lt;/span&gt;;
    var reportDoc = &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlDocument();
    reportDoc.Load(itemValue);
    ProductList = &lt;span class="kwrd"&gt;new&lt;/span&gt; ObservableCollection&amp;lt;ProductInfo&amp;gt;();

    list = reportDoc.GetElementsByTagName(&lt;span class="str"&gt;&amp;quot;Program&amp;quot;&lt;/span&gt;);
    &lt;span class="kwrd"&gt;if&lt;/span&gt; (list.Count &amp;lt; 1)
    {
        &lt;span class="kwrd"&gt;throw&lt;/span&gt; &lt;span class="kwrd"&gt;new&lt;/span&gt; XmlException();
    }
    &lt;span class="kwrd"&gt;foreach&lt;/span&gt; (XmlNode node &lt;span class="kwrd"&gt;in&lt;/span&gt; list)
    {
        ProductInfo item = &lt;span class="kwrd"&gt;new&lt;/span&gt; ProductInfo(node);
        ProductList.Add(item);
    }

    dbTable.ItemsSource = ProductList;
}&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;h2&gt;Step 3: Get App User Model Id&lt;/h2&gt;

&lt;p&gt;Now after you got all Windows Store app installed on your machine it’s time to run them. In order to run a Windows Store app you’ll need to obtain the &lt;strong&gt;AppUserModelId,&lt;/strong&gt; the reason you need to &lt;strong&gt;AppUserModelId &lt;/strong&gt;is because the &lt;u&gt;appxlauncher.exe&lt;/u&gt; needs this value in order to launch the application. (Package Name is not enough).&lt;/p&gt;

&lt;p&gt;After completing Step 2 we got the App Package Full Name, we need to use this value to find the &lt;strong&gt;AppUserModelId&lt;/strong&gt; from registry.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;HKEY_CURRENT_USER\Software\Classes\ActivatableClasses\Package\**PackageFullName**\Server&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_0811221E.png"&gt;&lt;img title="image" style="border-left-width:0px;border-right-width:0px;background-image:none;border-bottom-width:0px;padding-top:0px;padding-left:0px;display:inline;padding-right:0px;border-top-width:0px;" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_2F1BBB93.png" width="911" height="230" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So let’s add the following method, this method receive a &lt;strong&gt;packageFullName&lt;/strong&gt; string and perform a search in the registry for the &lt;strong&gt;AppUserModelId&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; &lt;span class="kwrd"&gt;string&lt;/span&gt; GetAppUserModelId(&lt;span class="kwrd"&gt;string&lt;/span&gt; packageFullName)
{
    &lt;span class="kwrd"&gt;string&lt;/span&gt; str = &lt;span class="kwrd"&gt;string&lt;/span&gt;.Empty;
    &lt;span class="kwrd"&gt;using&lt;/span&gt; (RegistryKey key = Registry.CurrentUser.CreateSubKey(&lt;span class="kwrd"&gt;string&lt;/span&gt;.Format(&lt;span class="str"&gt;@&amp;quot;SOFTWARE\Classes\ActivatableClasses\Package\{0}\Server\&amp;quot;,&lt;br /&gt;                                                                               packageFullName)))
    {
        if (key == null) return str;

        var appKeys = from k in key.GetSubKeyNames()
                        where !k.StartsWith(&amp;quot;&lt;/span&gt;BackgroundTransferHost&lt;span class="str"&gt;&amp;quot;)
                        select k;

        foreach (var appKey in appKeys)
        {
            using (RegistryKey serverKey = key.OpenSubKey(appKey))
            {
                if (serverKey.GetValue(&amp;quot;&lt;/span&gt;AppUserModelId&lt;span class="str"&gt;&amp;quot;) != null)
                {
                    str = serverKey.GetValue(&amp;quot;&lt;/span&gt;AppUserModelId&amp;quot;).ToString();
                    serverKey.Close();
                    &lt;span class="kwrd"&gt;break&lt;/span&gt;;
                }
            }
        }
    }

    &lt;span class="kwrd"&gt;return&lt;/span&gt; str;
}&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;h2&gt;Step 4: Running Windows Store App&lt;/h2&gt;

&lt;p&gt;After we have the &lt;strong&gt;AppUserModelId &lt;/strong&gt;string for a specific Windows Store app we can run it.&lt;/p&gt;

&lt;p&gt;You can test it by opening command line and write the following:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;C:\Program Files (x86)\Windows Kits\8.0\App Certification Kit\Microsoft.Windows.SoftwareLogo.AppxLauncher.exe &lt;strong&gt;&lt;u&gt;“AppUserModelId”&lt;/u&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;u&gt;&lt;strong&gt;Start App Button&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; StartApp_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, RoutedEventArgs e)
{
    var product = ((System.Windows.Controls.Button)sender).Tag &lt;span class="kwrd"&gt;as&lt;/span&gt; ProductInfo;
    var appUserModelId = Helpers.GetAppUserModelId(product.PackageFullName);

    var exec = &lt;span class="str"&gt;@&amp;quot;C:\Program Files (x86)\Windows Kits\8.0\App Certification Kit\Microsoft.Windows.SoftwareLogo.AppxLauncher.exe&amp;quot;&lt;/span&gt;;

    &lt;span class="kwrd"&gt;if&lt;/span&gt; (!File.Exists(exec))
    {
        System.Windows.MessageBox.Show(&lt;span class="str"&gt;&amp;quot;Please install Windows App Certification Kit for Windows RT&amp;quot;&lt;/span&gt;);
    }

    var processInfo = &lt;span class="kwrd"&gt;new&lt;/span&gt; ProcessStartInfo()
    {
        Arguments = appUserModelId,
        UseShellExecute = &lt;span class="kwrd"&gt;false&lt;/span&gt;,
        CreateNoWindow = &lt;span class="kwrd"&gt;true&lt;/span&gt;,
        FileName = exec
    };

    Process.Start(processInfo);
}&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;h2&gt;Step 5: Get Application Status&lt;/h2&gt;

&lt;p&gt;The last thing you might want is to know the App execution state, in order to do that you need to use &lt;strong&gt;IPackageDebugSettings - &lt;/strong&gt;Enables debugger developers control over the lifecycle of a Windows Store app, such as when it is suspended or resumed. (&lt;a title="http://msdn.microsoft.com/en-us/library/hh438393(v=vs.85).aspx" href="http://msdn.microsoft.com/en-us/library/hh438393(v=vs.85).aspx"&gt;http://msdn.microsoft.com/en-us/library/hh438393(v=vs.85).aspx&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt; for that create a &lt;strong&gt;PackageStatushelper&lt;/strong&gt; class with the following code:&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; PackageStatusHelper
{
    [ComImport, Guid(&lt;span class="str"&gt;&amp;quot;B1AEC16F-2383-4852-B0E9-8F0B1DC66B4D&amp;quot;&lt;/span&gt;)]
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;class&lt;/span&gt; PackageDebugSettings
    {
    }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;enum&lt;/span&gt; PACKAGE_EXECUTION_STATE
    {
        PES_UNKNOWN,
        PES_RUNNING,
        PES_SUSPENDING,
        PES_SUSPENDED,
        PES_TERMINATED
    }

    [ComImport, Guid(&lt;span class="str"&gt;&amp;quot;F27C3930-8029-4AD1-94E3-3DBA417810C1&amp;quot;&lt;/span&gt;), InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;interface&lt;/span&gt; IPackageDebugSettings
    {
        &lt;span class="kwrd"&gt;int&lt;/span&gt; EnableDebugging([MarshalAs(UnmanagedType.LPWStr)] &lt;span class="kwrd"&gt;string&lt;/span&gt; packageFullName, [MarshalAs(UnmanagedType.LPWStr)]&lt;br /&gt;                                                              &lt;span class="kwrd"&gt;string&lt;/span&gt; debuggerCommandLine, IntPtr environment);
        &lt;span class="kwrd"&gt;int&lt;/span&gt; DisableDebugging([MarshalAs(UnmanagedType.LPWStr)] &lt;span class="kwrd"&gt;string&lt;/span&gt; packageFullName);
        &lt;span class="kwrd"&gt;int&lt;/span&gt; Suspend([MarshalAs(UnmanagedType.LPWStr)] &lt;span class="kwrd"&gt;string&lt;/span&gt; packageFullName);
        &lt;span class="kwrd"&gt;int&lt;/span&gt; Resume([MarshalAs(UnmanagedType.LPWStr)] &lt;span class="kwrd"&gt;string&lt;/span&gt; packageFullName);
        &lt;span class="kwrd"&gt;int&lt;/span&gt; TerminateAllProcesses([MarshalAs(UnmanagedType.LPWStr)] &lt;span class="kwrd"&gt;string&lt;/span&gt; packageFullName);
        &lt;span class="kwrd"&gt;int&lt;/span&gt; SetTargetSessionId(&lt;span class="kwrd"&gt;int&lt;/span&gt; sessionId);
        &lt;span class="kwrd"&gt;int&lt;/span&gt; EnumerageBackgroundTasks([MarshalAs(UnmanagedType.LPWStr)] &lt;span class="kwrd"&gt;string&lt;/span&gt; packageFullName, &lt;br /&gt;                                                      &lt;span class="kwrd"&gt;out&lt;/span&gt; &lt;span class="kwrd"&gt;uint&lt;/span&gt; taskCount, &lt;span class="kwrd"&gt;out&lt;/span&gt; &lt;span class="kwrd"&gt;int&lt;/span&gt; intPtr, [Out] &lt;span class="kwrd"&gt;string&lt;/span&gt;[] array);
        &lt;span class="kwrd"&gt;int&lt;/span&gt; ActivateBackgroundTask(IntPtr something);
        &lt;span class="kwrd"&gt;int&lt;/span&gt; StartServicing([MarshalAs(UnmanagedType.LPWStr)] &lt;span class="kwrd"&gt;string&lt;/span&gt; packageFullName);
        &lt;span class="kwrd"&gt;int&lt;/span&gt; StopServicing([MarshalAs(UnmanagedType.LPWStr)] &lt;span class="kwrd"&gt;string&lt;/span&gt; packageFullName);
        &lt;span class="kwrd"&gt;int&lt;/span&gt; StartSessionRedirection([MarshalAs(UnmanagedType.LPWStr)] &lt;span class="kwrd"&gt;string&lt;/span&gt; packageFullName, &lt;span class="kwrd"&gt;uint&lt;/span&gt; sessionId);
        &lt;span class="kwrd"&gt;int&lt;/span&gt; StopSessionRedirection([MarshalAs(UnmanagedType.LPWStr)] &lt;span class="kwrd"&gt;string&lt;/span&gt; packageFullName);
        &lt;span class="kwrd"&gt;int&lt;/span&gt; GetPackageExecutionState([MarshalAs(UnmanagedType.LPWStr)] &lt;span class="kwrd"&gt;string&lt;/span&gt; packageFullName,&lt;br /&gt;                                            &lt;span class="kwrd"&gt;out&lt;/span&gt; PACKAGE_EXECUTION_STATE packageExecutionState);
        &lt;span class="kwrd"&gt;int&lt;/span&gt; RegisterForPackageStateChanges([MarshalAs(UnmanagedType.LPWStr)] &lt;span class="kwrd"&gt;string&lt;/span&gt; packageFullName, &lt;br /&gt;                               IntPtr pPackageExecutionStateChangeNotification, &lt;span class="kwrd"&gt;out&lt;/span&gt; &lt;span class="kwrd"&gt;uint&lt;/span&gt; pdwCookie);
        &lt;span class="kwrd"&gt;int&lt;/span&gt; UnregisterForPackageStateChanges(&lt;span class="kwrd"&gt;uint&lt;/span&gt; dwCookie);
    }

    &lt;span class="kwrd"&gt;public&lt;/span&gt; &lt;span class="kwrd"&gt;static&lt;/span&gt; PACKAGE_EXECUTION_STATE GetPackageExecutionState(&lt;span class="kwrd"&gt;string&lt;/span&gt; packageFullName)
    {
        PACKAGE_EXECUTION_STATE packageExecutionState = PACKAGE_EXECUTION_STATE.PES_UNKNOWN;
        PackageDebugSettings settings = &lt;span class="kwrd"&gt;new&lt;/span&gt; PackageDebugSettings();
        IPackageDebugSettings settings2 = (IPackageDebugSettings)settings;
        &lt;span class="kwrd"&gt;try&lt;/span&gt;
        {
            &lt;span class="kwrd"&gt;if&lt;/span&gt; (settings2.GetPackageExecutionState(packageFullName, &lt;span class="kwrd"&gt;out&lt;/span&gt; packageExecutionState) != 0)
            {
                System.Windows.MessageBox.Show(&lt;span class="str"&gt;&amp;quot;Failed to get package execution state.&amp;quot;&lt;/span&gt;, &lt;span class="str"&gt;&amp;quot;GetPackageExecutionState&amp;quot;&lt;/span&gt;);
            }
        }
        &lt;span class="kwrd"&gt;catch&lt;/span&gt; (Exception ex)
        {
            System.Windows.MessageBox.Show(ex.Message, &lt;span class="str"&gt;&amp;quot;GetPackageExecutionState&amp;quot;&lt;/span&gt;);
        }
        &lt;span class="kwrd"&gt;return&lt;/span&gt; packageExecutionState;
    }
}&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;And from the application you can just call the GetPackageExecutionState passing the Package Full Name&lt;/p&gt;

&lt;blockquote&gt;
  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;private&lt;/span&gt; &lt;span class="kwrd"&gt;void&lt;/span&gt; GetAppStatus_Click(&lt;span class="kwrd"&gt;object&lt;/span&gt; sender, RoutedEventArgs e)
{
    var btn = (System.Windows.Controls.Button)sender;
    var product = btn.Tag &lt;span class="kwrd"&gt;as&lt;/span&gt; ProductInfo;
    var status = PackageStatusHelper.GetPackageExecutionState(product.PackageFullName);

    &lt;span class="kwrd"&gt;switch&lt;/span&gt; (status)
    {
        &lt;span class="kwrd"&gt;case&lt;/span&gt; PackageStatusHelper.PACKAGE_EXECUTION_STATE.PES_RUNNING:
            btn.Foreground = &lt;span class="kwrd"&gt;new&lt;/span&gt; SolidColorBrush(Colors.Green);
            btn.Content = &lt;span class="str"&gt;&amp;quot;Running&amp;quot;&lt;/span&gt;;
            &lt;span class="kwrd"&gt;break&lt;/span&gt;;
        &lt;span class="kwrd"&gt;case&lt;/span&gt; PackageStatusHelper.PACKAGE_EXECUTION_STATE.PES_SUSPENDED:
            btn.Foreground = &lt;span class="kwrd"&gt;new&lt;/span&gt; SolidColorBrush(Colors.Orange);
            btn.Content = &lt;span class="str"&gt;&amp;quot;Suspended&amp;quot;&lt;/span&gt;;
            &lt;span class="kwrd"&gt;break&lt;/span&gt;;
        &lt;span class="kwrd"&gt;case&lt;/span&gt; PackageStatusHelper.PACKAGE_EXECUTION_STATE.PES_TERMINATED:
            btn.Foreground = &lt;span class="kwrd"&gt;new&lt;/span&gt; SolidColorBrush(Colors.Red);
            btn.Content = &lt;span class="str"&gt;&amp;quot;Terminated&amp;quot;&lt;/span&gt;;
            &lt;span class="kwrd"&gt;break&lt;/span&gt;;
        &lt;span class="kwrd"&gt;default&lt;/span&gt;:
            btn.Foreground = &lt;span class="kwrd"&gt;new&lt;/span&gt; SolidColorBrush(Colors.Gray);
            btn.Content = &lt;span class="str"&gt;&amp;quot;Unkown&amp;quot;&lt;/span&gt;;
            &lt;span class="kwrd"&gt;break&lt;/span&gt;;
    }
}&lt;/pre&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/1736841/download.aspx" target="_blank"&gt;Download Demo Project&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Enjoy&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1736848" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Development/default.aspx">Development</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TECH/default.aspx">TECH</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/ITPRO/default.aspx">ITPRO</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/How+To/default.aspx">How To</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET+4/default.aspx">.NET 4</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Metro+Style/default.aspx">Metro Style</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Windows+8/default.aspx">Windows 8</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Metro/default.aspx">Metro</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Visual+Studio+2012/default.aspx">Visual Studio 2012</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Windows+Store/default.aspx">Windows Store</category></item><item><title>Copy Source As Html-Visual Studio 11</title><link>http://blogs.microsoft.co.il/blogs/shair/archive/2012/04/10/copy-source-as-html-visual-studio-11.aspx</link><pubDate>Wed, 11 Apr 2012 01:21:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1060402</guid><dc:creator>shair</dc:creator><slash:comments>2</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/shair/rsscomments.aspx?PostID=1060402</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2012/04/10/copy-source-as-html-visual-studio-11.aspx#comments</comments><description>&lt;div class="share-buttons"&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;PADDING-RIGHT:15px;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;&lt;a class="twitter-share-button" href="http://blogs.microsoft.co.il/blogs/shair/archive/2012/04/10/copy-source-as-html-visual-studio-11.aspx"&gt;Tweet&lt;/a&gt;&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;PADDING-RIGHT:25px;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;
&lt;script type="IN/Share"&gt;&lt;/script&gt;
&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;&lt;iframe style="BORDER-BOTTOM:medium none;BORDER-LEFT:medium none;WIDTH:100px;HEIGHT:21px;OVERFLOW:hidden;BORDER-TOP:medium none;BORDER-RIGHT:medium none;" src="http://www.facebook.com/plugins/like.php?href=http://blogs.microsoft.co.il/blogs/shair/archive/2012/04/10/copy-source-as-html-visual-studio-11.aspx&amp;amp;send=false&amp;amp;layout=button_count&amp;amp;width=450&amp;amp;show_faces=false&amp;amp;action=like&amp;amp;colorscheme=light&amp;amp;font=segoe+ui&amp;amp;height=21&amp;amp;appId=184186808308137" frameborder="0"&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;
&lt;div class="g-plusone"&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;
&lt;p&gt;I think this is a most tool for any blogger out there, most of my posts contains Source Code &lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_5EA15DCA.png"&gt;&lt;img title="image" style="border-top:0px;border-right:0px;background-image:none;border-bottom:0px;float:right;padding-top:0px;padding-left:0px;border-left:0px;display:inline;padding-right:0px;" border="0" alt="image" align="right" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_4C951A3D.png" width="307" height="292" /&gt;&lt;/a&gt;examples and pasting Source Code without Colors and Format is just ugly.&lt;/p&gt;  &lt;p&gt;In Visual Studio 2010 Microsoft released the Productivity Tools that has the Copy Source Code as Html built in, also there is a CodePlex project - &lt;a href="http://copysourceashtml.codeplex.com/"&gt;http://copysourceashtml.codeplex.com/&lt;/a&gt; that supports Visual Studio 2005 and 2008.&lt;/p&gt;  &lt;p&gt;Because Productivity Tools for Visual Studio 11 Beta isn’t out yet I’ve modified the CopySourceAsHtml project to Visual Studio 11 Beta + Some code changes (Bad performance loading visual studio).&lt;/p&gt;  &lt;p&gt;This setup file supports – Visual Studio 2005,2008,2010 and 11 Beta.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/1060400/download.aspx" target="_blank"&gt;&lt;img alt="msi" src="http://blogs.microsoft.co.il/utility/filethumbnails/msi.gif" /&gt;&lt;/a&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/1060400/download.aspx" target="_blank"&gt;Download Msi&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Using Copy Source Code As Html&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;u&gt;Without &lt;/u&gt;    &lt;br /&gt;using System.Reflection;    &lt;br /&gt;using System.Runtime.CompilerServices;&lt;/p&gt;  &lt;p&gt;&lt;u&gt;With&lt;/u&gt;&lt;/p&gt;  &lt;div style="background:white;"&gt;   &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#008080"&gt;&lt;font style="font-size:10pt;"&gt;&amp;#160;&amp;#160;&amp;#160; 1&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:10pt;"&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;/span&gt; System.Reflection;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt;    &lt;p style="margin:0px;"&gt;&lt;font face="Consolas"&gt;&lt;span&gt;&lt;font color="#008080"&gt;&lt;font style="font-size:10pt;"&gt;&amp;#160;&amp;#160;&amp;#160; 2&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:10pt;"&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;/span&gt; System.Runtime.CompilerServices;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/div&gt;  &lt;p&gt;Enjoy&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1060402" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Development/default.aspx">Development</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TECH/default.aspx">TECH</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Visual+Studio+2010/default.aspx">Visual Studio 2010</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET+4/default.aspx">.NET 4</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Tools/default.aspx">Tools</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Visual+Studio+11/default.aspx">Visual Studio 11</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET+4.5/default.aspx">.NET 4.5</category></item><item><title>Windows Phone 7 – Build Puzzle Game</title><link>http://blogs.microsoft.co.il/blogs/shair/archive/2012/02/19/windows-phone-7-build-puzzle-game.aspx</link><pubDate>Sun, 19 Feb 2012 20:25:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1016482</guid><dc:creator>shair</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/shair/rsscomments.aspx?PostID=1016482</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2012/02/19/windows-phone-7-build-puzzle-game.aspx#comments</comments><description>&lt;div class="share-buttons"&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;PADDING-RIGHT:15px;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;&lt;a class="twitter-share-button" href="http://blogs.microsoft.co.il/blogs/shair/archive/2012/02/19/windows-phone-7-build-puzzle-game.aspx"&gt;Tweet&lt;/a&gt;&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;PADDING-RIGHT:25px;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;
&lt;script type="IN/Share"&gt;&lt;/script&gt;
&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;&lt;iframe style="BORDER-BOTTOM:medium none;BORDER-LEFT:medium none;WIDTH:100px;HEIGHT:21px;OVERFLOW:hidden;BORDER-TOP:medium none;BORDER-RIGHT:medium none;" src="http://www.facebook.com/plugins/like.php?href=http://blogs.microsoft.co.il/blogs/shair/archive/2012/02/19/windows-phone-7-build-puzzle-game.aspx&amp;amp;send=false&amp;amp;layout=button_count&amp;amp;width=450&amp;amp;show_faces=false&amp;amp;action=like&amp;amp;colorscheme=light&amp;amp;font=segoe+ui&amp;amp;height=21&amp;amp;appId=184186808308137" frameborder="0"&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;
&lt;div class="g-plusone"&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;
&lt;p&gt;Over my last posts I talked about Windows Phone 7, we saw some real examples for Location Service, Maps, Ads, Accelerometer and more.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2012/01/29/windows-phone-7-location-service-and-bing-maps.aspx"&gt;Location Service and Bing Maps&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2012/02/01/windows-phone-7-raise-my-dog-russian.aspx"&gt;Raise My Dog–Russian&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2012/01/27/how-to-connect-window-phone-7-and-windows-8-app-to-microsoft-pubcenter.aspx"&gt;Connect Window Phone 7 and Windows 8 app to Microsoft pubCenter&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2012/01/28/accelerometer-sensor-for-windows-phone-7.aspx"&gt;Accelerometer Sensor for Windows Phone 7&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Because I saw how many of you download my demo projects I understand the need for more demos around Windows Phone 7.&lt;/p&gt;  &lt;p&gt;So Today, we’ll build a Puzzle Game for Windows Phone 7 (Including the Sources &lt;img style="border-bottom-style:none;border-left-style:none;border-top-style:none;border-right-style:none;" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://blogs.microsoft.co.il/blogs/shair/wlEmoticon-smile_1E2789C5.png" /&gt;)&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_35DEC12B.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_0D133615.png" width="309" height="492" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/shair/entry1016481.aspx"&gt;Download Demo Project&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Step 1: The Puzzle Base&lt;/h3&gt;  &lt;p&gt;There are several ways to build the puzzle layer, In my demo I chose a simple way of a Canvas with 16 children&amp;#39;s type of StackPanel.&lt;/p&gt;  &lt;p&gt;Basically I have a lower canvas with the Board image, on top of it I put another canvas with 16 Stack Panels, each panel spread to 100X100&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_59870151.png"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_3B0C9A9B.png" width="238" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now, when I have the main puzzle structure I added an image of size 95x95 to each Stack Panel. (the reason it’s not 100X100 – is to leave a space between each), for each image I set the Tag property with the value of the image – 1.png Tag = 1&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_7BEB6A3F.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_57863A23.png" width="240" height="244" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;I’ve also add a timer for counting the time took to solve this puzzle and another int property to count the moves the user made.&lt;/p&gt;  &lt;h3&gt;Step 2: Find&lt;/h3&gt;  &lt;p&gt;One of the most common things we’ll use in our code, is FIND:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Find Stack Panel by Image Id &lt;/li&gt;    &lt;li&gt;Find the Empty Panel &lt;/li&gt;    &lt;li&gt;Find the Value by position &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Find the parent of image with a specific Tag value&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#2b91af"&gt;&lt;font style="font-size:12pt;"&gt;StackPanel&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt; FindStackPanelByTagId(&lt;span&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;/span&gt; tag)&lt;br /&gt;{&lt;br /&gt;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (tag == 16)&lt;br /&gt;&amp;#160; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt; (&lt;span&gt;&lt;font color="#0000ff"&gt;from&lt;/font&gt;&lt;/span&gt; stackPanel &lt;span&gt;&lt;font color="#0000ff"&gt;in&lt;/font&gt;&lt;/span&gt; ContentPanel.Children.OfType&amp;lt;&lt;span&gt;&lt;font color="#2b91af"&gt;StackPanel&lt;/font&gt;&lt;/span&gt;&amp;gt;() &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;where&lt;/font&gt;&lt;/span&gt; stackPanel.Children.Count == 0 &lt;span&gt;&lt;font color="#0000ff"&gt;select&lt;/font&gt;&lt;/span&gt; stackPanel).First();&lt;br /&gt;&amp;#160; }&lt;br /&gt;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;else&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;#160; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt; (&lt;span&gt;&lt;font color="#0000ff"&gt;from&lt;/font&gt;&lt;/span&gt; stackPanel &lt;span&gt;&lt;font color="#0000ff"&gt;in&lt;/font&gt;&lt;/span&gt; ContentPanel.Children.OfType&amp;lt;&lt;span&gt;&lt;font color="#2b91af"&gt;StackPanel&lt;/font&gt;&lt;/span&gt;&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; &lt;span&gt;&lt;font color="#0000ff"&gt;from&lt;/font&gt;&lt;/span&gt; img &lt;span&gt;&lt;font color="#0000ff"&gt;in&lt;/font&gt;&lt;/span&gt; stackPanel.Children.OfType&amp;lt;&lt;span&gt;&lt;font color="#2b91af"&gt;Image&lt;/font&gt;&lt;/span&gt;&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; &lt;span&gt;&lt;font color="#0000ff"&gt;where&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;Convert&lt;/font&gt;&lt;/span&gt;.ToInt32(img.Tag) == tag&lt;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; &lt;span&gt;&lt;font color="#0000ff"&gt;select&lt;/font&gt;&lt;/span&gt; stackPanel).First();&lt;br /&gt;&amp;#160; }&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;Find the position of StackPanel without children.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;int&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt; FindEmptyItemPosition()&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;/span&gt; index = 15;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;for&lt;/font&gt;&lt;/span&gt; (&lt;span&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;/span&gt; i = 0; i &amp;lt; 15; i++)&lt;br /&gt;&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&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (((&lt;span&gt;&lt;font color="#2b91af"&gt;StackPanel&lt;/font&gt;&lt;/span&gt;)ContentPanel.Children[i]).Children.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;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt; index;&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; index--;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt; 0;&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;Get the Tag value by StackPanel position.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;int&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt; FindItemValueByPosition(&lt;span&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;/span&gt; position)&lt;br /&gt;{&lt;br /&gt;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt; ((&lt;span&gt;&lt;font color="#2b91af"&gt;StackPanel&lt;/font&gt;&lt;/span&gt;)ContentPanel.Children[position]).Children.Count &amp;gt; 0 &lt;br /&gt;          ? &lt;span&gt;&lt;font color="#2b91af"&gt;Convert&lt;/font&gt;&lt;/span&gt;.ToInt32(((&lt;span&gt;&lt;font color="#2b91af"&gt;Image&lt;/font&gt;&lt;/span&gt;)((&lt;span&gt;&lt;font color="#2b91af"&gt;StackPanel&lt;/font&gt;&lt;/span&gt;)ContentPanel.Children&lt;br /&gt;            [position]).Children[0]).Tag) : 16;&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;

&lt;h3&gt;Step 3: Scrambles&lt;/h3&gt;

&lt;p&gt;Now we have are puzzle structure and Find method helpers, the first thing is to Scramble or puzzle.&lt;/p&gt;

&lt;p&gt;So I wrote a method&amp;#160; that runs n times and generate random numbers from 1 to 16,&amp;#160; for each number find the current StackPanel that hold him. (FindStackPanelByTagId)&amp;#160; . 
  &lt;br /&gt;

  &lt;br /&gt;If First and Second number are smaller then 16 then - swipe the images and tag values. &lt;/p&gt;

&lt;p&gt;If One of the values is 16 the swipe&amp;#160; - One Stackpanel will be cleared of Items&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;void&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt; Scrambles()&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; count = 0;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;while&lt;/font&gt;&lt;/span&gt; (count &amp;lt; 25)&lt;br /&gt;&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&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; a = _rnd.Next(1, 17);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; b = _rnd.Next(1, 17);&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (a == b) &lt;span&gt;&lt;font color="#0000ff"&gt;continue&lt;/font&gt;&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&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; stack1 = FindStackPanelByTagId(a);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; stack2 = FindStackPanelByTagId(b);&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (a == 16)&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;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; image2 = stack2.Children[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; stack2.Children.Clear();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; stack1.Children.Add(image2);&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&gt;&lt;font color="#0000ff"&gt;else&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (b == 16)&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;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; image1 = stack1.Children[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; stack1.Children.Clear();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; stack2.Children.Add(image1);&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&gt;&lt;font color="#0000ff"&gt;else&lt;/font&gt;&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; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; image1 = stack1.Children[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&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; image2 = stack2.Children[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; stack1.Children.Clear();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; stack2.Children.Clear();&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; stack1.Children.Add(image2);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; stack2.Children.Add(image1);&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; count++;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;

&lt;h3&gt;Step 4: Check Board&lt;/h3&gt;

&lt;p&gt;Each move the user do, perform a loop and checks values from 1 to 16. if the numbers are not in the correct order than nothing happed.&lt;/p&gt;

&lt;p&gt;Else You stop the game timer and display a win message.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;void&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt; CheckBoard()&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; index = 1;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;for&lt;/font&gt;&lt;/span&gt; (&lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; i = 15; i &amp;gt; 0; i--)&lt;br /&gt;&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&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (FindItemValueByPosition(i) != index) &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; index++;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; _timer.Stop();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; WinGrid.Visibility = System.Windows.&lt;span&gt;&lt;font color="#2b91af"&gt;Visibility&lt;/font&gt;&lt;/span&gt;.Visible;&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;

&lt;h3&gt;Step 5: Move Items&lt;/h3&gt;

&lt;p&gt;Before we can apply move of items we need to check several things, the first thing is:&lt;/p&gt;

&lt;p&gt;Check if the Item Can move, Checking all panels around the specific item with -1 +1 -4 +4, if one of them is empty then he can move. &lt;/p&gt;

&lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#2b91af"&gt;&lt;font style="font-size:12pt;"&gt;StackPanel&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt; CanMove(&lt;span&gt;&lt;font color="#2b91af"&gt;UIElement&lt;/font&gt;&lt;/span&gt; itemToMove)&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; count = ContentPanel.Children.Count;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;for&lt;/font&gt;&lt;/span&gt; (&lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; i = 0; i &amp;lt; count; i++)&lt;br /&gt;&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&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (!(ContentPanel.Children[i] &lt;span&gt;&lt;font color="#0000ff"&gt;is&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;StackPanel&lt;/font&gt;&lt;/span&gt;)) &lt;span&gt;&lt;font color="#0000ff"&gt;continue&lt;/font&gt;&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&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; stackPanel = (&lt;span&gt;&lt;font color="#2b91af"&gt;StackPanel&lt;/font&gt;&lt;/span&gt;)ContentPanel.Children[i];&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (!stackPanel.Children.Contains(itemToMove)) &lt;span&gt;&lt;font color="#0000ff"&gt;continue&lt;/font&gt;&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&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (!IsBorderSwich(i, i + 1) &amp;amp;&amp;amp; i + 1 &amp;lt;= 15 &amp;amp;&amp;amp; ContentPanel.&lt;br /&gt;            Children[i + 1] != &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt; &amp;amp;&amp;amp; &lt;br /&gt;           ((&lt;span&gt;&lt;font color="#2b91af"&gt;StackPanel&lt;/font&gt;&lt;/span&gt;)ContentPanel.Children[i + 1]).Children.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;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt; ((&lt;span&gt;&lt;font color="#2b91af"&gt;StackPanel&lt;/font&gt;&lt;/span&gt;)ContentPanel.Children[i + 1]);&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (!IsBorderSwich(i, i - 1) &amp;amp;&amp;amp; i - 1 &amp;gt; -1 &amp;amp;&amp;amp; ContentPanel.&lt;br /&gt;            Children[i - 1] != &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt; &amp;amp;&amp;amp; &lt;br /&gt;           ((&lt;span&gt;&lt;font color="#2b91af"&gt;StackPanel&lt;/font&gt;&lt;/span&gt;)ContentPanel.Children[i - 1]).Children.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;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt; ((&lt;span&gt;&lt;font color="#2b91af"&gt;StackPanel&lt;/font&gt;&lt;/span&gt;)ContentPanel.Children[i - 1]);&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (i + 4 &amp;lt;= 15 &amp;amp;&amp;amp; ContentPanel.Children[i + 4] != &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt; &amp;amp;&amp;amp; &lt;br /&gt;           ((&lt;span&gt;&lt;font color="#2b91af"&gt;StackPanel&lt;/font&gt;&lt;/span&gt;)ContentPanel.Children[i + 4]).Children.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;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt; ((&lt;span&gt;&lt;font color="#2b91af"&gt;StackPanel&lt;/font&gt;&lt;/span&gt;)ContentPanel.Children[i + 4]);&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (i - 4 &amp;gt; -1 &amp;amp;&amp;amp; ContentPanel.Children[i - 4] != &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt; &amp;amp;&amp;amp; &lt;br /&gt;           ((&lt;span&gt;&lt;font color="#2b91af"&gt;StackPanel&lt;/font&gt;&lt;/span&gt;)ContentPanel.Children[i - 4]).Children.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;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt; ((&lt;span&gt;&lt;font color="#2b91af"&gt;StackPanel&lt;/font&gt;&lt;/span&gt;)ContentPanel.Children[i - 4]);&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;&lt;u&gt;&lt;strong&gt;The Second &lt;/strong&gt;&lt;/u&gt;- if both of the items you want to swipe are in the Board borders do nothing. &lt;/p&gt;

&lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;private&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;readonly&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;/span&gt;[] _bordersNums = { 0, 4, 8, 12, 3, 7, 11, 15 };&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;bool&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt; IsBorderSwich(&lt;span&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;/span&gt; a, &lt;span&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;/span&gt; b)&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt; _bordersNums.Contains(a) &amp;amp;&amp;amp; _bordersNums.Contains(b);&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_1CAE6B80.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_0808D068.png" width="462" height="470" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now after we have those safety methods we can move the items based on user clicks:&lt;/p&gt;

&lt;p&gt;Just register to ItemManipulationStarted on the entire windows, for each event check if the item isn’t image do nothing, if it does, call the CanMove method to verify that this item can move around.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;private&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; ItemManipulationStarted(&lt;span&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt; sender, &lt;br /&gt;                                          &lt;span&gt;&lt;font color="#2b91af"&gt;ManipulationStartedEventArgs&lt;/font&gt;&lt;/span&gt; e)&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; item = (&lt;span&gt;&lt;font color="#2b91af"&gt;UIElement&lt;/font&gt;&lt;/span&gt;)e.OriginalSource;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (!(item &lt;span&gt;&lt;font color="#0000ff"&gt;is&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;Image&lt;/font&gt;&lt;/span&gt;)) &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; to = CanMove(item);&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (to != &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; _moves++;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; txtMoves.Text = _moves.ToString();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; MoveItem(item, to);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; CheckBoard();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; e.Handled = &lt;span&gt;&lt;font color="#0000ff"&gt;true&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; e.Complete();&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;&lt;u&gt;&lt;strong&gt;MoveItem&lt;/strong&gt;&lt;/u&gt; - Move Item From One StackPanel to Another. &lt;/p&gt;

&lt;pre class="code"&gt;&lt;p&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;void&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt; MoveItem(&lt;span&gt;&lt;font color="#2b91af"&gt;UIElement&lt;/font&gt;&lt;/span&gt; item, &lt;span&gt;&lt;font color="#2b91af"&gt;StackPanel&lt;/font&gt;&lt;/span&gt; targetPanel)&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;foreach&lt;/font&gt;&lt;/span&gt; (&lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; stackPanel &lt;span&gt;&lt;font color="#0000ff"&gt;in&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ContentPanel.Children.OfType&amp;lt;&lt;span&gt;&lt;font color="#2b91af"&gt;StackPanel&lt;/font&gt;&lt;/span&gt;&amp;gt;().Where(stackPanel =&amp;gt; &lt;br /&gt;    stackPanel.Children.Count &amp;gt; 0 &amp;amp;&amp;amp; stackPanel.Children.Contains(item)))&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; stackPanel.Children.Remove(item);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; targetPanel.Children.Add(item);&lt;br /&gt;}&lt;/font&gt;&lt;/p&gt;&lt;/pre&gt;

&lt;h3&gt;Step 6: Check If Puzzle Solvable&lt;/h3&gt;

&lt;p&gt;This part of very important, because half of the starting positions for the &lt;i&gt;n&lt;/i&gt;-puzzle are impossible to resolve.&lt;/p&gt;

&lt;blockquote&gt;
  &lt;p&gt;&lt;a href="http://en.wikipedia.org/wiki/Fifteen_puzzle#CITEREFJohnsonStory1879"&gt;Johnson &amp;amp; Story (1879)&lt;/a&gt; used a &lt;a href="http://en.wikipedia.org/wiki/Parity_(mathematics)"&gt;parity&lt;/a&gt; argument to show that half of the starting positions for the &lt;i&gt;n&lt;/i&gt;-puzzle are impossible to resolve, no matter how many moves are made. This is done by considering a function of the tile configuration that is &lt;a href="http://en.wikipedia.org/wiki/Invariant_(mathematics)"&gt;invariant&lt;/a&gt; under any valid move, and then using this to partition the space of all possible labeled states into two &lt;a href="http://en.wikipedia.org/wiki/Equivalence_class"&gt;equivalence classes&lt;/a&gt; of reachable and unreachable states.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The Puzzle 15 (n-puzzle) is a classical problem for modeling algorithms involving heuristics. Commonly used heuristics for this problem include counting the number of misplaced tiles and finding the sum of the Manhattan distances between each block and its position in the goal configuration. Note that both are admissible, i.e., they never overestimate the number of moves left, which ensures optimality for certain search algorithms such as A*.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;bool&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt; CheckIfSolvable()&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; n = 0;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;for&lt;/font&gt;&lt;/span&gt; (&lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; i = 1; i &amp;lt;= 16; i++)&lt;br /&gt;&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&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (!(ContentPanel.Children[i] &lt;span&gt;&lt;font color="#0000ff"&gt;is&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;StackPanel&lt;/font&gt;&lt;/span&gt;)) &lt;span&gt;&lt;font color="#0000ff"&gt;continue&lt;/font&gt;&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&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; num1 = FindItemValueByPosition(i);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; num2 = FindItemValueByPosition(i - 1);&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (num1 &amp;gt; num2)&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; n++;&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;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; emptyPos = FindEmptyItemPosition();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt; n % 2 == (emptyPos + emptyPos / 4) % 2 ? &lt;span&gt;&lt;font color="#0000ff"&gt;true&lt;/font&gt;&lt;/span&gt; : &lt;span&gt;&lt;font color="#0000ff"&gt;false&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;

&lt;h3&gt;Step 7: Setup a New Game&lt;/h3&gt;

&lt;p&gt;Now, when we defined everything we need, let’s write the New Game method, reset all timer and moves number back to 0, call the Scrambles method, and while the game is unsolvable continue scramble the game, once it’s solvable start the timer.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;public&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; NewGame()&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; _moves = 0;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; txtMoves.Text = &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;0&amp;quot;&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; txtTime.Text = &lt;span&gt;&lt;font color="#2b91af"&gt;Const&lt;/font&gt;&lt;/span&gt;.DefaultTimeValue;&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Scrambles();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;while&lt;/font&gt;&lt;/span&gt; (!CheckIfSolvable())&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Scrambles();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; _startTime = &lt;span&gt;&lt;font color="#2b91af"&gt;DateTime&lt;/font&gt;&lt;/span&gt;.Now.AddSeconds(1);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; _timer.Start();&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; GridScrambling.Visibility = System.Windows.&lt;span&gt;&lt;font color="#2b91af"&gt;Visibility&lt;/font&gt;&lt;/span&gt;.Collapsed;&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;





&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_2274D54D.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_003CC9C7.png" width="439" height="571" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/shair/entry1016481.aspx"&gt;Download Demo Project&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Enjoy&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1016482" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Development/default.aspx">Development</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/SilverLight/default.aspx">SilverLight</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TECH/default.aspx">TECH</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Visual+Studio+2010/default.aspx">Visual Studio 2010</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/How+To/default.aspx">How To</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Windows+Phone+7/default.aspx">Windows Phone 7</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET+4/default.aspx">.NET 4</category></item><item><title>Windows Phone 7–Raise My Dog–Russian</title><link>http://blogs.microsoft.co.il/blogs/shair/archive/2012/02/01/windows-phone-7-raise-my-dog-russian.aspx</link><pubDate>Wed, 01 Feb 2012 13:22:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1003971</guid><dc:creator>shair</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/shair/rsscomments.aspx?PostID=1003971</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2012/02/01/windows-phone-7-raise-my-dog-russian.aspx#comments</comments><description>&lt;div class="share-buttons"&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;PADDING-RIGHT:15px;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;&lt;a class="twitter-share-button" href="http://blogs.microsoft.co.il/blogs/shair/archive/2012/02/01/windows-phone-7-raise-my-dog-russian.aspx"&gt;Tweet&lt;/a&gt;&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;PADDING-RIGHT:25px;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;
&lt;script type="IN/Share"&gt;&lt;/script&gt;
&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;&lt;iframe style="BORDER-BOTTOM:medium none;BORDER-LEFT:medium none;WIDTH:100px;HEIGHT:21px;OVERFLOW:hidden;BORDER-TOP:medium none;BORDER-RIGHT:medium none;" src="http://www.facebook.com/plugins/like.php?href=http://blogs.microsoft.co.il/blogs/shair/archive/2012/02/01/windows-phone-7-raise-my-dog-russian.aspx&amp;amp;send=false&amp;amp;layout=button_count&amp;amp;width=450&amp;amp;show_faces=false&amp;amp;action=like&amp;amp;colorscheme=light&amp;amp;font=segoe+ui&amp;amp;height=21&amp;amp;appId=184186808308137" frameborder="0"&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;
&lt;div class="g-plusone"&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;
&lt;p&gt;This is a game I wrote couple of months ago and now &lt;a href="http://www.selagroup.com/" target="_blank"&gt;Sela&lt;/a&gt; helped me to translate and publish to the &lt;a href="http://blogs.microsoft.co.il/blogs/shair/SELA_College_Logo_1384D3A0.gif"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;float:right;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="SELA_College_Logo" border="0" alt="SELA_College_Logo" align="right" src="http://blogs.microsoft.co.il/blogs/shair/SELA_College_Logo_thumb_70E09524.gif" width="240" height="77" /&gt;&lt;/a&gt;Russian market.&lt;/p&gt;  &lt;p&gt;This is all part of &lt;a href="http://www.selagroup.com/"&gt;Sela Group&lt;/a&gt; massive work on Windows Phone 7 for enterprise application and games.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font face="Arial"&gt;Raise My Dog is an interactive game for WP7 that allows you to raise a dog inside you mobile device.&lt;/font&gt;&lt;font face="Arial"&gt;&lt;font face="Arial"&gt;&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.windowsphone.com/en-US/apps/c52573e0-08c5-4e33-abfa-992021f0630f"&gt;Marketplace&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_41AEA98D.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_053634E3.png" width="203" height="322" /&gt;&lt;/a&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_21EFA9F8.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_664F9B37.png" width="202" height="321" /&gt;&lt;/a&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_760F303B.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_334FE503.png" width="194" height="319" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1003971" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Development/default.aspx">Development</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Windows+Phone+7/default.aspx">Windows Phone 7</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET+4/default.aspx">.NET 4</category></item><item><title>Windows Phone 7 - Location Service and Bing Maps</title><link>http://blogs.microsoft.co.il/blogs/shair/archive/2012/01/29/windows-phone-7-location-service-and-bing-maps.aspx</link><pubDate>Mon, 30 Jan 2012 03:41:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1001566</guid><dc:creator>shair</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/shair/rsscomments.aspx?PostID=1001566</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2012/01/29/windows-phone-7-location-service-and-bing-maps.aspx#comments</comments><description>&lt;div class="share-buttons"&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;PADDING-RIGHT:15px;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;&lt;a class="twitter-share-button" href="http://blogs.microsoft.co.il/blogs/shair/archive/2012/01/29/windows-phone-7-location-service-and-bing-maps.aspx"&gt;Tweet&lt;/a&gt;&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;PADDING-RIGHT:25px;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;
&lt;script type="IN/Share"&gt;&lt;/script&gt;
&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;&lt;iframe style="BORDER-BOTTOM:medium none;BORDER-LEFT:medium none;WIDTH:100px;HEIGHT:21px;OVERFLOW:hidden;BORDER-TOP:medium none;BORDER-RIGHT:medium none;" src="http://www.facebook.com/plugins/like.php?href=http://blogs.microsoft.co.il/blogs/shair/archive/2012/01/29/windows-phone-7-location-service-and-bing-maps.aspx&amp;amp;send=false&amp;amp;layout=button_count&amp;amp;width=450&amp;amp;show_faces=false&amp;amp;action=like&amp;amp;colorscheme=light&amp;amp;font=segoe+ui&amp;amp;height=21&amp;amp;appId=184186808308137" frameborder="0"&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;
&lt;div class="g-plusone"&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;
&lt;p&gt;Over the last two posts I’ve talked about &lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2012/01/27/how-to-connect-window-phone-7-and-windows-8-app-to-microsoft-pubcenter.aspx"&gt;Microsoft pubCenter ads into your Windows Phone 7 application&lt;/a&gt; and &lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2012/01/28/accelerometer-sensor-for-windows-phone-7.aspx" target="_blank"&gt;Accelerometer Sensor for Windows Phone 7&lt;/a&gt; all as part of a very long series I’m planning to write on Windows Phone 7 in order to help you write cool and useful applications for Windows Phone 7.&lt;/p&gt;
&lt;p&gt;In this Post I’ll talked about &lt;strong&gt;Location Service&lt;/strong&gt; and &lt;strong&gt;Bing Maps.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Location Service&lt;/strong&gt; – I’ll show how to receives data from the &lt;strong&gt;Microsoft Location Service&lt;/strong&gt; and displays the geographic coordinates of the device, and then show your position on the Bing Maps.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bind Maps&lt;/strong&gt; - demonstrates how to use the basic functionality of the Bing Maps Silverlight Control for Windows Phone and manipulate the Map Coordinate based on Geo Position.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_5150C3C4.png"&gt;&lt;img style="BACKGROUND-IMAGE:none;BORDER-RIGHT-WIDTH:0px;PADDING-LEFT:0px;PADDING-RIGHT:0px;DISPLAY:inline;BORDER-TOP-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-LEFT-WIDTH:0px;PADDING-TOP:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_1CAFA5E2.png" width="757" height="511" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now before we start you need to create a &lt;strong&gt;Bing Maps Account&lt;/strong&gt;, why? because if you don’t have a key you will see an annoying message on your map – like that:&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_05FD31CE.png"&gt;&lt;img style="BACKGROUND-IMAGE:none;BORDER-RIGHT-WIDTH:0px;PADDING-LEFT:0px;PADDING-RIGHT:0px;DISPLAY:inline;BORDER-TOP-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-LEFT-WIDTH:0px;PADDING-TOP:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_080A0ACA.png" width="342" height="476" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/1001537/download.aspx" target="_blank"&gt;Download Demo Project&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Step 1: Create Bing Maps Account&lt;/h3&gt;
&lt;p&gt;Enter Bing Maps Site - &lt;a title="https://www.bingmapsportal.com" href="https://www.bingmapsportal.com/"&gt;https://www.bingmapsportal.com&lt;/a&gt;, sign in with your Live Id or create new account.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_5AE4F82E.png"&gt;&lt;img style="BACKGROUND-IMAGE:none;BORDER-RIGHT-WIDTH:0px;PADDING-LEFT:0px;PADDING-RIGHT:0px;DISPLAY:inline;BORDER-TOP-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-LEFT-WIDTH:0px;PADDING-TOP:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_25F7F2F1.png" width="754" height="473" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Then enter “Create or view Keys” and create new key for your application, save this key because we’ll use it latter.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_0CCC72EC.png"&gt;&lt;img style="BACKGROUND-IMAGE:none;BORDER-RIGHT-WIDTH:0px;PADDING-LEFT:0px;PADDING-RIGHT:0px;DISPLAY:inline;BORDER-TOP-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-LEFT-WIDTH:0px;PADDING-TOP:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_58B7D398.png" width="750" height="312" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Step 2: Setup your Xaml&lt;/h3&gt;
&lt;p&gt;For our application we need Map object and several textbox and buttons to control the map zoom and mode.&lt;/p&gt;&lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="FONT-SIZE:12pt;"&gt;&amp;lt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="FONT-SIZE:12pt;"&gt;&lt;span&gt;&lt;font color="#a31515"&gt;Grid&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; x&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#ff0000"&gt;Name&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;ContentPanel&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; Grid.Row&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;1&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; Margin&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;12,0,12,0&amp;quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;span&gt;&lt;font color="#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;Grid.RowDefinitions&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;font color="#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;RowDefinition&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; Height&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;36&amp;quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;span&gt;&lt;font color="#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;RowDefinition&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; Height&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;448*&amp;quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;span&gt;&lt;font color="#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;RowDefinition&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; Height&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;123&amp;quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;span&gt;&lt;font color="#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;Grid.RowDefinitions&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;font color="#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;my&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;Map&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; Name&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;map&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; Grid.Row&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;1&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; CredentialsProvider&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;&lt;strong&gt;&lt;u&gt;&lt;font color="#000000"&gt;Your Key&lt;/font&gt;&lt;/u&gt;&lt;/strong&gt;&amp;quot;&lt;/span&gt;&lt;span&gt;/&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;span&gt;&lt;font color="#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;TextBlock&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; Height&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;30&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; HorizontalAlignment&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;Left&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; Margin&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;6,6,0,0&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; &lt;br /&gt;           Text&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;Latitude:&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; VerticalAlignment&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;Top&amp;quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;span&gt;&lt;font color="#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;TextBlock&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; Height&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;30&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; HorizontalAlignment&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;Left&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; Margin&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;88,6,0,0&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; &lt;br /&gt;           Name&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;txtLatitude&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; Text&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;0.0&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; VerticalAlignment&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;Top&amp;quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt; &lt;br /&gt;&lt;span&gt;&lt;font color="#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;TextBlock&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; Height&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;30&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; HorizontalAlignment&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;Left&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; Margin&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;206,6,0,0&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; &lt;br /&gt;           Text&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;Longitude:&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; VerticalAlignment&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;Top&amp;quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;span&gt;&lt;font color="#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;TextBlock&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; Height&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;30&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; HorizontalAlignment&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;Left&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; Margin&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;306,6,0,0&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; &lt;br /&gt;           Name&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;txtLongitude&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; Text&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;0.0&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; VerticalAlignment&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;Top&amp;quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;span&gt;&lt;font color="#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;TextBlock&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; Grid.Row&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;2&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; Height&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;30&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; Margin&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;12,78,6,0&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; &lt;br /&gt;           Name&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;txtStatus&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; Text&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;N/A&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; VerticalAlignment&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;Top&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; &lt;br /&gt;           TextAlignment&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;Center&amp;quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;span&gt;&lt;font color="#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;Button&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; Content&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;High Accuracy&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; Grid.Row&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;2&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; Height&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;72&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; &lt;br /&gt;           HorizontalAlignment&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;Right&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; Name&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;btnAccuracy&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; &lt;br /&gt;           VerticalAlignment&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;Top&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; Width&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;221&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; Click&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;BtnAccuracyClick&amp;quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;span&gt;&lt;font color="#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;Button&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; Content&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;Road Mode&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; Height&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;72&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; HorizontalAlignment&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;Left&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; &lt;br /&gt;           Name&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;btnMapMode&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; VerticalAlignment&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;Top&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; Width&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;216&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; &lt;br /&gt;           Grid.Row&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;2&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; Click&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;BtnMapModeClick&amp;quot;&lt;/span&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#a31515"&gt;Grid&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font style="FONT-SIZE:12pt;" color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;h3&gt;Step 3: Reinitialize the GeoCoordinateWatcher&lt;/h3&gt;
&lt;p&gt;The &lt;strong&gt;&lt;u&gt;GeoCoordinateWatcher&lt;/u&gt;&lt;/strong&gt; Supplies location data that is based on latitude and longitude coordinates.&lt;/p&gt;&lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="FONT-SIZE:12pt;"&gt;private&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="FONT-SIZE:12pt;"&gt;&amp;nbsp;&lt;span&gt;&lt;font color="#2b91af"&gt;GeoCoordinateWatcher&lt;/font&gt;&lt;/span&gt; _geo;&lt;br /&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;span&gt;&lt;font color="#2b91af"&gt;GeoPositionAccuracy&lt;/font&gt;&lt;/span&gt; Accuracy = &lt;span&gt;&lt;font color="#2b91af"&gt;GeoPositionAccuracy&lt;/font&gt;&lt;/span&gt;.High;&lt;br /&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt; _mode = &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;Road&amp;quot;&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt; &lt;br /&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; PhoneApplicationPageLoaded(&lt;span&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt; sender, &lt;span&gt;&lt;font color="#2b91af"&gt;RoutedEventArgs&lt;/font&gt;&lt;/span&gt; e)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; LocationInitialize();&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; LocationInitialize()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#008000"&gt;// Reinitialize the GeoCoordinateWatcher&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _geo = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;span&gt;&lt;font color="#2b91af"&gt;GeoCoordinateWatcher&lt;/font&gt;&lt;/span&gt;(Accuracy) { MovementThreshold = 20 };&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#008000"&gt;// Add event handlers for StatusChanged and PositionChanged events&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _geo.StatusChanged -= GeoStatusChanged;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _geo.PositionChanged -= GeoPositionChanged;&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _geo.StatusChanged += &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;span&gt;&lt;font color="#2b91af"&gt;EventHandler&lt;br /&gt;&lt;/font&gt;&lt;/span&gt;                  &amp;lt;&lt;span&gt;&lt;font color="#2b91af"&gt;GeoPositionStatusChangedEventArgs&lt;/font&gt;&lt;/span&gt;&amp;gt;(GeoStatusChanged);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _geo.PositionChanged += &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;span&gt;&lt;font color="#2b91af"&gt;EventHandler&lt;/font&gt;&lt;/span&gt;&amp;lt;&lt;span&gt;&lt;font color="#2b91af"&gt;GeoPositionChangedEventArgs&lt;br /&gt;&lt;/font&gt;&lt;/span&gt;                  &amp;lt;&lt;span&gt;&lt;font color="#2b91af"&gt;GeoCoordinate&lt;/font&gt;&lt;/span&gt;&amp;gt;&amp;gt;(GeoPositionChanged);&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#008000"&gt;// Start data acquisition&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _geo.Start();&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;
&lt;h3&gt;Step 4: Define Control Buttons&lt;/h3&gt;
&lt;p&gt;After we add four, two buttons for accuracy and map mode and two for zoom actions and we need to define the code behind:&lt;/p&gt;
&lt;p&gt;The accuracy check what the current accuracy on the &lt;span&gt;&lt;font color="#2b91af"&gt;GeoCoordinateWatcher, &lt;font color="#000000"&gt;replace it&lt;/font&gt; &lt;/font&gt;&lt;/span&gt;and reinitialize the watcher.&lt;/p&gt;
&lt;p&gt;The Map Mode does the same but without reinitialize the watcher because we are changing the Map object.&lt;/p&gt;
&lt;p&gt;The Zoom In and Zoom out increase or decrease the zoom on the map.&lt;/p&gt;&lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="FONT-SIZE:12pt;"&gt;private&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="FONT-SIZE:12pt;"&gt;&amp;nbsp;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; BtnAccuracyClick(&lt;span&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt; sender, &lt;span&gt;&lt;font color="#2b91af"&gt;RoutedEventArgs&lt;/font&gt;&lt;/span&gt; e)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Accuracy = Accuracy == &lt;span&gt;&lt;font color="#2b91af"&gt;GeoPositionAccuracy&lt;/font&gt;&lt;/span&gt;.Default ? &lt;br /&gt;&lt;span&gt;&lt;font color="#2b91af"&gt;               GeoPositionAccuracy&lt;/font&gt;&lt;/span&gt;.High : &lt;span&gt;&lt;font color="#2b91af"&gt;GeoPositionAccuracy&lt;/font&gt;&lt;/span&gt;.Default;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; btnAccuracy.Content = Accuracy == &lt;span&gt;&lt;font color="#2b91af"&gt;GeoPositionAccuracy&lt;/font&gt;&lt;/span&gt;.High ? &lt;br /&gt;                &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;Default Accuracy&amp;quot;&lt;/font&gt;&lt;/span&gt; : &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;High Accuracy&amp;quot;&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; LocationInitialize();&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; BtnMapModeClick(&lt;span&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt; sender, &lt;span&gt;&lt;font color="#2b91af"&gt;RoutedEventArgs&lt;/font&gt;&lt;/span&gt; e)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (_mode == &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;Road&amp;quot;&lt;/font&gt;&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; map.Mode = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;span&gt;&lt;font color="#2b91af"&gt;AerialMode&lt;/font&gt;&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _mode = &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;Aerial&amp;quot;&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; btnMapMode.Content = txtStatus.Text = &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;Aerial Mode&amp;quot;&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#0000ff"&gt;else&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; map.Mode = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;span&gt;&lt;font color="#2b91af"&gt;RoadMode&lt;/font&gt;&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _mode = &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;Road&amp;quot;&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; btnMapMode.Content = txtStatus.Text = &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;Road Mode&amp;quot;&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; ZoomInClick(&lt;span&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt; sender, &lt;span&gt;&lt;font color="#2b91af"&gt;EventArgs&lt;/font&gt;&lt;/span&gt; e)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; zoom = map.ZoomLevel;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; map.ZoomLevel = ++zoom;&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; ZoomOutClick(&lt;span&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt; sender, &lt;span&gt;&lt;font color="#2b91af"&gt;EventArgs&lt;/font&gt;&lt;/span&gt; e)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; zoom = map.ZoomLevel;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; map.ZoomLevel = --zoom;&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;
&lt;h3&gt;Step 5: GeoPositionChanged and GeoStatusChanged&lt;/h3&gt;
&lt;p&gt;Now to the fun part, the &lt;span&gt;&lt;font color="#2b91af"&gt;GeoCoordinateWatcher &lt;/font&gt;&lt;font color="#000000"&gt;has two events:&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;u&gt;&lt;strong&gt;GeoStatusChanged &lt;/strong&gt;&lt;/u&gt;- Indicates that the status of the GeoCoordinateWatcher object has changed. &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;The Status Changed can tell us is the device is not support Location or we change some properties of the &lt;span&gt;&lt;font color="#2b91af"&gt;GeoCoordinateWatcher.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;u&gt;GeoPositionChanged &lt;/u&gt;&lt;/strong&gt;- Indicates that the latitude or longitude of the location data has changed. &lt;/li&gt;&lt;/ul&gt;
&lt;p&gt;The position changed event will tell us what is the current Latitude and Longitude of the device. using those values we can define &lt;span&gt;&lt;font color="#2b91af"&gt;GeoCoordinate &lt;/font&gt;&lt;font color="#000000"&gt;object and define the Map center to those coordinates, this way the user will see what is his location.&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="FONT-SIZE:12pt;"&gt;void&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="FONT-SIZE:12pt;"&gt; GeoPositionChanged(&lt;span&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt; sender, &lt;br /&gt;                             &lt;span&gt;&lt;font color="#2b91af"&gt;GeoPositionChangedEventArgs&lt;/font&gt;&lt;/span&gt;&amp;lt;&lt;span&gt;&lt;font color="#2b91af"&gt;GeoCoordinate&lt;/font&gt;&lt;/span&gt;&amp;gt; e)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#008000"&gt;// Update the TextBlocks to show the current location&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; txtLatitude.Text = e.Position.Location.Latitude.ToString(&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;0.000&amp;quot;&lt;/font&gt;&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; txtLongitude.Text = e.Position.Location.Longitude.ToString(&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;0.000&amp;quot;&lt;/font&gt;&lt;/span&gt;);&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; cor = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;span&gt;&lt;font color="#2b91af"&gt;GeoCoordinate&lt;/font&gt;&lt;/span&gt;(e.Position.Location.Latitude,&lt;br /&gt;                                e.Position.Location.Longitude);&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#008000"&gt;//Using the current coordinates define the Map center &lt;br /&gt;    //&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;font style="FONT-SIZE:12pt;"&gt;&lt;span&gt;&lt;font color="#008000"&gt;to those coordinates.&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; map.Center = cor;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; map.ZoomLevel = 10;&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; GeoStatusChanged(&lt;span&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt; sender, &lt;span&gt;&lt;font color="#2b91af"&gt;GeoPositionStatusChangedEventArgs&lt;/font&gt;&lt;/span&gt; e)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;.Dispatcher.BeginInvoke(() =&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#0000ff"&gt;switch&lt;/font&gt;&lt;/span&gt; (e.Status)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#0000ff"&gt;case&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;span&gt;&lt;font color="#2b91af"&gt;GeoPositionStatus&lt;/font&gt;&lt;/span&gt;.Disabled:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#008000"&gt;// The location service is disabled or unsupported.&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#008000"&gt;// Alert the user&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; txtStatus.Text = &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;location is unsupported on this device&amp;quot;&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#0000ff"&gt;break&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#0000ff"&gt;case&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;span&gt;&lt;font color="#2b91af"&gt;GeoPositionStatus&lt;/font&gt;&lt;/span&gt;.Initializing:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#008000"&gt;// The location service is initializing.&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#008000"&gt;// Disable the Start Location button&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; txtStatus.Text = &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;initializing location service,&amp;quot;&lt;/font&gt;&lt;/span&gt; &lt;br /&gt;                                                         + Accuracy;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#0000ff"&gt;break&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#0000ff"&gt;case&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;span&gt;&lt;font color="#2b91af"&gt;GeoPositionStatus&lt;/font&gt;&lt;/span&gt;.NoData:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#008000"&gt;// The location service is working, but it cannot get &lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#008000"&gt;// location data Alert the user and enable the Stop &lt;br /&gt;                //Location button&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; txtStatus.Text = &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;data unavailable,&amp;quot;&lt;/font&gt;&lt;/span&gt; + Accuracy;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#0000ff"&gt;break&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#0000ff"&gt;case&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;span&gt;&lt;font color="#2b91af"&gt;GeoPositionStatus&lt;/font&gt;&lt;/span&gt;.Ready:&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#008000"&gt;// The location service is working and is receiving &lt;br /&gt;                //location data&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#008000"&gt; Show the current position and enable the&lt;br /&gt;                // Stop Location button&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; txtStatus.Text = &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;receiving data, &amp;quot;&lt;/font&gt;&lt;/span&gt; + Accuracy;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#0000ff"&gt;break&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;
&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/1001537/download.aspx" target="_blank"&gt;Download Demo Project&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_03AFC19E.png"&gt;&lt;img style="BACKGROUND-IMAGE:none;BORDER-RIGHT-WIDTH:0px;PADDING-LEFT:0px;PADDING-RIGHT:0px;DISPLAY:inline;BORDER-TOP-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-LEFT-WIDTH:0px;PADDING-TOP:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_26DC6AA9.png" width="753" height="509" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1001566" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Development/default.aspx">Development</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Services/default.aspx">Services</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TECH/default.aspx">TECH</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Visual+Studio+2010/default.aspx">Visual Studio 2010</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/How+To/default.aspx">How To</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Windows+Phone+7/default.aspx">Windows Phone 7</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET+4/default.aspx">.NET 4</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Bing/default.aspx">Bing</category></item><item><title>Accelerometer Sensor for Windows Phone 7</title><link>http://blogs.microsoft.co.il/blogs/shair/archive/2012/01/28/accelerometer-sensor-for-windows-phone-7.aspx</link><pubDate>Sun, 29 Jan 2012 04:49:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:1000533</guid><dc:creator>shair</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/shair/rsscomments.aspx?PostID=1000533</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2012/01/28/accelerometer-sensor-for-windows-phone-7.aspx#comments</comments><description>&lt;div class="share-buttons"&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;PADDING-RIGHT:15px;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;&lt;a class="twitter-share-button" href="http://blogs.microsoft.co.il/blogs/shair/archive/2012/01/28/accelerometer-sensor-for-windows-phone-7.aspx"&gt;Tweet&lt;/a&gt;&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;PADDING-RIGHT:25px;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;
&lt;script type="IN/Share"&gt;&lt;/script&gt;
&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;&lt;iframe style="BORDER-BOTTOM:medium none;BORDER-LEFT:medium none;WIDTH:100px;HEIGHT:21px;OVERFLOW:hidden;BORDER-TOP:medium none;BORDER-RIGHT:medium none;" src="http://www.facebook.com/plugins/like.php?href=http://blogs.microsoft.co.il/blogs/shair/archive/2012/01/28/accelerometer-sensor-for-windows-phone-7.aspx&amp;amp;send=false&amp;amp;layout=button_count&amp;amp;width=450&amp;amp;show_faces=false&amp;amp;action=like&amp;amp;colorscheme=light&amp;amp;font=segoe+ui&amp;amp;height=21&amp;amp;appId=184186808308137" frameborder="0"&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;
&lt;div class="g-plusone"&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;
&lt;p&gt;In my previous post on Windows Phone 7 I’ve showed how to integrate &lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2012/01/27/how-to-connect-window-phone-7-and-windows-8-app-to-microsoft-pubcenter.aspx" target="_blank"&gt;Microsoft pubCenter ads into your Windows Phone 7 application&lt;/a&gt;, the second part is writing an application for Windows Phone 7. &lt;/p&gt;
&lt;p&gt;Thinking about a good application isn’t simple but I can help you with some cool features available in Windows Phone 7 that can help your application to be much more cooler!&lt;/p&gt;
&lt;p&gt;There are APIs available to obtain raw sensor data from the device’s &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.devices.sensors.compass(v=vs.92).aspx"&gt;Compass&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.devices.sensors.gyroscope(v=vs.92).aspx"&gt;Gyroscope&lt;/a&gt;, &lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.devices.sensors.accelerometer(v=vs.92).aspx"&gt;Accelerometer&lt;/a&gt; and &lt;a href="http://msdn.microsoft.com/en-us/library/hh202984(v=vs.92).aspx" target="_blank"&gt;Motion API&lt;/a&gt;, but in this post I’ll talk about &lt;u&gt;&lt;strong&gt;Accelerometer Sensor.&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_233B67C0.png"&gt;&lt;img style="BACKGROUND-IMAGE:none;BORDER-RIGHT-WIDTH:0px;PADDING-LEFT:0px;PADDING-RIGHT:0px;DISPLAY:inline;BORDER-TOP-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-LEFT-WIDTH:0px;PADDING-TOP:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_07F2E8F2.png" width="750" height="508" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/1000531/download.aspx" target="_blank"&gt;Download Demo Project&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I’ll talk about everything but in this post I’ll demonstrate how to use Windows Phone 7 Accelerometer Sensor and how to use Windows Phone Emulator Tools to test your app.&lt;/p&gt;
&lt;h3&gt;Step 1: Create new Windows Phone 7 Application&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_515517E0.png"&gt;&lt;img style="BACKGROUND-IMAGE:none;BORDER-RIGHT-WIDTH:0px;PADDING-LEFT:0px;PADDING-RIGHT:0px;DISPLAY:inline;BORDER-TOP-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-LEFT-WIDTH:0px;PADDING-TOP:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_3563E2E8.png" width="638" height="345" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Add Reference to Sensors and Xna.Framework&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_30BDB261.png"&gt;&lt;img style="BACKGROUND-IMAGE:none;BORDER-RIGHT-WIDTH:0px;PADDING-LEFT:0px;PADDING-RIGHT:0px;DISPLAY:inline;BORDER-TOP-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-LEFT-WIDTH:0px;PADDING-TOP:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_6ED6CD12.png" width="248" height="380" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Step 2: Define &lt;span&gt;&lt;font color="#000000"&gt;Accelerometer&lt;/font&gt;&lt;/span&gt; &lt;/h3&gt;
&lt;p&gt;First thing we want to do is checking if our (or user) device supports &lt;span&gt;&lt;font color="#000000"&gt;Accelerometer, if not you should inform the user that your application might not work for him, if the device does support you should&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="FONT-SIZE:12pt;"&gt;private&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="FONT-SIZE:12pt;"&gt;&amp;nbsp;&lt;span&gt;&lt;font color="#2b91af"&gt;Accelerometer&lt;/font&gt;&lt;/span&gt; _sensor;&lt;br /&gt; &lt;br /&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt; MainPage()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; InitializeComponent();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (!&lt;span&gt;&lt;font color="#2b91af"&gt;Accelerometer&lt;/font&gt;&lt;/span&gt;.IsSupported)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#008000"&gt;// The device on which the application is running does not support&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#008000"&gt;// the accelerometer sensor. Alert the user and hide the&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#008000"&gt;// application bar.&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#2b91af"&gt;MessageBox&lt;/font&gt;&lt;/span&gt;.Show(&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;device does not support compass&amp;quot;&lt;/font&gt;&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ApplicationBar.IsVisible = &lt;span&gt;&lt;font color="#0000ff"&gt;false&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#0000ff"&gt;else&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SetAccelerometer();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;
&lt;p&gt;Create new Accelerometer and define the TimeBetweenUpdates (the default is 20 milliseconds), register to CurrentValueChanged and start the sensor by calling Start.&lt;/p&gt;&lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="FONT-SIZE:12pt;"&gt;private&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="FONT-SIZE:12pt;"&gt;&amp;nbsp;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; SetAccelerometer()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#008000"&gt;// Instantiate the accelerometer.&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _sensor = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;span&gt;&lt;font color="#2b91af"&gt;Accelerometer&lt;/font&gt;&lt;/span&gt;();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#008000"&gt;// Specify the desired time between updates. The sensor accepts&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#008000"&gt;// intervals in multiples of 20 ms.&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _sensor.TimeBetweenUpdates = &lt;span&gt;&lt;font color="#2b91af"&gt;TimeSpan&lt;/font&gt;&lt;/span&gt;.FromMilliseconds(40);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#008000"&gt;// The sensor may not support the requested time between updates.&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#008000"&gt;// The TimeBetweenUpdates property reflects the actual rate.&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _sensor.CurrentValueChanged += &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;span&gt;&lt;font color="#2b91af"&gt;EventHandler&lt;/font&gt;&lt;/span&gt;&amp;lt;&lt;span&gt;&lt;font color="#2b91af"&gt;SensorReadingEventArgs&lt;br /&gt;     &lt;/font&gt;&lt;/span&gt;&amp;lt;&lt;span&gt;&lt;font color="#2b91af"&gt;AccelerometerReading&lt;/font&gt;&lt;/span&gt;&amp;gt;&amp;gt;(SensorCurrentValueChanged);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; _sensor.Start();&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;
&lt;h3&gt;Step 3: Create On / Off Switch&lt;/h3&gt;
&lt;p&gt;Using ApplicationBar I’ve add a new button to turn the accelerometer on and off.&lt;/p&gt;&lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="FONT-SIZE:12pt;"&gt;&amp;lt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="FONT-SIZE:12pt;"&gt;&lt;span&gt;&lt;font color="#a31515"&gt;phone&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;PhoneApplicationPage.ApplicationBar&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;font color="#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;shell&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;ApplicationBar&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; IsVisible&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;True&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; IsMenuEnabled&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;True&amp;quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;span&gt;&lt;font color="#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;shell&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;ApplicationBarIconButton&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; IconUri&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;/ApplicationIcon.png&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#ff0000"&gt;Text&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;On / Off&amp;quot;&lt;/span&gt;&lt;/font&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#ff0000"&gt;Click&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;ApplicationBarIconButtonClick&amp;quot;&lt;/span&gt;&lt;span&gt;/&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;span&gt;&lt;font color="#a31515"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;shell&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;ApplicationBar&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;lt;/&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#a31515"&gt;phone&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;PhoneApplicationPage.ApplicationBar&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font style="FONT-SIZE:12pt;" color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;p&gt;When the user click the switch we will stop accelerometer, or if the accelerometer is already in stop state we’ll start him.&lt;/p&gt;&lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="FONT-SIZE:12pt;"&gt;private&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="FONT-SIZE:12pt;"&gt;&amp;nbsp;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; ApplicationBarIconButtonClick(&lt;span&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt; sender, &lt;span&gt;&lt;font color="#2b91af"&gt;EventArgs&lt;/font&gt;&lt;/span&gt; e)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (_sensor != &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt; &amp;amp;&amp;amp; _sensor.IsDataValid)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#008000"&gt;// Stop data acquisition from the accelerometer.&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _sensor.Stop();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#0000ff"&gt;else&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (_sensor == &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; SetAccelerometer();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#0000ff"&gt;try&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; _sensor.Start();&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#0000ff"&gt;catch&lt;/font&gt;&lt;/span&gt; (&lt;span&gt;&lt;font color="#2b91af"&gt;InvalidOperationException&lt;/font&gt;&lt;/span&gt;)&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#2b91af"&gt;MessageBox&lt;/font&gt;&lt;/span&gt;.Show(&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;unable to start accelerometer.&amp;quot;&lt;/font&gt;&lt;/span&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;
&lt;h3&gt;Step 4: Using Accelerometer Data&lt;/h3&gt;
&lt;blockquote&gt;
&lt;p&gt;The accelerometer measures the forces applied to the device at a moment in time. These forces can be used to determine in which direction the user is moving the device. The acceleration value is expressed as a 3-dimensional vector representing the acceleration components in the X, Y, and Z axes in gravitational units. The orientation of the acceleration is relative to the device such that -1g is applied in the Z-axis when the device is face up on a level table and -1g is applied to the Y-axis when the device is placed perpendicular to the table top.&lt;/p&gt;
&lt;p&gt;The Accelerometer sensor detects the force of gravity along with any forces resulting from the movement of the phone. The combined motion API, accessed using the&lt;a href="http://msdn.microsoft.com/en-us/library/microsoft.devices.sensors.motion(v=vs.92).aspx"&gt;Motion&lt;/a&gt; class, uses multiple device sensors to separate the gravity vector from the device acceleration and allows you to easily determine the current attitude (yaw, pitch, and roll) of the device.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;img alt="image" src="http://windowsteamblog.com/cfs-file.ashx/__key/CommunityServer-Blogs-Components-WeblogFiles/00-00-00-53-84-metablogapi/3630.image_5F00_thumb_5F00_7991C4A4.png" /&gt;&lt;/p&gt;
&lt;p&gt;The first thing is to point the finger based on the angle of the phone (the easy part), using &lt;span&gt;&lt;font color="#2b91af"&gt;MathHelper&lt;/font&gt;&lt;/span&gt;.ToDegrees on the sensor x value we’ll send the fingerImg angle.&lt;/p&gt;
&lt;p&gt;This second part requires some more calculations to place the &lt;strong&gt;&lt;u&gt;bubble&lt;/u&gt;&lt;/strong&gt; on the right X and Y coordination (not the same a spirit level – you can turn the axis to do that).&lt;/p&gt;&lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="FONT-SIZE:12pt;"&gt;private&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="FONT-SIZE:12pt;"&gt;&amp;nbsp;&lt;span&gt;&lt;font color="#0000ff"&gt;const&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;span&gt;&lt;font color="#0000ff"&gt;double&lt;/font&gt;&lt;/span&gt; EdgeGlassAngle = 20.0 * &lt;span&gt;&lt;font color="#2b91af"&gt;Math&lt;/font&gt;&lt;/span&gt;.PI / 180.0;&lt;br /&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;span&gt;&lt;font color="#0000ff"&gt;const&lt;/font&gt;&lt;/span&gt;&amp;nbsp;&lt;span&gt;&lt;font color="#0000ff"&gt;double&lt;/font&gt;&lt;/span&gt; UsableLateralAmplitude = 400;&lt;br /&gt; &lt;br /&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; SensorCurrentValueChanged(&lt;span&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt; sender, &lt;span&gt;&lt;font color="#2b91af"&gt;SensorReadingEventArgs&lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&amp;lt;&lt;span&gt;&lt;font color="#2b91af"&gt;AccelerometerReading&lt;/font&gt;&lt;/span&gt;&amp;gt; e)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#008000"&gt;// &lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#00008b"&gt;&lt;strong&gt;Note that this event handler is called from a background thread&lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#0000ff"&gt;this&lt;/font&gt;&lt;/span&gt;.Dispatcher.BeginInvoke(() =&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; acc = e.SensorReading.Acceleration;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#008000"&gt;//Point if the finger on the phone angle.&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ((&lt;span&gt;&lt;font color="#2b91af"&gt;RotateTransform&lt;/font&gt;&lt;/span&gt;)fingerImg.RenderTransform).Angle = &lt;br /&gt;                                           &lt;span&gt;&lt;font color="#2b91af"&gt;MathHelper&lt;/font&gt;&lt;/span&gt;.ToDegrees(acc.X);&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#008000"&gt;//Calculate the postiion of the bubble based on the &lt;br /&gt;            //Accelerometer X and Y&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; angleFlat = &lt;span&gt;&lt;font color="#2b91af"&gt;Math&lt;/font&gt;&lt;/span&gt;.Atan2(acc.Y, acc.X);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; magnitudeFlat = &lt;span&gt;&lt;font color="#2b91af"&gt;Math&lt;/font&gt;&lt;/span&gt;.Sqrt(&lt;span&gt;&lt;font color="#2b91af"&gt;Math&lt;/font&gt;&lt;/span&gt;.Pow(acc.X, 2.0) + &lt;br /&gt;                                               &lt;span&gt;&lt;font color="#2b91af"&gt;Math&lt;/font&gt;&lt;/span&gt;.Pow(acc.Y, 2));&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; edgeRadius = &lt;span&gt;&lt;font color="#2b91af"&gt;Math&lt;/font&gt;&lt;/span&gt;.Sin(EdgeGlassAngle);&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; xAngle = &lt;span&gt;&lt;font color="#2b91af"&gt;Math&lt;/font&gt;&lt;/span&gt;.Asin(acc.X) * 180.0 / &lt;span&gt;&lt;font color="#2b91af"&gt;Math&lt;/font&gt;&lt;/span&gt;.PI;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; yAngle = &lt;span&gt;&lt;font color="#2b91af"&gt;Math&lt;/font&gt;&lt;/span&gt;.Asin(acc.Y) * 180.0 / &lt;span&gt;&lt;font color="#2b91af"&gt;Math&lt;/font&gt;&lt;/span&gt;.PI;&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; angle.Text = &lt;span&gt;&lt;font color="#2b91af"&gt;String&lt;/font&gt;&lt;/span&gt;.Format(&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#3cb371"&gt;{0:0.0}&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;ֲ°&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#3cb371"&gt;{1:0.0}&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;ֲ°&amp;quot;&lt;/font&gt;&lt;/span&gt;,&lt;br /&gt;                                                      xAngle, -yAngle);&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; xPixelLocation = &lt;span&gt;&lt;font color="#2b91af"&gt;Math&lt;/font&gt;&lt;/span&gt;.Cos(angleFlat) * (magnitudeFlat / &lt;br /&gt;                      edgeRadius) * (UsableLateralAmplitude - 250) / 2;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; yPixelLocation = &lt;span&gt;&lt;font color="#2b91af"&gt;Math&lt;/font&gt;&lt;/span&gt;.Sin(angleFlat) * (magnitudeFlat /&lt;br /&gt;                      edgeRadius) * (UsableLateralAmplitude - 250) / 2;&lt;br /&gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#2b91af"&gt;Canvas&lt;/font&gt;&lt;/span&gt;.SetLeft(bubble, (xPixelLocation + 250) / 2);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#2b91af"&gt;Canvas&lt;/font&gt;&lt;/span&gt;.SetTop(bubble, (yPixelLocation + 450) / 2);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; });&lt;br /&gt; &lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;
&lt;p&gt;In order to test your application without deploying to the device it self you can use the emulator tools: &lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_4C328E97.png"&gt;&lt;img style="BACKGROUND-IMAGE:none;BORDER-BOTTOM:0px;BORDER-LEFT:0px;PADDING-LEFT:0px;PADDING-RIGHT:0px;DISPLAY:inline;BORDER-TOP:0px;BORDER-RIGHT:0px;PADDING-TOP:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_185A7279.png" width="756" height="512" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/1000531/download.aspx" target="_blank"&gt;Download Demo Project&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_5B0997E4.png"&gt;&lt;img style="BACKGROUND-IMAGE:none;BORDER-BOTTOM:0px;BORDER-LEFT:0px;PADDING-LEFT:0px;PADDING-RIGHT:0px;DISPLAY:inline;BORDER-TOP:0px;BORDER-RIGHT:0px;PADDING-TOP:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_73F5425C.png" width="750" height="508" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=1000533" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Development/default.aspx">Development</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TECH/default.aspx">TECH</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/How+To/default.aspx">How To</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Windows+Phone+7/default.aspx">Windows Phone 7</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET+4/default.aspx">.NET 4</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Accelerometer/default.aspx">Accelerometer</category></item><item><title>How To Connect Window Phone 7 and Windows 8 app to Microsoft pubCenter</title><link>http://blogs.microsoft.co.il/blogs/shair/archive/2012/01/27/how-to-connect-window-phone-7-and-windows-8-app-to-microsoft-pubcenter.aspx</link><pubDate>Fri, 27 Jan 2012 19:17:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:999198</guid><dc:creator>shair</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/shair/rsscomments.aspx?PostID=999198</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2012/01/27/how-to-connect-window-phone-7-and-windows-8-app-to-microsoft-pubcenter.aspx#comments</comments><description>&lt;div class="share-buttons"&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;PADDING-RIGHT:15px;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;&lt;a class="twitter-share-button" href="http://blogs.microsoft.co.il/blogs/shair/archive/2012/01/27/how-to-connect-window-phone-7-and-windows-8-app-to-microsoft-pubcen"&gt;Tweet&lt;/a&gt;&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;PADDING-RIGHT:25px;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;
&lt;script type="IN/Share"&gt;&lt;/script&gt;
&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;&lt;iframe style="BORDER-BOTTOM:medium none;BORDER-LEFT:medium none;WIDTH:100px;HEIGHT:21px;OVERFLOW:hidden;BORDER-TOP:medium none;BORDER-RIGHT:medium none;" src="http://www.facebook.com/plugins/like.php?href=http://blogs.microsoft.co.il/blogs/shair/archive/2012/01/27/how-to-connect-window-phone-7-and-windows-8-app-to-microsoft-pubcen&amp;amp;send=false&amp;amp;layout=button_count&amp;amp;width=450&amp;amp;show_faces=false&amp;amp;action=like&amp;amp;colorscheme=light&amp;amp;font=segoe+ui&amp;amp;height=21&amp;amp;appId=184186808308137" frameborder="0"&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;
&lt;div class="g-plusone"&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;
&lt;p&gt;When writing a Windows Phone 7 or Windows 8 application you might want to put some Ads, some applications cost money when others has ads.&lt;/p&gt;
&lt;p&gt;Microsoft pucCenter isn’t the only solution for Windows 7 and Windows 8 but it’s something easy and simple to do when working with Visual Studio to developer applications.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Microsoft Advertising &lt;strong&gt;pubCenter&lt;/strong&gt; empowers Web site publishers and Windows Phone 7 application developers to place ads within web pages and Windows Phone 7 apps. When users click on these ads, the publisher earns money from the advertiser, via Microsoft.&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/999193/download.aspx" target="_blank"&gt;Download Demo Project&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Step 1: Create pubCenter account and register a new application&lt;/h3&gt;
&lt;p&gt;Enter &lt;a title="https://pubcenter.microsoft.com/Login" href="https://pubcenter.microsoft.com/Login"&gt;https://pubcenter.microsoft.com/Login&lt;/a&gt;, register using Live Id or create new account.&lt;/p&gt;
&lt;p&gt;Then navigate to “Setup” and choose applications, and click on “&lt;strong&gt;Register application&lt;/strong&gt;”&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_3318C107.png"&gt;&lt;img style="BACKGROUND-IMAGE:none;BORDER-RIGHT-WIDTH:0px;PADDING-LEFT:0px;PADDING-RIGHT:0px;DISPLAY:inline;BORDER-TOP-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-LEFT-WIDTH:0px;PADDING-TOP:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_7B365716.png" width="683" height="485" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In the application registration choose what type of application it will be, a Windows Phone 7 or Windows 8? and save your new application.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_0FF829CA.png"&gt;&lt;img style="BACKGROUND-IMAGE:none;BORDER-RIGHT-WIDTH:0px;PADDING-LEFT:0px;PADDING-RIGHT:0px;DISPLAY:inline;BORDER-TOP-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-LEFT-WIDTH:0px;PADDING-TOP:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_46F20803.png" width="684" height="273" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;After the save completes copy and save your application id (we’ll use it later).&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_0432BCCB.png"&gt;&lt;img style="BACKGROUND-IMAGE:none;BORDER-RIGHT-WIDTH:0px;PADDING-LEFT:0px;PADDING-RIGHT:0px;DISPLAY:inline;BORDER-TOP-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-LEFT-WIDTH:0px;PADDING-TOP:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_0934FA7A.png" width="687" height="314" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Step 2: Create Ad Units&lt;/h3&gt;
&lt;p&gt;After you registered your application you need to create a ad unit.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;An ad unit defines the size and content of ads that appear on your site or in your application. &lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;You can create more than one ad unit in order to show different ads in different pages or the same page in your application.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_2D0DAC07.png"&gt;&lt;img style="BACKGROUND-IMAGE:none;BORDER-RIGHT-WIDTH:0px;PADDING-LEFT:0px;PADDING-RIGHT:0px;DISPLAY:inline;BORDER-TOP-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-LEFT-WIDTH:0px;PADDING-TOP:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_5D5480BD.png" width="685" height="194" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Choose the size and categories for that ad unit.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_3AB04242.png"&gt;&lt;img style="BACKGROUND-IMAGE:none;BORDER-RIGHT-WIDTH:0px;PADDING-LEFT:0px;PADDING-RIGHT:0px;DISPLAY:inline;BORDER-TOP-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-LEFT-WIDTH:0px;PADDING-TOP:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_51426ABC.png" width="689" height="429" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Again, copy and save the ad unit id (we’ll use it later).&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_517EEDF1.png"&gt;&lt;img style="BACKGROUND-IMAGE:none;BORDER-RIGHT-WIDTH:0px;PADDING-LEFT:0px;PADDING-RIGHT:0px;DISPLAY:inline;BORDER-TOP-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-LEFT-WIDTH:0px;PADDING-TOP:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_2F46E26B.png" width="692" height="328" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Step 3: Create Winnows Phone 7 Application With Ads&lt;/h3&gt;
&lt;p&gt;First download the &lt;a href="http://www.microsoft.com/download/en/details.aspx?id=8729" target="_blank"&gt;Microsoft Advertising SDK for Windows Phone&lt;/a&gt; or &lt;a href="http://go.microsoft.com/?linkid=9791406"&gt;Download Win 8 Ad SDK&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In Visual Studio 2010 create new project of type Windows Phone Application.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_538BC6ED.png"&gt;&lt;img style="BACKGROUND-IMAGE:none;BORDER-RIGHT-WIDTH:0px;PADDING-LEFT:0px;PADDING-RIGHT:0px;DISPLAY:inline;BORDER-TOP-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-LEFT-WIDTH:0px;PADDING-TOP:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_502A2F45.png" width="684" height="324" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Add reference to “&lt;strong&gt;Microsoft.Advertising.Mobile.UI&lt;/strong&gt;” located here &amp;quot;C:\Program Files (x86)\Microsoft SDKs\Advertising for Phone\Libraries\Microsoft.Advertising.Mobile.UI.dll&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_453D2830.png"&gt;&lt;img style="BACKGROUND-IMAGE:none;BORDER-RIGHT-WIDTH:0px;PADDING-LEFT:0px;PADDING-RIGHT:0px;DISPLAY:inline;BORDER-TOP-WIDTH:0px;BORDER-BOTTOM-WIDTH:0px;BORDER-LEFT-WIDTH:0px;PADDING-TOP:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_035642E2.png" width="253" height="336" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Step 4: Place Ad Inside Your Page&lt;/h3&gt;
&lt;p&gt;Open “MainPage.xaml” and add the following instead of the the ContentPanel grid, notice the &lt;span&gt;&lt;font color="#ff0000"&gt;ApplicationId &lt;font color="#000000"&gt;is the same for all three ads controls but the&lt;/font&gt; AdUnitId &lt;font color="#000000"&gt;is&lt;/font&gt; &lt;font color="#000000"&gt;different, this what cause the ads to show different ads.&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;* Leave fixed size : &lt;span&gt;&lt;font color="#ff0000"&gt;Width&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;480&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; Height&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;80&amp;quot; , &lt;font color="#000000"&gt;this can cause the ad to disappear.&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#a31515"&gt;&lt;font style="FONT-SIZE:12pt;"&gt;&amp;nbsp;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="FONT-SIZE:12pt;"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;Grid&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; x&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#ff0000"&gt;Name&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;ContentPanel&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; Grid.Row&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;1&amp;quot;&lt;/span&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;    &amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;StackPanel&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;font color="#a31515"&gt;       &amp;lt;my&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;AdControl&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; Width&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;480&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; Height&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;80&amp;quot;&lt;/span&gt;&lt;/font&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#ff0000"&gt;ApplicationId&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;4619ce4c-5ea4-46b9-8f36-f5ee1f4e1155&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#ff0000"&gt;AdUnitId&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;10029839&amp;quot;&lt;/span&gt;&lt;/font&gt;&amp;nbsp;&lt;span&gt;&lt;font color="#0000ff"&gt; /&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;    &lt;br /&gt;       &amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;my&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;AdControl&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; Width&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;480&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; Height&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;80&amp;quot;&lt;/span&gt;&lt;/font&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#ff0000"&gt;ApplicationId&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;4619ce4c-5ea4-46b9-8f36-f5ee1f4e1155&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#ff0000"&gt;AdUnitId&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;10020345&amp;quot;&lt;/span&gt;&lt;/font&gt;&amp;nbsp;&lt;span&gt;&lt;font color="#0000ff"&gt; /&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;    &lt;br /&gt;       &amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;my&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;:&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;AdControl&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; Width&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;480&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#ff0000"&gt; Height&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;80&amp;quot;&lt;/span&gt;&lt;/font&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#ff0000"&gt; ApplicationId&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;4619ce4c-5ea4-46b9-8f36-f5ee1f4e1155&amp;quot;&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;span&gt;&lt;font color="#ff0000"&gt; AdUnitId&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&amp;quot;10016624&amp;quot;&lt;/span&gt;&lt;/font&gt;&amp;nbsp;&lt;span&gt;&lt;font color="#0000ff"&gt; /&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;   &amp;lt;/&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;StackPanel&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;Grid&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font style="FONT-SIZE:12pt;" color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;h3&gt;The Results:&lt;/h3&gt;
&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_0C825856.png"&gt;&lt;img style="BACKGROUND-IMAGE:none;BORDER-BOTTOM:0px;BORDER-LEFT:0px;PADDING-LEFT:0px;PADDING-RIGHT:0px;DISPLAY:inline;BORDER-TOP:0px;BORDER-RIGHT:0px;PADDING-TOP:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_632B1057.png" width="322" height="299" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/999193/download.aspx" target="_blank"&gt;Download Demo Project&lt;/a&gt;&lt;/p&gt;&lt;/div&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=999198" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Development/default.aspx">Development</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Visual+Studio+2010/default.aspx">Visual Studio 2010</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/How+To/default.aspx">How To</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Windows+Phone+7/default.aspx">Windows Phone 7</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET+4/default.aspx">.NET 4</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Windows+8/default.aspx">Windows 8</category></item><item><title>TFS API Part 42 – Getting Started With Lab Management API</title><link>http://blogs.microsoft.co.il/blogs/shair/archive/2011/12/22/tfs-api-part-42-getting-started-with-lab-management-api.aspx</link><pubDate>Thu, 22 Dec 2011 17:12:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:965381</guid><dc:creator>shair</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/shair/rsscomments.aspx?PostID=965381</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2011/12/22/tfs-api-part-42-getting-started-with-lab-management-api.aspx#comments</comments><description>&lt;div class="share-buttons"&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;PADDING-RIGHT:15px;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;&lt;a class="twitter-share-button" href="http://twitter.com/share?url=http://blogs.microsoft.co.il/blogs/shair/archive/2011/12/22/tfs-api-part-42-getting-started-with-lab-management-api.aspx"&gt;Tweet&lt;/a&gt;&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;PADDING-RIGHT:25px;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;
&lt;script type="IN/Share"&gt;&lt;/script&gt;
&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;&lt;iframe style="WIDTH:100px;HEIGHT:21px;" src="http://www.facebook.com/plugins/like.php?href=http://blogs.microsoft.co.il/blogs/shair/archive/2011/12/22/tfs-api-part-42-getting-started-with-lab-management-api.aspx&amp;amp;send=false&amp;amp;layout=button_count&amp;amp;width=450&amp;amp;show_faces=false&amp;amp;action=like&amp;amp;colorscheme=light&amp;amp;font=segoe+ui&amp;amp;height=21&amp;amp;appId=184186808308137" scrolling="no" frameborder="0" style="border:none;overflow:hidden;width:450px;height:21px;"&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;
&lt;div class="g-plusone"&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;
&lt;p&gt;I did some cool things lately with TFS Lab Management API, from connecting it to TFS Web Access and allow REST access to the lab (if you want to ask why – The customer is always right &lt;img style="border-bottom-style:none;border-left-style:none;border-top-style:none;border-right-style:none;" class="wlEmoticon wlEmoticon-smile" alt="Smile" src="http://blogs.microsoft.co.il/blogs/shair/wlEmoticon-smile_6207A0F6.png" /&gt;).&lt;/p&gt;  &lt;p&gt;So this part of TFS API will deal with Lab Management API, although Lab Management API is not public I’ll show some cool things you can do but this will be under your own risk.&lt;/p&gt;  &lt;p&gt;Again, this is just the beginning of the Lab Management API, so let’s get started&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_35EAA405.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_1C52F10B.png" width="751" height="384" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/957845/download.aspx" target="_blank"&gt;Download Demo Project&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Step 1: Located “&lt;strong&gt;Microsoft.TeamFoundation.Lab.Client.dll&lt;/strong&gt;” &lt;/h3&gt;  &lt;p&gt;This dll cannot be found under Public, Private or ReferenceAssemblies it can only be found under GAC, so navigate here - &lt;font size="2"&gt;C:\Windows\assembly\GAC_MSIL\Microsoft.TeamFoundation.Lab.Client\10.0.0.0__b03f5f7f11d50a3a\      &lt;br /&gt;Microsoft.TeamFoundation.Lab.Client.dll&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;&lt;font size="2"&gt;Add this dll as reference to your project.&lt;/font&gt;&lt;/p&gt;  &lt;h3&gt;Step 2: Connect TFS and Obtain LabService&lt;/h3&gt;  &lt;p&gt;After connecting to TFS you need to obtain the Lab Service at the same way we did for all other services under TFS.&lt;/p&gt;  &lt;p&gt;If created a combo box with all team project for later use.&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;private&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; BtnConnectClick(&lt;span&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt; sender, &lt;span&gt;&lt;font color="#2b91af"&gt;RoutedEventArgs&lt;/font&gt;&lt;/span&gt; e)&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; tpp = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;TeamProjectPicker&lt;/font&gt;&lt;/span&gt;(&lt;span&gt;&lt;font color="#2b91af"&gt;TeamProjectPickerMode&lt;/font&gt;&lt;/span&gt;.NoProject,&lt;span&gt;&lt;font color="#0000ff"&gt;false&lt;/font&gt;&lt;/span&gt;);&lt;br /&gt;&amp;#160;&amp;#160; tpp.ShowDialog();&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (tpp.SelectedTeamProjectCollection == &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;) &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt;&amp;#160;&amp;#160; _tfs = tpp.SelectedTeamProjectCollection;&lt;br /&gt;&amp;#160;&amp;#160; _lab = (&lt;span&gt;&lt;font color="#2b91af"&gt;LabService&lt;/font&gt;&lt;/span&gt;)_tfs.GetService(&lt;span&gt;&lt;font color="#0000ff"&gt;typeof&lt;/font&gt;&lt;/span&gt;(&lt;span&gt;&lt;font color="#2b91af"&gt;LabService&lt;/font&gt;&lt;/span&gt;));&lt;br /&gt;  &lt;br /&gt;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; store = (&lt;span&gt;&lt;font color="#2b91af"&gt;WorkItemStore&lt;/font&gt;&lt;/span&gt;)_tfs.GetService&amp;lt;&lt;span&gt;&lt;font color="#2b91af"&gt;WorkItemStore&lt;/font&gt;&lt;/span&gt;&amp;gt;();&lt;br /&gt;&amp;#160;&amp;#160; listProjects.ItemsSource = store.Projects;&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;

&lt;h3&gt;&lt;font size="3"&gt;Step 3: Get Collection Hosts and &lt;/font&gt;Library Share&lt;/h3&gt;

&lt;p&gt;Before we start dealing with Team Projects and their Lab Vm’s and templates the below code will show how to pull the Lab Management Hosts and Library Share from the TFS Collection.&lt;/p&gt;

&lt;p&gt;Using the Lab Service and a QuerySpec object (we’ll use those a lot), we need to call QueryTeamProjectCollectionHostGroups method (right now we don’t need to add anything to the Query).&lt;/p&gt;

&lt;pre class="code"&gt;&lt;font color="#008000"&gt;&lt;span&gt;&lt;font style="font-size:12pt;"&gt;//public class TeamProjectCollectionHostGroupQuerySpec&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt;&lt;br /&gt;&lt;span&gt;//{&lt;/span&gt;&lt;br /&gt;&lt;span&gt;//&amp;#160; public TeamProjectCollectionHostGroupQuerySpec();&lt;/span&gt;&lt;br /&gt;&lt;span&gt;//&amp;#160; public Uri Location { get; set; }&lt;/span&gt;&lt;br /&gt;&lt;span&gt;//&amp;#160; public string Name { get; set; }&lt;/span&gt;&lt;br /&gt;&lt;span&gt;//}&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;font style="font-size:12pt;"&gt;&lt;br /&gt;listHostGroups.ItemsSource = _lab.QueryTeamProjectCollectionHostGroups(&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;TeamProjectCollectionHostGroupQuerySpec&lt;/font&gt;&lt;/span&gt;());&lt;br /&gt; &lt;br /&gt;&lt;font color="#008000"&gt;&lt;span&gt;//public class TeamProjectCollectionLibraryShareQuerySpec&lt;/span&gt;&lt;br /&gt;&lt;span&gt;//{&lt;/span&gt;&lt;br /&gt;&lt;span&gt;//&amp;#160; public TeamProjectCollectionLibraryShareQuerySpec();&lt;/span&gt;&lt;br /&gt;&lt;span&gt;//&amp;#160; public Uri Location { get; set; }&lt;/span&gt;&lt;br /&gt;&lt;span&gt;//&amp;#160; public string Name { get; set; }&lt;/span&gt;&lt;br /&gt;&lt;span&gt;//}&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;listLibraryShares.ItemsSource = _lab.&lt;br /&gt;          QueryTeamProjectCollectionLibraryShares(&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;TeamProjectCollectionLibraryShareQuerySpec&lt;/font&gt;&lt;/span&gt;());&lt;/font&gt;&lt;/pre&gt;

&lt;pre style="border-bottom-style:none;padding-bottom:0px;line-height:normal;background-color:transparent;border-left-style:none;padding-left:0px;padding-right:0px;border-top-style:none;border-right-style:none;padding-top:0px;" class="code"&gt;&lt;font size="3"&gt;&lt;/font&gt;&lt;/pre&gt;

&lt;h3&gt;Step 4: Get Lab Management Details For Team Project&lt;/h3&gt;

&lt;p&gt;Now, when you choose a Team Project we’ll call the GetProjectLabDetails method to extract all relevant lab information on that project.&lt;/p&gt;

&lt;p&gt;But first we’ll use the LabService.IsLabConfigured method to see if this project has any lab configurations, if it does then using the QuerySpec we can pull all Environments and Templates for that team project.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;void&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt; GetProjectLabDetails(&lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt; projectName)&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#008000"&gt;//Does this Team Project has Lab configure?&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (!_lab.IsLabConfigured(projectName)) &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#008000"&gt;//Creating Query for lab environments under a specific project name.&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; labQuerySpec = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;LabEnvironmentQuerySpec&lt;/font&gt;&lt;/span&gt;{Project = projectName};&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#008000"&gt;//public class LabEnvironmentQuerySpec&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#008000"&gt;//{&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#008000"&gt;//&amp;#160; public LabEnvironmentQuerySpec();&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#008000"&gt;//&amp;#160; public LabEnvironmentDisposition Disposition { get; set; }&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#008000"&gt;//&amp;#160; public Uri Location { get; set; }&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#008000"&gt;//&amp;#160; public string Project { get; set; }&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#008000"&gt;//}&lt;/font&gt;&lt;/span&gt;&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; listEnvironments.ItemsSource =_lab.QueryLabEnvironments(labQuerySpec);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; listTemplates.ItemsSource = _lab.QueryLabTemplates(&lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;br /&gt;    &lt;span&gt;&lt;font color="#2b91af"&gt;LabTemplateQuerySpec&lt;/font&gt;&lt;/span&gt;() { Project = projectName });&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/957845/download.aspx" target="_blank"&gt;Download Demo Project&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Enjoy.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=965381" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS/default.aspx">TFS</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS+Utilities/default.aspx">TFS Utilities</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Development/default.aspx">Development</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TECH/default.aspx">TECH</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS+API/default.aspx">TFS API</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Visual+Studio+2010/default.aspx">Visual Studio 2010</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Team+System+2010/default.aspx">Team System 2010</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS+2010/default.aspx">TFS 2010</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Lab+Management/default.aspx">Lab Management</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET+4/default.aspx">.NET 4</category></item><item><title>TFS API Part 41–Manage Groups and Members</title><link>http://blogs.microsoft.co.il/blogs/shair/archive/2011/12/07/tfs-api-part-41-manage-groups-and-members.aspx</link><pubDate>Wed, 07 Dec 2011 21:11:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:950429</guid><dc:creator>shair</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/shair/rsscomments.aspx?PostID=950429</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2011/12/07/tfs-api-part-41-manage-groups-and-members.aspx#comments</comments><description>&lt;div class="share-buttons"&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;PADDING-RIGHT:15px;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;&lt;a class="twitter-share-button" href="http://twitter.com/share?url=http://blogs.microsoft.co.il/blogs/shair/archive/2011/12/07/tfs-api-part-41-manage-groups-and-members.aspx"&gt;Tweet&lt;/a&gt;&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;PADDING-RIGHT:25px;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;
&lt;script type="IN/Share"&gt;&lt;/script&gt;
&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;&lt;iframe style="WIDTH:100px;HEIGHT:21px;" src="http://www.facebook.com/plugins/like.php?href=http://blogs.microsoft.co.il/blogs/shair/archive/2011/12/07/tfs-api-part-41-manage-groups-and-members.aspx&amp;amp;send=false&amp;amp;layout=button_count&amp;amp;width=450&amp;amp;show_faces=false&amp;amp;action=like&amp;amp;colorscheme=light&amp;amp;font=segoe+ui&amp;amp;height=21&amp;amp;appId=184186808308137" scrolling="no" frameborder="0" style="border:none;overflow:hidden;width:450px;height:21px;"&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;
&lt;div class="g-plusone"&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;
&lt;p&gt;In the past I’ve showed some examples on how to work with TFS IGroupSecurityService for getting users list, but you can do much more, Create new Group, Add or Remove users from group etc…&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2010/06/16/tfs-api-part-25-get-tfs-user-list-mail-sid-account-domain-tfs-2010.aspx" target="_blank"&gt;TFS API Part 25: Get TFS User List (Mail Sid, Account, Domain) – TFS 2010&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2009/01/14/tfs-api-part-4-get-tfs-user-list-mail-sid-account-domain.aspx" target="_blank"&gt;TFS API Part 4: Get TFS User List (Mail, Sid, Account, Domain)&lt;/a&gt; &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_5ED63986.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_4A7073FB.png" width="743" height="392" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/950425/download.aspx" target="_blank"&gt;Download Demo Project&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Step 1: Connect To TFS and Get All Users and Projects&lt;/h3&gt;  &lt;p&gt;As always we need to start with connecting to TFS, but here we’ll also obtain 2 important services for our demo &lt;strong&gt;IGroupSecurityService&lt;/strong&gt; and &lt;strong&gt;ICommonStructureService&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;Using &lt;u&gt;&lt;strong&gt;ICommonStructureService&lt;/strong&gt;&lt;/u&gt; we’ll be able to extract all Team Projects under the collection you choose, this is not the only way to do that.&lt;/p&gt;  &lt;p&gt;Using &lt;u&gt;&lt;strong&gt;IGroupSecurityService&lt;/strong&gt; &lt;/u&gt;will allow us to get all users under the “Project Collection Valid Users” category.     &lt;br /&gt;&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;private&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; BtnConnectClick(&lt;span&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt; sender, &lt;span&gt;&lt;font color="#2b91af"&gt;RoutedEventArgs&lt;/font&gt;&lt;/span&gt; e)&lt;br /&gt;{&lt;br /&gt;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; tpp = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;TeamProjectPicker&lt;/font&gt;&lt;/span&gt;(&lt;span&gt;&lt;font color="#2b91af"&gt;TeamProjectPickerMode&lt;/font&gt;&lt;/span&gt;.NoProject, &lt;span&gt;&lt;font color="#0000ff"&gt;false&lt;/font&gt;&lt;/span&gt;);&lt;br /&gt;&amp;#160; tpp.ShowDialog();&lt;br /&gt;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (tpp.SelectedTeamProjectCollection == &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;) &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt;  &lt;br /&gt;_tfs= tpp.SelectedTeamProjectCollection;&lt;br /&gt;_css= (&lt;span&gt;&lt;font color="#2b91af"&gt;ICommonStructureService&lt;/font&gt;&lt;/span&gt;)_tfs.GetService&amp;lt;&lt;span&gt;&lt;font color="#2b91af"&gt;ICommonStructureService&lt;/font&gt;&lt;/span&gt;&amp;gt;();&lt;br /&gt;_gss= (&lt;span&gt;&lt;font color="#2b91af"&gt;IGroupSecurityService&lt;/font&gt;&lt;/span&gt;)_tfs.GetService&amp;lt;&lt;span&gt;&lt;font color="#2b91af"&gt;IGroupSecurityService&lt;/font&gt;&lt;/span&gt;&amp;gt;();&lt;br /&gt; &lt;br /&gt;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; allSids = _gss.ReadIdentity(&lt;span&gt;&lt;font color="#2b91af"&gt;SearchFactor&lt;/font&gt;&lt;/span&gt;.AccountName, &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;Project Collection Valid Users&amp;quot;&lt;/font&gt;&lt;/span&gt;, &lt;span&gt;&lt;font color="#2b91af"&gt;QueryMembership&lt;/font&gt;&lt;/span&gt;.Expanded);&lt;br /&gt; &lt;br /&gt;&amp;#160; listAllUsers.ItemsSource = _gss.ReadIdentities(&lt;span&gt;&lt;font color="#2b91af"&gt;SearchFactor&lt;/font&gt;&lt;/span&gt;.Sid,&lt;br /&gt;  allSids.Members, &lt;span&gt;&lt;font color="#2b91af"&gt;QueryMembership&lt;/font&gt;&lt;/span&gt;.None).Where(a=&amp;gt;a.Type == &lt;br /&gt;  &lt;span&gt;&lt;font color="#2b91af"&gt;IdentityType&lt;/font&gt;&lt;/span&gt;.WindowsUser || a.Type == &lt;span&gt;&lt;font color="#2b91af"&gt;IdentityType&lt;/font&gt;&lt;/span&gt;.WindowsGroup);&lt;br /&gt; &lt;br /&gt;&amp;#160; listProjects.ItemsSource = _css.ListAllProjects();&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;

&lt;h3&gt;Step 2: Get All Application Groups Under a Team Project&lt;/h3&gt;

&lt;p&gt;Once you choose a project we’ll use Project Uri and ListApplicationGroups method under &lt;strong&gt;&lt;u&gt;IGroupSecurityService&lt;/u&gt;&lt;/strong&gt; to get all Groups under that project.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;private&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; ListProjectsSelectionChanged(&lt;span&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt; sender,&lt;br /&gt; &lt;span&gt;&lt;font color="#2b91af"&gt;SelectionChangedEventArgs&lt;/font&gt;&lt;/span&gt; e)&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (listProjects.SelectedItem == &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;) &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; project = listProjects.SelectedItem &lt;span&gt;&lt;font color="#0000ff"&gt;as&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;ProjectInfo&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; listGroups.ItemsSource = _gss.ListApplicationGroups(project.Uri);&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;

&lt;h3&gt;Step 3: Get Users From Specific Group&lt;/h3&gt;

&lt;p&gt;When you select a specific group we’ll use the group SID to get all members under that group.&lt;/p&gt;

&lt;p&gt;Make sure to change the SearchFactor to SID instead on AccountName, this will prevent getting users from another Project where the Group Name is not unique.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;private&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; ListGroupsSelectionChanged(&lt;span&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt; sender, &lt;br /&gt;&lt;span&gt;&lt;font color="#2b91af"&gt;SelectionChangedEventArgs&lt;/font&gt;&lt;/span&gt; e)&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (listGroups.SelectedItem == &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;) &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; group = listGroups.SelectedItem &lt;span&gt;&lt;font color="#0000ff"&gt;as&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;Identity&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; sids = _gss.ReadIdentity(&lt;span&gt;&lt;font color="#2b91af"&gt;SearchFactor&lt;/font&gt;&lt;/span&gt;.Sid, group.Sid, &lt;br /&gt;               &lt;span&gt;&lt;font color="#2b91af"&gt;QueryMembership&lt;/font&gt;&lt;/span&gt;.Expanded);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (sids == &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt; || sids.Members.Length == 0)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; listUsers.ItemsSource = &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; listUsers.ItemsSource = _gss.ReadIdentities(&lt;span&gt;&lt;font color="#2b91af"&gt;SearchFactor&lt;/font&gt;&lt;/span&gt;.Sid, &lt;br /&gt;                                 sids.Members, &lt;span&gt;&lt;font color="#2b91af"&gt;QueryMembership&lt;/font&gt;&lt;/span&gt;.None);&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;

&lt;h3&gt;Step 4: Add New Application Group&lt;/h3&gt;

&lt;p&gt;This part is very simple, you just need to obtain the Project Uri and call &lt;strong&gt;CreateApplicationGroup&lt;/strong&gt; under &lt;strong&gt;&lt;u&gt;IGroupSecurityService&lt;/u&gt;&lt;/strong&gt; with the Project Uri and the new Group Name.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;private&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; BtnAddGroupClick(&lt;span&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt; sender, &lt;span&gt;&lt;font color="#2b91af"&gt;RoutedEventArgs&lt;/font&gt;&lt;/span&gt; e)&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (&lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt;.IsNullOrEmpty(txtGroupName.Text) || &lt;br /&gt;               listProjects.SelectedItem == &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;) &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&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; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; project = listProjects.SelectedItem &lt;span&gt;&lt;font color="#0000ff"&gt;as&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;ProjectInfo&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; groupname = txtGroupName.Text;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;try&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&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&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; result = _gss.CreateApplicationGroup(project.Uri, groupname,&lt;br /&gt;                      &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;Your Group Description&amp;quot;&lt;/font&gt;&lt;/span&gt;);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ListProjectsSelectionChanged(sender, &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;catch&lt;/font&gt;&lt;/span&gt; (&lt;span&gt;&lt;font color="#2b91af"&gt;Exception&lt;/font&gt;&lt;/span&gt; ex)&lt;br /&gt;&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&gt;&lt;font color="#2b91af"&gt;MessageBox&lt;/font&gt;&lt;/span&gt;.Show(ex.Message);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;

&lt;h3&gt;Step 5: Remove Application Group&lt;/h3&gt;

&lt;p&gt;This part is also very simple, you need to call DeleteApplicationGroup method under &lt;strong&gt;&lt;u&gt;IGroupSecurityService&lt;/u&gt;&lt;/strong&gt; with the Group sid you want to delete.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;private&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; BtnRemoveGroupClick(&lt;span&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt; sender, &lt;span&gt;&lt;font color="#2b91af"&gt;RoutedEventArgs&lt;/font&gt;&lt;/span&gt; e)&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (listGroups.SelectedItem == &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;) &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; result = &lt;span&gt;&lt;font color="#2b91af"&gt;MessageBox&lt;/font&gt;&lt;/span&gt;.Show(&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;You are about to remove application &lt;br /&gt;    group from TFS, press yes to continue&amp;quot;&lt;/font&gt;&lt;/span&gt;,&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;Remove Group&amp;quot;&lt;/font&gt;&lt;/span&gt;, &lt;span&gt;&lt;font color="#2b91af"&gt;MessageBoxButton&lt;/font&gt;&lt;/span&gt;.YesNo, &lt;span&gt;&lt;font color="#2b91af"&gt;MessageBoxImage&lt;/font&gt;&lt;/span&gt;.Question);&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;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;br /&gt;    &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (result == &lt;span&gt;&lt;font color="#2b91af"&gt;MessageBoxResult&lt;/font&gt;&lt;/span&gt;.No) &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; group = listGroups.SelectedItem &lt;span&gt;&lt;font color="#0000ff"&gt;as&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;Identity&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; _gss.DeleteApplicationGroup(group.Sid);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ListProjectsSelectionChanged(sender, &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;);&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;

&lt;h3&gt;Step 6: Add User To Application Group&lt;/h3&gt;

&lt;p&gt;For this you need to obtain the User sid and Group sid and again using the &lt;strong&gt;&lt;u&gt;IGroupSecurityService&lt;/u&gt;&lt;/strong&gt; add call AddMemberToApplicationGroup method passing those values.&lt;/p&gt;

&lt;p&gt;If the User already exists in that Group you will receive a soap exception.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;private&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; BtnAddUserToGroupClick(&lt;span&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt; sender, &lt;span&gt;&lt;font color="#2b91af"&gt;RoutedEventArgs&lt;/font&gt;&lt;/span&gt; e)&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (listAllUsers.SelectedItem == &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt; &lt;br /&gt;     || listGroups.SelectedItem == &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;) &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; group = listGroups.SelectedItem &lt;span&gt;&lt;font color="#0000ff"&gt;as&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;Identity&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; user = listAllUsers.SelectedItem &lt;span&gt;&lt;font color="#0000ff"&gt;as&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;Identity&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;try&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; _gss.AddMemberToApplicationGroup(group.Sid, user.Sid);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ListGroupsSelectionChanged(sender, &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;catch&lt;/font&gt;&lt;/span&gt; (&lt;span&gt;&lt;font color="#2b91af"&gt;Exception&lt;/font&gt;&lt;/span&gt; ex)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;span&gt;&lt;font color="#008000"&gt;//TF50235: The group Test Group already has a member Administrators.&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#2b91af"&gt;MessageBox&lt;/font&gt;&lt;/span&gt;.Show(ex.Message);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;

&lt;h3&gt;Step 7: Remove User From Application Group&lt;/h3&gt;

&lt;p&gt;It’s the same as Adding a user to a group, just call RemoveMemberFromApplicationGroup method.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;private&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; BtnRemoveUserFromGroupClick(&lt;span&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt; sender, &lt;span&gt;&lt;font color="#2b91af"&gt;RoutedEventArgs&lt;/font&gt;&lt;/span&gt; e)&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (listUsers.SelectedItem == &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt; || &lt;br /&gt;       listGroups.SelectedItem == &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;) &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; group = listGroups.SelectedItem &lt;span&gt;&lt;font color="#0000ff"&gt;as&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;Identity&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; user = listUsers.SelectedItem &lt;span&gt;&lt;font color="#0000ff"&gt;as&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;Identity&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; _gss.RemoveMemberFromApplicationGroup(group.Sid,user.Sid);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ListGroupsSelectionChanged(sender, &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;);&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/950425/download.aspx" target="_blank"&gt;Download Demo Project&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Enjoy.&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=950429" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS/default.aspx">TFS</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS+Administration/default.aspx">TFS Administration</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS+Utilities/default.aspx">TFS Utilities</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Development/default.aspx">Development</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TECH/default.aspx">TECH</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS+API/default.aspx">TFS API</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Visual+Studio+2010/default.aspx">Visual Studio 2010</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Team+System+2010/default.aspx">Team System 2010</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS+2010/default.aspx">TFS 2010</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET+4/default.aspx">.NET 4</category></item><item><title>Email Confirmation - ASP.NET MVC Web Application</title><link>http://blogs.microsoft.co.il/blogs/shair/archive/2011/12/06/email-confirmation-asp-net-mvc-web-application.aspx</link><pubDate>Tue, 06 Dec 2011 20:53:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:949294</guid><dc:creator>shair</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/shair/rsscomments.aspx?PostID=949294</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2011/12/06/email-confirmation-asp-net-mvc-web-application.aspx#comments</comments><description>&lt;div class="share-buttons"&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;PADDING-RIGHT:15px;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;&lt;a class="twitter-share-button" href="http://twitter.com/share?url=http://blogs.microsoft.co.il/blogs/shair/archive/2011/12/06/email-confirmation-asp-net-mvc-web-application.aspx"&gt;Tweet&lt;/a&gt;&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;PADDING-RIGHT:25px;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;
&lt;script type="IN/Share"&gt;&lt;/script&gt;
&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;&lt;iframe style="WIDTH:100px;HEIGHT:21px;" src="http://www.facebook.com/plugins/like.php?href=http://blogs.microsoft.co.il/blogs/shair/archive/2011/12/06/email-confirmation-asp-net-mvc-web-application.aspx&amp;amp;send=false&amp;amp;layout=button_count&amp;amp;width=450&amp;amp;show_faces=false&amp;amp;action=like&amp;amp;colorscheme=light&amp;amp;font=segoe+ui&amp;amp;height=21&amp;amp;appId=184186808308137" scrolling="no" frameborder="0" style="border:none;overflow:hidden;width:450px;height:21px;"&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;
&lt;div class="g-plusone"&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;
&lt;p&gt;In my previous post on ASP MVC I showed &lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2011/11/14/add-recaptcha-to-asp-net-mvc-web-application.aspx" target="_blank"&gt;How To Add Captcha&lt;/a&gt;&lt;em&gt; &lt;/em&gt;to ASP MVC Web Application, but even if you use captcha you still want to make sure the user email is real and not just a fake one.&lt;/p&gt;  &lt;p&gt;In order to make sure the user has gave you his real email you need to use Email Confirmation mechanism to your site.&lt;/p&gt;  &lt;p&gt;ASP MVC is doing some of the work for us, when a user is register to your site is assign with a unique ID (Guid) property called -&amp;#160; &lt;u&gt;&lt;strong&gt;ProviderUserKey&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;  &lt;p&gt;I’ll use this value to verify the account.&lt;/p&gt;  &lt;h3&gt;Step 1: Create new ASP MVC 3 Web Site   &lt;br /&gt;    &lt;br /&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_37429FC2.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_3F2A1C57.png" width="705" height="381" /&gt;&lt;/a&gt;&lt;/h3&gt;  &lt;h3&gt;Step 2: Modify Web.Config with SMTP Settings&lt;/h3&gt;  &lt;p&gt;Before we get started with the Email Confirmation implementation we need to define our email settings, to do so I’ve used my Gmail account (just for this test) and add those values in the web.config just below the configuration tag.&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;&amp;lt;&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt;&lt;span&gt;&lt;font color="#a31515"&gt;configuration&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;#160; &amp;lt;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#a31515"&gt;system.net&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#a31515"&gt;mailSettings&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#a31515"&gt;smtp&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;#160;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#ff0000"&gt;deliveryMethod&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;/span&gt;&amp;quot;&lt;span&gt;&lt;font color="#0000ff"&gt;Network&lt;/font&gt;&lt;/span&gt;&amp;quot;&lt;font color="#0000ff"&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#a31515"&gt;network&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;#160;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#ff0000"&gt;host&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;/span&gt;&amp;quot;&lt;span&gt;&lt;font color="#0000ff"&gt;smtp.gmail.com&lt;/font&gt;&lt;/span&gt;&amp;quot;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;#160;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#ff0000"&gt;port&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;/span&gt;&amp;quot;&lt;span&gt;&lt;font color="#0000ff"&gt;587&lt;/font&gt;&lt;/span&gt;&amp;quot;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;#160;&lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#ff0000"&gt;                                       userName&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;/span&gt;&amp;quot;&lt;span&gt;&lt;font color="#0000ff"&gt;[YourName@Gmail.com]&lt;/font&gt;&lt;/span&gt;&amp;quot;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;#160;&lt;br /&gt;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#ff0000"&gt;                                       password&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;=&lt;/font&gt;&lt;/span&gt;&amp;quot;&lt;span&gt;&lt;font color="#0000ff"&gt;[Your Password]&lt;/font&gt;&lt;/span&gt;&amp;quot;&lt;font color="#0000ff"&gt;&lt;span&gt; /&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#a31515"&gt;smtp&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#a31515"&gt;mailSettings&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;#160; &amp;lt;/&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#a31515"&gt;system.net&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font style="font-size:12pt;" color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;h3&gt;&lt;span&gt;&lt;font color="#000000" size="4"&gt;Step 3: Add Confirmation View&lt;/font&gt;&lt;/span&gt;&lt;/h3&gt;

&lt;p&gt;&lt;font size="3"&gt;After the user has register we want to redirect him to a confirmation page and tell him to check his email for the confirmation link, so &lt;/font&gt;&lt;/p&gt;

&lt;p&gt;&lt;span&gt;&lt;font color="#000000" size="3"&gt;Add new View called – &lt;u&gt;&lt;strong&gt;Confirmation&lt;/strong&gt;&lt;/u&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background-image:none;background-attachment:scroll;background-repeat:repeat;background-position:0% 0%;"&gt;&lt;font style="background-color:#ffff00;"&gt;&lt;font style="font-size:12pt;"&gt;@{&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; ViewBag.Title = &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;Email Confirmation&amp;quot;&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt;&lt;span style="background-image:none;background-attachment:scroll;background-repeat:repeat;background-position:0% 0%;"&gt;&lt;font style="background-color:#ffff00;"&gt;}&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;lt;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#800000"&gt;h2&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Confirmation&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#800000"&gt;h2&lt;/font&gt;&lt;/span&gt;&lt;font color="#0000ff"&gt;&lt;span&gt;&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span&gt;&amp;lt;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font color="#800000"&gt;p&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; Thank you for registering. Please check your email for a confirmation&lt;br /&gt;    request with a link that will confirm your account. Once you click the&lt;br /&gt;    link, your registration will be complete.&lt;span&gt;&lt;font color="#0000ff"&gt;&amp;lt;/&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#800000"&gt;p&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;span&gt;&lt;font style="font-size:12pt;" color="#0000ff"&gt;&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;

&lt;p&gt;&lt;span&gt;&lt;font color="#000000" size="3"&gt;In the AccountController add result for Confirmation&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;ActionResult&lt;/font&gt;&lt;/span&gt; Confirmation()&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt; View();&lt;br /&gt;}&lt;/pre&gt;
&lt;span&gt;&lt;font color="#000000" size="3"&gt;
    &lt;h3&gt;
      &lt;br /&gt;&lt;/h3&gt;
  &lt;/font&gt;&lt;/span&gt;

&lt;h2&gt;&lt;span&gt;&lt;font color="#000000" size="4"&gt;Step 4: Send Mail&lt;/font&gt;&lt;/span&gt;&lt;/h2&gt;

&lt;pre&gt;&lt;span&gt;&lt;font color="#000000" size="3" face="Verdana"&gt;Before changing the registration we need to create the email functionality, this confirmation&lt;br /&gt;email will contain the &lt;strong&gt;&lt;u&gt;ProviderUserKey&lt;/u&gt;&lt;/strong&gt; and a direct link to our site. &lt;br /&gt;The SendConfirmationEmail method will receive the UserName, using &lt;span&gt;&lt;font color="#2b91af"&gt;Membership&lt;/font&gt;&lt;/span&gt;.GetUser&lt;br /&gt;we’ll be able to get all the information on that user and of course the &lt;strong&gt;&lt;u&gt;ProviderUserKey.&lt;/u&gt;&lt;/strong&gt;&lt;/font&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;pre&gt;&lt;font face="Verdana"&gt;&lt;font size="3"&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#000000"&gt;I’ve built the confirmation url using HttpContext and combine the User Guid ID and the site url.&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;&lt;/pre&gt;
&lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; verifyUrl = &lt;span&gt;&lt;font color="#2b91af"&gt;HttpContext&lt;/font&gt;&lt;/span&gt;.Current.Request.Url.GetLeftPart

&lt;br /&gt;(&lt;span&gt;&lt;font color="#2b91af"&gt;UriPartial&lt;/font&gt;&lt;/span&gt;.Authority) + &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;/Account/Verify/&amp;quot;&lt;/font&gt;&lt;/span&gt; + confirmationGuid;&lt;font face="Verdana"&gt;&lt;font size="3"&gt;&lt;span&gt;&lt;font color="#000000"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/font&gt;&lt;/font&gt;

&lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;public&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;class&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;EmailManager&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;const&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt; EmailFrom = &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;noreplay@gmail.com&amp;quot;&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;static&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; SendConfirmationEmail(&lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt; userName)&lt;br /&gt;&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&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; user = &lt;span&gt;&lt;font color="#2b91af"&gt;Membership&lt;/font&gt;&lt;/span&gt;.GetUser(userName.ToString());&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; confirmationGuid = user.ProviderUserKey.ToString();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; verifyUrl = &lt;span&gt;&lt;font color="#2b91af"&gt;HttpContext&lt;/font&gt;&lt;/span&gt;.Current.Request.Url.GetLeftPart&lt;br /&gt;           (&lt;span&gt;&lt;font color="#2b91af"&gt;UriPartial&lt;/font&gt;&lt;/span&gt;.Authority) + &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;/Account/Verify/&amp;quot;&lt;/font&gt;&lt;/span&gt; + confirmationGuid;&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;/span&gt; (&lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; client = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;SmtpClient&lt;/font&gt;&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; &lt;span&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;/span&gt; (&lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; message = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;MailMessage&lt;/font&gt;&lt;/span&gt;(EmailFrom, user.Email))&lt;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;&amp;#160;&amp;#160;&amp;#160;&amp;#160; message.Subject = &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;Please Verify your Account&amp;quot;&lt;/font&gt;&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; message.Body = &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;&amp;lt;meta content=\&amp;quot;text/html; &lt;br /&gt;charset=utf-8\&amp;quot; /&amp;gt;&amp;lt;/head&amp;gt;&amp;lt;body&amp;gt;&amp;lt;p&amp;gt;Dear &amp;quot;&lt;/font&gt;&lt;/span&gt; + user.UserName +&lt;br /&gt;&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;, &amp;lt;/p&amp;gt;&amp;lt;p&amp;gt;To verify your account, please click the following link:&amp;lt;/p&amp;gt;&amp;quot;&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;+ &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;&amp;lt;p&amp;gt;&amp;lt;a href=\&amp;quot;&amp;quot;&lt;/font&gt;&lt;/span&gt; + verifyUrl + &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;\&amp;quot; target=\&amp;quot;_blank\&amp;quot;&amp;gt;&amp;quot;&lt;/font&gt;&lt;/span&gt; + verifyUrl + &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;&lt;br /&gt;+&amp;quot;&amp;lt;/a&amp;gt;&amp;lt;/p&amp;gt;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;&amp;lt;div&amp;gt;Best regards,&amp;lt;/div&amp;gt;&amp;lt;div&amp;gt;Someone&amp;lt;/div&amp;gt;&amp;lt;p&amp;gt;Do not forward &amp;quot;&lt;br /&gt;+&amp;quot;this email. The verify link is private.&amp;lt;/p&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;&amp;quot;&lt;/font&gt;&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;&amp;#160;&amp;#160;&amp;#160;&amp;#160; message.IsBodyHtml = &lt;span&gt;&lt;font color="#0000ff"&gt;true&lt;/font&gt;&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;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; client.EnableSsl = &lt;span&gt;&lt;font color="#0000ff"&gt;true&lt;/font&gt;&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; client.Send(message);&lt;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;/pre&gt;
&lt;span&gt;&lt;font color="#000000" size="3"&gt;
    &lt;h3&gt;Step 5: Change Registration&lt;/h3&gt;
  &lt;/font&gt;&lt;/span&gt;

&lt;p&gt;Now, we need to change Registration functionality, the main thing is when creating a new user we need to change the user state to &lt;strong&gt;&lt;u&gt;Not Approve&lt;/u&gt;&lt;/strong&gt; and instead of performing login we need to send him an email using our EmailManager and show him the confirmation page.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;font style="font-size:12pt;"&gt;[&lt;span&gt;&lt;font color="#2b91af"&gt;HttpPost&lt;/font&gt;&lt;/span&gt;]&lt;br /&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#2b91af"&gt;ActionResult&lt;/font&gt;&lt;/span&gt; Register(&lt;span&gt;&lt;font color="#2b91af"&gt;RegisterModel&lt;/font&gt;&lt;/span&gt; model)&lt;br /&gt;{&lt;br /&gt;    &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (ModelState.IsValid)&lt;br /&gt;    {&lt;br /&gt;        &lt;span&gt;&lt;font color="#008000"&gt;// Attempt to register the user&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span&gt;&lt;font color="#2b91af"&gt;MembershipCreateStatus&lt;/font&gt;&lt;/span&gt; createStatus;&lt;br /&gt;        &lt;span&gt;&lt;font color="#008000"&gt;//Make sure the user is not approve at this point!!!&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;        &lt;span&gt;&lt;font color="#2b91af"&gt;Membership&lt;/font&gt;&lt;/span&gt;.CreateUser(model.UserName, model.Password, model.Email,&lt;br /&gt;        &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;, &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;, &lt;span&gt;&lt;font style="background-color:#ffff00;" color="#0000ff"&gt;false&lt;/font&gt;&lt;/span&gt;, &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;, &lt;span&gt;&lt;font color="#0000ff"&gt;out&lt;/font&gt;&lt;/span&gt; createStatus);&lt;br /&gt; &lt;br /&gt;        &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (createStatus == &lt;span&gt;&lt;font color="#2b91af"&gt;MembershipCreateStatus&lt;/font&gt;&lt;/span&gt;.Success)&lt;br /&gt;        {&lt;br /&gt;            &lt;font style="background-color:#ffff00;"&gt;&lt;span&gt;&lt;font color="#2b91af"&gt;EmailManager&lt;/font&gt;&lt;/span&gt;.SendConfirmationEmail(model.UserName);&lt;br /&gt;            &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt; RedirectToAction(&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;Confirmation&amp;quot;&lt;/font&gt;&lt;/span&gt;, &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;Account&amp;quot;&lt;/font&gt;&lt;/span&gt;);&lt;/font&gt;&lt;br /&gt;        }&lt;br /&gt;        &lt;span&gt;&lt;font color="#0000ff"&gt;else&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;        {&lt;br /&gt;            ModelState.AddModelError(&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;&amp;quot;&lt;/font&gt;&lt;/span&gt;, ErrorCodeToString(createStatus));&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;    &lt;span&gt;&lt;font color="#008000"&gt;// If we got this far, something failed, redisplay form&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;    &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt; View(model);&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;

&lt;h2&gt;&lt;span&gt;&lt;font color="#000000" size="3"&gt;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#000000" size="4"&gt;Step 6: Add Verify&lt;/font&gt;&lt;/span&gt;&lt;/h2&gt;

&lt;p&gt;In the AccountController I’ve add a Verify ActionResult, the Verify will receive User ID, then we’ll check for some bad Ids, if the user is already approved SignOut the user a redirect to the LogOn page, if the user is not approve we need to change the IsApprove to true and call UpdateUser to update the database with the new change, also we will do the login for the user and redirect him to the home page.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;public&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt; &lt;span&gt;&lt;font color="#2b91af"&gt;ActionResult&lt;/font&gt;&lt;/span&gt; Verify(&lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt; id)&lt;br /&gt;{&lt;br /&gt;    &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (&lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt;.IsNullOrEmpty(id) || (!&lt;span&gt;&lt;font color="#2b91af"&gt;Regex&lt;/font&gt;&lt;/span&gt;.IsMatch(id, &lt;span&gt;&lt;font color="#a31515"&gt;@&amp;quot;[0-9a-f]{8}\-&lt;br /&gt;                                     ([0-9a-f]{4}\-){3}[0-9a-f]{12}&amp;quot;&lt;/font&gt;&lt;/span&gt;)))&lt;br /&gt;    {&lt;br /&gt;        ViewBag.Msg = &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;Not Good!!!&amp;quot;&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt;        &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt; View();&lt;br /&gt;    }&lt;br /&gt; &lt;br /&gt;    &lt;span&gt;&lt;font color="#0000ff"&gt;else&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;    {&lt;br /&gt;        &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; user = &lt;span&gt;&lt;font color="#2b91af"&gt;Membership&lt;/font&gt;&lt;/span&gt;.GetUser(&lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt; &lt;span&gt;&lt;font color="#2b91af"&gt;Guid&lt;/font&gt;&lt;/span&gt;(id));&lt;br /&gt; &lt;br /&gt;        &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (!user.IsApproved)&lt;br /&gt;        {&lt;br /&gt;            user.IsApproved = &lt;span&gt;&lt;font color="#0000ff"&gt;true&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt;            &lt;span&gt;&lt;font color="#2b91af"&gt;Membership&lt;/font&gt;&lt;/span&gt;.UpdateUser(user);&lt;br /&gt;            &lt;span&gt;&lt;font color="#2b91af"&gt;FormsAuthentication&lt;/font&gt;&lt;/span&gt;.SetAuthCookie(user.UserName, &lt;span&gt;&lt;font color="#0000ff"&gt;false&lt;/font&gt;&lt;/span&gt;);&lt;br /&gt;            &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt; RedirectToAction(&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;Index&amp;quot;&lt;/font&gt;&lt;/span&gt;, &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;Home&amp;quot;&lt;/font&gt;&lt;/span&gt;);&lt;br /&gt;        }&lt;br /&gt;        &lt;span&gt;&lt;font color="#0000ff"&gt;else&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;        {&lt;br /&gt;            &lt;span&gt;&lt;font color="#2b91af"&gt;FormsAuthentication&lt;/font&gt;&lt;/span&gt;.SignOut();&lt;br /&gt;            ViewBag.Msg = &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;Account Already Approved&amp;quot;&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt;            &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt; RedirectToAction(&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;LogOn&amp;quot;&lt;/font&gt;&lt;/span&gt;);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;
Enjoy&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=949294" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Development/default.aspx">Development</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Visual+Studio/default.aspx">Visual Studio</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Web/default.aspx">Web</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TECH/default.aspx">TECH</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Visual+Studio+2010/default.aspx">Visual Studio 2010</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Asp.Net/default.aspx">Asp.Net</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/How+To/default.aspx">How To</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET+4/default.aspx">.NET 4</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/MVC/default.aspx">MVC</category></item><item><title>My Lecture at Munich ALM Days 2011</title><link>http://blogs.microsoft.co.il/blogs/shair/archive/2011/11/28/my-lecture-at-munich-alm-days-2011.aspx</link><pubDate>Mon, 28 Nov 2011 23:42:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:943104</guid><dc:creator>shair</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/shair/rsscomments.aspx?PostID=943104</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2011/11/28/my-lecture-at-munich-alm-days-2011.aspx#comments</comments><description>&lt;div class="share-buttons"&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;PADDING-RIGHT:15px;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;&lt;a class="twitter-share-button" href="http://twitter.com/share?url=http://blogs.microsoft.co.il/blogs/shair/archive/2011/11/28/my-lecture-at-munich-alm-days-2011.aspx"&gt;Tweet&lt;/a&gt;&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;PADDING-RIGHT:25px;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;
&lt;script type="IN/Share"&gt;&lt;/script&gt;
&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;&lt;iframe style="WIDTH:100px;HEIGHT:21px;" src="http://www.facebook.com/plugins/like.php?href=http://blogs.microsoft.co.il/blogs/shair/archive/2011/11/28/my-lecture-at-munich-alm-days-2011.aspx&amp;amp;send=false&amp;amp;layout=button_count&amp;amp;width=450&amp;amp;show_faces=false&amp;amp;action=like&amp;amp;colorscheme=light&amp;amp;font=segoe+ui&amp;amp;height=21&amp;amp;appId=184186808308137" scrolling="no" frameborder="0" style="border:none;overflow:hidden;width:450px;height:21px;"&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;
&lt;div class="g-plusone"&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;
&lt;p&gt;The conference was Amazing!!! &lt;/p&gt;  &lt;p&gt;I had great time in the conference with partners, customers and friends, I didn’t went to most of the lectures (Ich weiß nicht Deutsch spricht) but from the people who presented the presentation and the title there were plenty of interesting lectures.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.sela.co.il/alm/products_Scrat.html" target="_blank"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;float:left;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="ScratBig" border="0" alt="ScratBig" align="left" src="http://blogs.microsoft.co.il/blogs/shair/ScratBig_1E965C36.jpg" width="77" height="113" /&gt;&lt;/a&gt;In my lecture I’ve talked about &lt;u&gt;Applied Software Testing with Visual Studio 2010&lt;/u&gt;, I showed demos on Test Manager, Web Performance Test, Load Testing and of course Coded UI Testing. I’ve also talked about &lt;strong&gt;Migration from Quality Center to TFS 2010 &lt;/strong&gt;using &lt;strong&gt;Scrat&lt;/strong&gt; that includes everything from Requirements, Defects, Test Cases, Converge etc… So you don’t have to be afraid losing data when moving to TFS 2010. Sela has more migration solutions &lt;a href="http://www.sela.co.il/alm/products.html" target="_blank"&gt;Sela&lt;/a&gt; for customers who wants to start working with TFS 2010.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.sela.co.il/alm/products_WTM.html" target="_blank"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;float:left;border-top:0px;border-right:0px;padding-top:0px;" title="WTMBig" border="0" alt="WTMBig" align="left" src="http://blogs.microsoft.co.il/blogs/shair/WTMBig_504153BE.jpg" width="78" height="115" /&gt;&lt;/a&gt;And another product I talked about during my presentation was &lt;strong&gt;WTM&lt;/strong&gt; (Web Test Manager), if you want to manage and run your test cases from the Web without any local installation of Test Manager you may want to Try Sela WTM product - &lt;strong&gt;WTM&lt;/strong&gt; is a web application integrated in VS 2010 Team Web Access™.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.sela.co.il/alm/products_Wimbi.html" target="_blank"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;float:left;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="WimbiBig" border="0" alt="WimbiBig" align="left" src="http://blogs.microsoft.co.il/blogs/shair/WimbiBig_6DD32EBD.jpg" width="77" height="113" /&gt;&lt;/a&gt;Beside Test Products from Sela many people at the conference were very interested in &lt;strong&gt;WIMBI&lt;/strong&gt; – WIMBI allows better target your applications to customer needs through efficient customization. Wimbi creates new versions by integrating features instead of merging files. Wimbi enables merging entire Work Items without requiring to individually collecting all the Changesets related to these Work Items.&lt;/p&gt;  &lt;p&gt;Here is some pictures:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_0018_67E86557.jpg"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="IMG_0018" border="0" alt="IMG_0018" src="http://blogs.microsoft.co.il/blogs/shair/IMG_0018_thumb_1BECDEDE.jpg" width="244" height="184" /&gt;&lt;/a&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_0028_09083567.jpg"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="IMG_0028" border="0" alt="IMG_0028" src="http://blogs.microsoft.co.il/blogs/shair/IMG_0028_thumb_06CAEB04.jpg" width="244" height="184" /&gt;&lt;/a&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_0044_14D9B434.jpg"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="IMG_0044" border="0" alt="IMG_0044" src="http://blogs.microsoft.co.il/blogs/shair/IMG_0044_thumb_279E1211.jpg" width="244" height="184" /&gt;&lt;/a&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_0046_7DDA971D.jpg"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="IMG_0046" border="0" alt="IMG_0046" src="http://blogs.microsoft.co.il/blogs/shair/IMG_0046_thumb_01881621.jpg" width="244" height="184" /&gt;&lt;/a&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_0049_77074200.jpg"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="IMG_0049" border="0" alt="IMG_0049" src="http://blogs.microsoft.co.il/blogs/shair/IMG_0049_thumb_196BAAEF.jpg" width="244" height="184" /&gt;&lt;/a&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_0057_042D7F7A.jpg"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="IMG_0057" border="0" alt="IMG_0057" src="http://blogs.microsoft.co.il/blogs/shair/IMG_0057_thumb_1A8FF834.jpg" width="244" height="184" /&gt;&lt;/a&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_0058_48B9CE21.jpg"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="IMG_0058" border="0" alt="IMG_0058" src="http://blogs.microsoft.co.il/blogs/shair/IMG_0058_thumb_55375570.jpg" width="244" height="184" /&gt;&lt;/a&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_0082_04399148.jpg"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="IMG_0082" border="0" alt="IMG_0082" src="http://blogs.microsoft.co.il/blogs/shair/IMG_0082_thumb_3A4AE3CA.jpg" width="244" height="184" /&gt;&lt;/a&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/IMG_0020_173A725A.jpg"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="IMG_0020" border="0" alt="IMG_0020" src="http://blogs.microsoft.co.il/blogs/shair/IMG_0020_thumb_7626B418.jpg" width="244" height="184" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;So, Thanks everyone who came to my lecture, it was fun and exciting for me presenting at Munich ALM Days 2011, I hope I’ll see you all at the next conference.&lt;/p&gt;  &lt;p&gt;Vielen Dank!&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=943104" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS/default.aspx">TFS</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS+Administration/default.aspx">TFS Administration</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS+Utilities/default.aspx">TFS Utilities</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Development/default.aspx">Development</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Work+Items/default.aspx">Work Items</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Testing/default.aspx">Testing</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Events/default.aspx">Events</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TECH/default.aspx">TECH</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/OFFTOPIC/default.aspx">OFFTOPIC</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/WebTest/default.aspx">WebTest</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS+API/default.aspx">TFS API</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Visual+Studio+2010/default.aspx">Visual Studio 2010</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Team+System+2010/default.aspx">Team System 2010</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS+2010/default.aspx">TFS 2010</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Sela+Group/default.aspx">Sela Group</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET+4/default.aspx">.NET 4</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Scrat/default.aspx">Scrat</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/ALM/default.aspx">ALM</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/WIMBI/default.aspx">WIMBI</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/WTM/default.aspx">WTM</category></item><item><title>Add reCAPTCHA To ASP.NET MVC Web Application</title><link>http://blogs.microsoft.co.il/blogs/shair/archive/2011/11/14/add-recaptcha-to-asp-net-mvc-web-application.aspx</link><pubDate>Tue, 15 Nov 2011 04:36:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:932516</guid><dc:creator>shair</dc:creator><slash:comments>5</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/shair/rsscomments.aspx?PostID=932516</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2011/11/14/add-recaptcha-to-asp-net-mvc-web-application.aspx#comments</comments><description>&lt;div class="share-buttons"&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;PADDING-RIGHT:15px;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;&lt;a class="twitter-share-button" href="http://twitter.com/share?url=http://blogs.microsoft.co.il/blogs/shair/archive/2011/11/14/add-recaptcha-to-asp-net-mvc-web-application.aspx"&gt;Tweet&lt;/a&gt;&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;PADDING-RIGHT:25px;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;
&lt;script type="IN/Share"&gt;&lt;/script&gt;
&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;&lt;iframe style="WIDTH:100px;HEIGHT:21px;" src="http://www.facebook.com/plugins/like.php?href=http://blogs.microsoft.co.il/blogs/shair/archive/2011/11/14/add-recaptcha-to-asp-net-mvc-web-application.aspx&amp;amp;send=false&amp;amp;layout=button_count&amp;amp;width=450&amp;amp;show_faces=false&amp;amp;action=like&amp;amp;colorscheme=light&amp;amp;font=segoe+ui&amp;amp;height=21&amp;amp;appId=184186808308137" scrolling="no" frameborder="0" style="border:none;overflow:hidden;width:450px;height:21px;"&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;
&lt;div class="g-plusone"&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/smallCaptchaSpaceWithRoughAlpha_70E2C7D3.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;float:right;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="smallCaptchaSpaceWithRoughAlpha" border="0" alt="smallCaptchaSpaceWithRoughAlpha" align="right" src="http://blogs.microsoft.co.il/blogs/shair/smallCaptchaSpaceWithRoughAlpha_thumb_47F7B2CA.png" width="240" height="149" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Captcha is a type of challenge-response test used in computing as an attempt to ensure that the response is generated by a person.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;When building public web sites captcha is very important to avoid script and bots running on your web site.&lt;/p&gt;  &lt;p&gt;First go to reCAPTCHA site and register for unique Key, then &lt;a href="http://code.google.com/p/recaptcha/downloads/list?q=label:aspnetlib-Latest" target="_blank"&gt;Download reCAPTCHA .NET Library&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;Save you Public and Private keys safely.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_7AE74331.png"&gt;&lt;img style="background-image:none;border-bottom:0px;border-left:0px;padding-left:0px;padding-right:0px;display:inline;border-top:0px;border-right:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_6A8BCB78.png" width="456" height="349" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Now, Let’s start new ASP.NET MVC 3 Web Application Project in Visual Studio 2010&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/932515/download.aspx" target="_blank"&gt;Download Demo Project&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_0092370B.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_44F2284A.png" width="677" height="366" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Choose to create from “Internet Application” template&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_0F2CBD23.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_377BEF77.png" width="675" height="608" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Add the Recaptcha dll as reference to your project.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_014A515B.png"&gt;&lt;img style="background-image:none;border-right-width:0px;margin:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_4A8CF656.png" width="182" height="133" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Modify site Web.config with new keys under the appSettings section and add the keys we received before.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;ReCaptchaPrivateKey &lt;/li&gt;    &lt;li&gt;ReCaptchaPublicKey &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_681ED155.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_31ED3339.png" width="675" height="449" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Open the Controllers folder, open the AccountController file and locate the Register method, add new attribute:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;font style="font-size:12pt;"&gt;[&lt;span&gt;&lt;font color="#2b91af"&gt;RecaptchaControlMvc&lt;/font&gt;&lt;/span&gt;.&lt;span&gt;&lt;font color="#2b91af"&gt;CaptchaValidatorAttribute&lt;/font&gt;&lt;/span&gt;]&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_32B57356.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_57D2BDC2.png" width="758" height="139" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And add the reCAPTCHA logic to your Registration Code&lt;/p&gt;

&lt;pre class="code"&gt;&lt;font style="font-size:12pt;"&gt;[&lt;span&gt;&lt;font color="#2b91af"&gt;HttpPost&lt;/font&gt;&lt;/span&gt;]&lt;br /&gt;[&lt;span&gt;&lt;font color="#2b91af"&gt;RecaptchaControlMvc&lt;/font&gt;&lt;/span&gt;.&lt;span&gt;&lt;font color="#2b91af"&gt;CaptchaValidatorAttribute&lt;/font&gt;&lt;/span&gt;]&lt;br /&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;ActionResult&lt;/font&gt;&lt;/span&gt; Register(&lt;span&gt;&lt;font color="#2b91af"&gt;RegisterModel&lt;/font&gt;&lt;/span&gt; model, &lt;span&gt;&lt;font color="#0000ff"&gt;bool&lt;/font&gt;&lt;/span&gt; captchaValid)&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (!captchaValid)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ModelState.AddModelError(&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;&amp;quot;&lt;/font&gt;&lt;/span&gt;, &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;You did not type the verification &lt;br /&gt;                                    word correctly. Please try again.&amp;quot;&lt;/font&gt;&lt;/span&gt;);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;else&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&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&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (ModelState.IsValid)&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;span&gt;&lt;font color="#008000"&gt;// Attempt to register the user&lt;/font&gt;&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&gt;&lt;font color="#2b91af"&gt;MembershipCreateStatus&lt;/font&gt;&lt;/span&gt; createStatus;&lt;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&gt;&lt;font color="#2b91af"&gt;Membership&lt;/font&gt;&lt;/span&gt;.CreateUser(model.UserName, model.Password, &lt;br /&gt;                                  model.Email, &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;, &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;, &lt;span&gt;&lt;font color="#0000ff"&gt;true&lt;/font&gt;&lt;/span&gt;, &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt;, &lt;br /&gt;                                  &lt;span&gt;&lt;font color="#0000ff"&gt;out&lt;/font&gt;&lt;/span&gt; createStatus);&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&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (createStatus == &lt;span&gt;&lt;font color="#2b91af"&gt;MembershipCreateStatus&lt;/font&gt;&lt;/span&gt;.Success)&lt;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;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#2b91af"&gt;FormsAuthentication&lt;/font&gt;&lt;/span&gt;.SetAuthCookie(model.UserName, &lt;span&gt;&lt;font color="#0000ff"&gt;false&lt;/font&gt;&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&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt; RedirectToAction(&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#ff0000"&gt;Index&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;&lt;/font&gt;&lt;/span&gt;, &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;Home&amp;quot;&lt;/font&gt;&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; &lt;span&gt;&lt;font color="#0000ff"&gt;else&lt;/font&gt;&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;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ModelState.AddModelError(&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;&amp;quot;&lt;/font&gt;&lt;/span&gt;,&lt;br /&gt;                               ErrorCodeToString(createStatus));&lt;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;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#008000"&gt;// If we got this far, something failed, redisplay form&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt; View(model);&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;Now placed the following command in the Register.cshtml file: &lt;/p&gt;

&lt;pre class="code"&gt;&lt;span style="background-image:none;background-attachment:scroll;background-repeat:repeat;background-position:0% 0%;"&gt;&lt;font style="background-color:#ffff00;"&gt;&lt;font style="font-size:12pt;"&gt;@&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt;Html.Raw(Html.GenerateCaptcha())&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;

&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_3C4DBBBF.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_3EA73DBD.png" width="755" height="364" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Run your web site and enter the registration page, now you have to enter captcha before compiling the registration.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_3AD97320.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_6A676BDF.png" width="756" height="653" /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/files/folders/932515/download.aspx" target="_blank"&gt;Download Demo Project&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=932516" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Development/default.aspx">Development</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TECH/default.aspx">TECH</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Visual+Studio+2010/default.aspx">Visual Studio 2010</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET+4/default.aspx">.NET 4</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/MVC/default.aspx">MVC</category></item><item><title>TFS API Part 40–Build Service Host</title><link>http://blogs.microsoft.co.il/blogs/shair/archive/2011/11/14/tfs-api-part-40-build-service-host.aspx</link><pubDate>Mon, 14 Nov 2011 19:15:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:932205</guid><dc:creator>shair</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/shair/rsscomments.aspx?PostID=932205</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2011/11/14/tfs-api-part-40-build-service-host.aspx#comments</comments><description>&lt;div class="share-buttons"&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;PADDING-RIGHT:15px;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;&lt;a class="twitter-share-button" href="http://twitter.com/share?url=http://blogs.microsoft.co.il/blogs/shair/archive/2011/11/14/tfs-api-part-40-build-service-host.aspx"&gt;Tweet&lt;/a&gt;&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;PADDING-RIGHT:25px;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;
&lt;script type="IN/Share"&gt;&lt;/script&gt;
&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;&lt;iframe style="WIDTH:100px;HEIGHT:21px;" src="http://www.facebook.com/plugins/like.php?href=http://blogs.microsoft.co.il/blogs/shair/archive/2011/11/14/tfs-api-part-40-build-service-host.aspx&amp;amp;send=false&amp;amp;layout=button_count&amp;amp;width=450&amp;amp;show_faces=false&amp;amp;action=like&amp;amp;colorscheme=light&amp;amp;font=segoe+ui&amp;amp;height=21&amp;amp;appId=184186808308137" scrolling="no" frameborder="0" style="border:none;overflow:hidden;width:450px;height:21px;"&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;
&lt;div class="g-plusone"&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;
&lt;p&gt;First, what is the Build Service Host or &lt;a href="http://msdn.microsoft.com/es-es/library/microsoft.teamfoundation.build.client.ibuildservicehost.aspx" target="_blank"&gt;IBuildServiceHost&lt;/a&gt;?&lt;/p&gt;  &lt;p&gt;The BuildServiceHost object represent the physical location of the Controller and/or Agent objects. The name property is usually the machine name that the Controller or Agent lives on. In earlier versions, this was simply the Machine Name property on the Agent.&lt;/p&gt;  &lt;p&gt;Now, I’m working with a customer works with Lab Manager and after upgrading the SCVVM and perform some port changes we faced an issue – The Build Service Host stuck in your server with no way to remove it. (there is no UI for Build Hosts)&lt;/p&gt;  &lt;p&gt;Now when trying to register the Lab environments we received an error the Host with the same name already exists, so I’ve built a small tool to help me managing the Build Service Hosts.&lt;/p&gt; &lt;a class="CommonImageTextButton CommonDownloadButton" href="http://blogs.microsoft.co.il/files/folders/932196/download.aspx"&gt;Download&lt;/a&gt;   &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/1_5E0CD98F.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="1" border="0" alt="1" src="http://blogs.microsoft.co.il/blogs/shair/1_thumb_7F3CCF6B.png" width="459" height="491" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;Step 1: Connect To TFS and Obtain IBuildServer&lt;/h3&gt;  &lt;p&gt;As any TFS API article we first need to connect TFS and from the TFS Object Model to obtain the IBuildServer object.&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;private&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; BtnConnectClick(&lt;span&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt; sender, &lt;span&gt;&lt;font color="#2b91af"&gt;RoutedEventArgs&lt;/font&gt;&lt;/span&gt; e)&lt;br /&gt;{&lt;br /&gt;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; tpp = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;TeamProjectPicker&lt;/font&gt;&lt;/span&gt;(&lt;span&gt;&lt;font color="#2b91af"&gt;TeamProjectPickerMode&lt;/font&gt;&lt;/span&gt;.NoProject, &lt;span&gt;&lt;font color="#0000ff"&gt;false&lt;/font&gt;&lt;/span&gt;);&lt;br /&gt;&amp;#160; tpp.ShowDialog();&lt;br /&gt; &lt;br /&gt;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (tpp.SelectedTeamProjectCollection != &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt; &amp;amp;&amp;amp; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; (tpp.SelectedTeamProjectCollection == &lt;span&gt;&lt;font color="#0000ff"&gt;null&lt;/font&gt;&lt;/span&gt; &amp;amp;&amp;amp; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; !tpp.SelectedTeamProjectCollection.HasAuthenticated)) &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt; &lt;br /&gt;&amp;#160; _tfs = tpp.SelectedTeamProjectCollection;&lt;br /&gt;&amp;#160; _buildSrv = _tfs.GetService&amp;lt;&lt;span&gt;&lt;font color="#2b91af"&gt;IBuildServer&lt;/font&gt;&lt;/span&gt;&amp;gt;();&lt;br /&gt; &lt;br /&gt;&amp;#160; ShowList();&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;Showing the current Hosts in the TFS:&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;private&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; ShowList()&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; buildList.ItemsSource = _buildSrv.QueryBuildServiceHosts(&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;*&amp;quot;&lt;/font&gt;&lt;/span&gt;);&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;The IBuildServer is running Team Foundation Build and has control on everything related to Builds.&lt;/p&gt;

&lt;h3&gt;Step 2: Delete, Create and Rename&lt;/h3&gt;

&lt;p&gt;After we obtain all Build Service Hosts we will use the IBuildServer to Create, Delete and Rename the hosts on our TFS.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;private&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; DeleteHost(&lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt; hostName)&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#2b91af"&gt;IBuildServer&lt;/font&gt;&lt;/span&gt; buildServer = _tfs.GetService&amp;lt;&lt;span&gt;&lt;font color="#2b91af"&gt;IBuildServer&lt;/font&gt;&lt;/span&gt;&amp;gt;();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#2b91af"&gt;IBuildServiceHost&lt;/font&gt;&lt;/span&gt; bsh = buildServer.GetBuildServiceHost(hostName);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; bsh.Delete();&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; Create(&lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt; hostName)&lt;br /&gt;{&lt;br /&gt;&amp;#160; &lt;span&gt;&lt;font color="#2b91af"&gt;IBuildServer&lt;/font&gt;&lt;/span&gt; buildServer = _tfs.GetService&amp;lt;&lt;span&gt;&lt;font color="#2b91af"&gt;IBuildServer&lt;/font&gt;&lt;/span&gt;&amp;gt;();&lt;br /&gt;&amp;#160; &lt;span&gt;&lt;font color="#2b91af"&gt;IBuildServiceHost&lt;/font&gt;&lt;/span&gt; hostsrv = buildServer.CreateBuildServiceHost(hostName,&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;http&amp;quot;&lt;/font&gt;&lt;/span&gt;, hostName, 8181);&lt;br /&gt;&amp;#160; hostsrv.Save();&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; Rename(&lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt; currentHostName, &lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt; newHostName)&lt;br /&gt;{&lt;br /&gt;&amp;#160; &lt;span&gt;&lt;font color="#2b91af"&gt;IBuildServer&lt;/font&gt;&lt;/span&gt; buildServer = _tfs.GetService&amp;lt;&lt;span&gt;&lt;font color="#2b91af"&gt;IBuildServer&lt;/font&gt;&lt;/span&gt;&amp;gt;();&lt;br /&gt;&amp;#160; &lt;span&gt;&lt;font color="#2b91af"&gt;IBuildServiceHost&lt;/font&gt;&lt;/span&gt; hostsrv = buildServer.GetBuildServiceHost&lt;br /&gt; (currentHostName);&lt;br /&gt;&amp;#160; hostsrv.Name = newHostName;&lt;br /&gt;&amp;#160; &lt;span&gt;&lt;font color="#2b91af"&gt;UriBuilder&lt;/font&gt;&lt;/span&gt; uriBuilder = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;UriBuilder&lt;/font&gt;&lt;/span&gt;(hostsrv.BaseUrl);&lt;br /&gt;&amp;#160; uriBuilder.Host = newHostName;&lt;br /&gt;&amp;#160; hostsrv.BaseUrl = uriBuilder.Uri;&lt;br /&gt;&amp;#160; hostsrv.Save();&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;
&lt;a class="CommonImageTextButton CommonDownloadButton" href="http://blogs.microsoft.co.il/files/folders/932196/download.aspx"&gt;Download&lt;/a&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=932205" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Team+Build/default.aspx">Team Build</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS/default.aspx">TFS</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS+Administration/default.aspx">TFS Administration</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS+Utilities/default.aspx">TFS Utilities</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Development/default.aspx">Development</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TECH/default.aspx">TECH</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS+API/default.aspx">TFS API</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Visual+Studio+2010/default.aspx">Visual Studio 2010</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS+2010/default.aspx">TFS 2010</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET+4/default.aspx">.NET 4</category></item><item><title>SharePoint API – Download \ Upload Documents (Tool)</title><link>http://blogs.microsoft.co.il/blogs/shair/archive/2011/10/27/sharepoint-api-download-upload-documents-tool.aspx</link><pubDate>Thu, 27 Oct 2011 13:03:00 GMT</pubDate><guid isPermaLink="false">b5c4f5bc-c09b-4439-a595-91a98c1847df:921005</guid><dc:creator>shair</dc:creator><slash:comments>3</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://blogs.microsoft.co.il/blogs/shair/rsscomments.aspx?PostID=921005</wfw:commentRss><comments>http://blogs.microsoft.co.il/blogs/shair/archive/2011/10/27/sharepoint-api-download-upload-documents-tool.aspx#comments</comments><description>&lt;div class="share-buttons"&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;PADDING-RIGHT:15px;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;&lt;a class="twitter-share-button" href="http://twitter.com/share?url=http://blogs.microsoft.co.il/blogs/shair/archive/2011/10/27/sharepoint-api-download-upload-documents-tool.aspx"&gt;Tweet&lt;/a&gt;&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;PADDING-RIGHT:25px;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;
&lt;script type="IN/Share"&gt;&lt;/script&gt;
&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;&lt;iframe style="WIDTH:100px;HEIGHT:21px;" src="http://www.facebook.com/plugins/like.php?href=http://blogs.microsoft.co.il/blogs/shair/archive/2011/10/27/sharepoint-api-download-upload-documents-tool.aspx&amp;amp;send=false&amp;amp;layout=button_count&amp;amp;width=450&amp;amp;show_faces=false&amp;amp;action=like&amp;amp;colorscheme=light&amp;amp;font=segoe+ui&amp;amp;height=21&amp;amp;appId=184186808308137" scrolling="no" frameborder="0" style="border:none;overflow:hidden;width:450px;height:21px;"&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;div style="TEXT-ALIGN:left;LINE-HEIGHT:1em;FONT-FAMILY:Arial, Helvetica, sans-serif;FLOAT:left;FONT-SIZE:14px;"&gt;
&lt;div class="g-plusone"&gt;&lt;/div&gt;&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;
&lt;p&gt;A long time ago I wrote about &lt;a href="http://blogs.microsoft.co.il/blogs/shair/archive/2011/02/25/sharepoint-2007-files-restore-tool.aspx" target="_blank"&gt;SharePoint 2007 Files Restore Tool&lt;/a&gt;, tool that allows you to connect to SharePoint content database (not need to have SharePoint installation) and extract documents.&lt;/p&gt;  &lt;p&gt;The reason I wrote this tool was a customer that upgrade TFS and perform a new installation of SharePoint so he lost all his documents, this tool helped me to extract all documents and added them to the new SharePoint site.&lt;/p&gt;  &lt;p&gt;SharePoint upgrade/migration can be unpleasant and sometimes I prefer to do a clean installation when upgrading or moving TFS and then just import the documents (without history).    &lt;br /&gt;Some customers wants to keep the history, so you can do small changes to download all file versions and then upload each version.&lt;/p&gt;  &lt;p&gt;The big questions is how to extract all SharePoint documents from existing Site?&lt;/p&gt;  &lt;p&gt;So, I’ve built another tool to help me do that, the below tool will connect to SharePoint using API and download all documents includes Folder structure to my computer.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_0F4C5A82.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_141EE871.png" width="743" height="475" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Because I’m using SharePoint API you can write any Url of the SharePoint site, I’ll show the all documents folders includes files under each folder, and then you can click the download button to download all files or specific files to your machine.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://blogs.microsoft.co.il/blogs/shair/image_7D1FCB5A.png"&gt;&lt;img style="background-image:none;border-right-width:0px;padding-left:0px;padding-right:0px;display:inline;border-top-width:0px;border-bottom-width:0px;border-left-width:0px;padding-top:0px;" title="image" border="0" alt="image" src="http://blogs.microsoft.co.il/blogs/shair/image_thumb_03A3251E.png" width="734" height="345" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;h3&gt;How To Connect SharePoint Site:&lt;/h3&gt;  &lt;p&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;* SharePoint API will only work on Machine with SharePoint installed *&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;public&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;SPWeb&lt;/font&gt;&lt;/span&gt; _sp;&lt;br /&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; Connect()&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;try&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&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&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;/span&gt; (&lt;span&gt;&lt;font color="#2b91af"&gt;SPSite&lt;/font&gt;&lt;/span&gt; site = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;SPSite&lt;/font&gt;&lt;/span&gt;(txtSPUrl.&lt;span&gt;&lt;font color="#000000"&gt;Text&lt;/font&gt;&lt;/span&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;&amp;#160;&amp;#160;&amp;#160;&amp;#160; TreeFolders.&lt;span&gt;&lt;font color="#000000"&gt;Items&lt;/font&gt;&lt;/span&gt;.Clear();&lt;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&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; webTree = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;TreeViewItem&lt;/font&gt;&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; webTree.Header = _sp.Title;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; webTree.Tag = _sp;&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; MapFolders(_sp.Folders, webTree);&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&gt;&lt;font color="#0000ff"&gt;catch&lt;/font&gt;&lt;/span&gt; (&lt;span&gt;&lt;font color="#2b91af"&gt;Exception&lt;/font&gt;&lt;/span&gt; ex)&lt;br /&gt;&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&gt;&lt;font color="#0000ff"&gt;throw&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;ArgumentException&lt;/font&gt;&lt;/span&gt;(&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;Connect&amp;quot;&lt;/font&gt;&lt;/span&gt;, ex);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;

&lt;h3&gt;Building Folder Structure&lt;/h3&gt;

&lt;p&gt;I’ve created a recursive method to get the total number of files under a specific folder include all sub folders.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;private&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;/span&gt; GetFilesCount(&lt;span&gt;&lt;font color="#2b91af"&gt;SPFolder&lt;/font&gt;&lt;/span&gt; folder, &lt;span&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;/span&gt; count)&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; count += folder.Files.Count;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt; folder.SubFolders.Aggregate(count, (current, subfolder) =&amp;gt; &lt;br /&gt;           GetFilesCount(subfolder, current));&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; MapFolders(&lt;span&gt;&lt;font color="#2b91af"&gt;SPFolderCollection&lt;/font&gt;&lt;/span&gt; folderList,&lt;br /&gt;                                             &lt;span&gt;&lt;font color="#2b91af"&gt;TreeViewItem&lt;/font&gt;&lt;/span&gt; treeNode)&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;for&lt;/font&gt;&lt;/span&gt; (&lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; i = 0; i &amp;lt; folderList.Count; i++)&lt;br /&gt;&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&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; item = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;TreeViewItem&lt;/font&gt;&lt;/span&gt;();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; item.Header = &lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt;.Format(&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#3cb371"&gt;{0}&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt; (&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#3cb371"&gt;{1}&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt;)&amp;quot;&lt;/font&gt;&lt;/span&gt;, folderList[i].Name,&lt;br /&gt;                                     GetFilesCount(folderList[i], 0));&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; item.Tag = folderList[i];&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; treeNode.Items.Add(item);&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (folderList[i].SubFolders.Count &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; MapFolders(folderList[i].SubFolders, item);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;

&lt;h3&gt;Download Files From SharePoint Folder&lt;/h3&gt;

&lt;p&gt;The &lt;u&gt;CreateDirectoryStructure&lt;/u&gt; will build the local folder structure based on the file path in SharePoint, this is important because once we want to upload those files to a new SharePoint site we need those folder names in order to create them in the new SharePoint site.&lt;/p&gt;

&lt;p&gt;Each SPFolder object contains a &lt;span&gt;&lt;font color="#2b91af"&gt;SPFileCollection&lt;/font&gt;&lt;/span&gt; with all files under that folder – Not include SubFolder files.&lt;/p&gt;

&lt;p&gt;DownloadFile – will run over all files, get each file binary data and save the stream to a local file.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;private&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; DownloadFile(&lt;span&gt;&lt;font color="#2b91af"&gt;SPFileCollection&lt;/font&gt;&lt;/span&gt; files)&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;foreach&lt;/font&gt;&lt;/span&gt; (&lt;span&gt;&lt;font color="#2b91af"&gt;SPFile&lt;/font&gt;&lt;/span&gt; file &lt;span&gt;&lt;font color="#0000ff"&gt;in&lt;/font&gt;&lt;/span&gt; files)&lt;br /&gt;&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&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (CreateDirectoryStructure(txtLocalPath.Text, file.&lt;span&gt;&lt;font color="#ff0000"&gt;Url&lt;/font&gt;&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; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; filepath = System.IO.&lt;span&gt;&lt;font color="#2b91af"&gt;Path&lt;/font&gt;&lt;/span&gt;.Combine(txtLocalPath.Text,&lt;br /&gt;                                                 file.&lt;span&gt;&lt;font color="#ff0000"&gt;Url&lt;/font&gt;&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; &lt;span&gt;&lt;font color="#0000ff"&gt;byte&lt;/font&gt;&lt;/span&gt;[] binFile = file.&lt;span&gt;&lt;font color="#ff0000"&gt;OpenBinary&lt;/font&gt;&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; System.IO.&lt;span&gt;&lt;font color="#2b91af"&gt;FileStream&lt;/font&gt;&lt;/span&gt; fstream = System.IO.&lt;span&gt;&lt;font color="#2b91af"&gt;File&lt;/font&gt;&lt;/span&gt;.Create(filepath);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; fstream.Write(binFile, 0, binFile.Length);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; fstream.Close();&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&gt;&lt;font color="#0000ff"&gt;else&lt;/font&gt;&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; &lt;span&gt;&lt;font color="#0000ff"&gt;throw&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;ArgumentException&lt;/font&gt;&lt;/span&gt;(&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;Cannot Create Folders Structure&amp;quot;&lt;/font&gt;&lt;/span&gt;);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;private&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;bool&lt;/font&gt;&lt;/span&gt; CreateDirectoryStructure(&lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt; baseFolder, &lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt; filepath)&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (!&lt;span&gt;&lt;font color="#2b91af"&gt;Directory&lt;/font&gt;&lt;/span&gt;.Exists(baseFolder)) &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;false&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; paths = filepath.Split(&lt;span&gt;&lt;font color="#a31515"&gt;&amp;#39;/&amp;#39;&lt;/font&gt;&lt;/span&gt;);&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;for&lt;/font&gt;&lt;/span&gt; (&lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; i = 0; i &amp;lt; paths.Length - 1; i++)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; baseFolder = System.IO.&lt;span&gt;&lt;font color="#2b91af"&gt;Path&lt;/font&gt;&lt;/span&gt;.Combine(baseFolder, paths[i]);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#2b91af"&gt;Directory&lt;/font&gt;&lt;/span&gt;.CreateDirectory(baseFolder);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;true&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;

&lt;h3&gt;Upload File To SharePoint Site&lt;/h3&gt;

&lt;p&gt;Once you got all files from the Old SharePoint site you can enter the new SharePoint site url and click the Upload button.&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;private&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; btnUpload_Click(&lt;span&gt;&lt;font color="#0000ff"&gt;object&lt;/font&gt;&lt;/span&gt; sender, &lt;span&gt;&lt;font color="#2b91af"&gt;RoutedEventArgs&lt;/font&gt;&lt;/span&gt; e)&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;using&lt;/font&gt;&lt;/span&gt; (&lt;span&gt;&lt;font color="#2b91af"&gt;SPSite&lt;/font&gt;&lt;/span&gt; site = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;SPSite&lt;/font&gt;&lt;/span&gt;(txtTargetSP.Text))&lt;br /&gt;&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&gt;&lt;font color="#2b91af"&gt;SPWeb&lt;/font&gt;&lt;/span&gt; targetSP = site.OpenWeb();&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;foreach&lt;/font&gt;&lt;/span&gt; (&lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; file &lt;span&gt;&lt;font color="#0000ff"&gt;in&lt;/font&gt;&lt;/span&gt; listLocalFolders.Items.Cast&amp;lt;&lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt;&amp;gt;().Select&lt;br /&gt;                (folder =&amp;gt; &lt;span&gt;&lt;font color="#2b91af"&gt;Directory&lt;/font&gt;&lt;/span&gt;.GetFiles(folder, &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;*.*&amp;quot;&lt;/font&gt;&lt;/span&gt;, &lt;br /&gt;                 &lt;span&gt;&lt;font color="#2b91af"&gt;SearchOption&lt;/font&gt;&lt;/span&gt;.AllDirectories)).SelectMany(files =&amp;gt; files))&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; UploadFile(file, file.Replace(txtLocalPath.Text, &lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt;.Empty)&lt;br /&gt;                       , targetSP);&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;/pre&gt;

&lt;p&gt;Removing the local path from the full file path will result with the destination file to the new SharePoint site.&lt;/p&gt;

&lt;p&gt;The propose of &lt;u&gt;EnsureParentFolder&lt;/u&gt; is to ensure the destination folder in the new SharePoint site exists, and if not create the folder in the new site.&lt;/p&gt;

&lt;p&gt;&lt;u&gt;UploadFile&lt;/u&gt; will stream out the file content and using &lt;span&gt;&lt;font color="#2b91af"&gt;SPWeb.&lt;font color="#000000"&gt;Files.Add method include the destination path will add a new file to the SharePoint site.&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;

&lt;pre class="code"&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;&lt;font style="font-size:12pt;"&gt;public&lt;/font&gt;&lt;/font&gt;&lt;/span&gt;&lt;font style="font-size:12pt;"&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt; EnsureParentFolder(&lt;span&gt;&lt;font color="#2b91af"&gt;SPWeb&lt;/font&gt;&lt;/span&gt; parentSite, &lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt; destinUrl)&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; destinUrl = parentSite.GetFile(destinUrl).&lt;span&gt;&lt;font color="#ff0000"&gt;Url&lt;/font&gt;&lt;/span&gt;;&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; index = destinUrl.LastIndexOf(&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;/&amp;quot;&lt;/font&gt;&lt;/span&gt;);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; parentFolderUrl = &lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt;.Empty;&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (index &amp;gt; -1)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; parentFolderUrl = destinUrl.Substring(0, index);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#2b91af"&gt;SPFolder&lt;/font&gt;&lt;/span&gt; parentFolder&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; = parentSite.GetFolder(parentFolderUrl);&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (!parentFolder.Exists)&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;span&gt;&lt;font color="#2b91af"&gt;SPFolder&lt;/font&gt;&lt;/span&gt; currentFolder = parentFolderUrl.Split(&lt;span&gt;&lt;font color="#a31515"&gt;&amp;#39;/&amp;#39;&lt;/font&gt;&lt;/span&gt;).&lt;br /&gt;            Aggregate&amp;lt;&lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt;, &lt;span&gt;&lt;font color="#2b91af"&gt;SPFolder&lt;/font&gt;&lt;/span&gt;&amp;gt;(parentSite.RootFolder, &lt;br /&gt;           (current, folder) =&amp;gt; current.SubFolders.&lt;span&gt;&lt;font color="#000000"&gt;Add&lt;/font&gt;&lt;/span&gt;(folder));&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&gt;&lt;font color="#0000ff"&gt;return&lt;/font&gt;&lt;/span&gt; parentFolderUrl;&lt;br /&gt;}&lt;br /&gt; &lt;br /&gt;&lt;span&gt;&lt;font color="#0000ff"&gt;public&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;void&lt;/font&gt;&lt;/span&gt; UploadFile(&lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt; srcUrl, &lt;span&gt;&lt;font color="#0000ff"&gt;string&lt;/font&gt;&lt;/span&gt; destUrl, &lt;span&gt;&lt;font color="#2b91af"&gt;SPWeb&lt;/font&gt;&lt;/span&gt; site)&lt;br /&gt;{&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (!&lt;span&gt;&lt;font color="#2b91af"&gt;File&lt;/font&gt;&lt;/span&gt;.Exists(srcUrl))&lt;br /&gt;&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&gt;&lt;font color="#0000ff"&gt;throw&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#2b91af"&gt;ArgumentException&lt;/font&gt;&lt;/span&gt;(&lt;span&gt;&lt;font color="#2b91af"&gt;String&lt;/font&gt;&lt;/span&gt;.Format(&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#3cb371"&gt;{0}&lt;/font&gt;&lt;/span&gt;&lt;span&gt;&lt;font color="#a31515"&gt; does not exist&amp;quot;&lt;/font&gt;&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; srcUrl), &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;srcUrl&amp;quot;&lt;/font&gt;&lt;/span&gt;);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; fStream = &lt;span&gt;&lt;font color="#2b91af"&gt;File&lt;/font&gt;&lt;/span&gt;.OpenRead(srcUrl);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;var&lt;/font&gt;&lt;/span&gt; contents = &lt;span&gt;&lt;font color="#0000ff"&gt;new&lt;/font&gt;&lt;/span&gt;&amp;#160;&lt;span&gt;&lt;font color="#0000ff"&gt;byte&lt;/font&gt;&lt;/span&gt;[fStream.Length];&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; fStream.Read(contents, 0, (&lt;span&gt;&lt;font color="#0000ff"&gt;int&lt;/font&gt;&lt;/span&gt;)fStream.Length);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; fStream.Close();&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;if&lt;/font&gt;&lt;/span&gt; (destUrl.StartsWith(&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;\\&amp;quot;&lt;/font&gt;&lt;/span&gt;))&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; destUrl = destUrl.Substring(1);&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; destUrl = destUrl.Replace(&lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;\\&amp;quot;&lt;/font&gt;&lt;/span&gt;, &lt;span&gt;&lt;font color="#a31515"&gt;&amp;quot;/&amp;quot;&lt;/font&gt;&lt;/span&gt;);&lt;br /&gt; &lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; EnsureParentFolder(site, destUrl);&lt;br /&gt; &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;try&lt;/font&gt;&lt;/span&gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; site.Files.&lt;span&gt;&lt;font color="#000000"&gt;Add&lt;/font&gt;&lt;/span&gt;(destUrl, contents, &lt;span&gt;&lt;font color="#0000ff"&gt;true&lt;/font&gt;&lt;/span&gt;);&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;span&gt;&lt;font color="#0000ff"&gt;catch&lt;/font&gt;&lt;/span&gt; (&lt;span&gt;&lt;font color="#2b91af"&gt;Exception&lt;/font&gt;&lt;/span&gt; ex)&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; {&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; }&lt;br /&gt;}&lt;/font&gt;&lt;/pre&gt;

&lt;p&gt;Enjoy&lt;/p&gt;&lt;img src="http://blogs.microsoft.co.il/aggbug.aspx?PostID=921005" width="1" height="1"&gt;</description><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET/default.aspx">.NET</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS/default.aspx">TFS</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS+Utilities/default.aspx">TFS Utilities</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Development/default.aspx">Development</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/IIS/default.aspx">IIS</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/SQL/default.aspx">SQL</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/DEV/default.aspx">DEV</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/ITPRO/default.aspx">ITPRO</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Share+Point/default.aspx">Share Point</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/SQL+2008/default.aspx">SQL 2008</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Visual+Studio+2010/default.aspx">Visual Studio 2010</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/TFS+2010/default.aspx">TFS 2010</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/.NET+4/default.aspx">.NET 4</category><category domain="http://blogs.microsoft.co.il/blogs/shair/archive/tags/Tools/default.aspx">Tools</category></item></channel></rss>