<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
  version="2.0">
  <channel>
    <title>Patrick Payet</title>
    <atom:link
      href="https://docs.microsoft.com/archive/blogs/patrick_payet/feed.xml"
      rel="self"
      type="application/rss+xml" />
    <link>https://docs.microsoft.com/archive/blogs/patrick_payet/feed.xml</link>
    <description />
    <lastBuildDate>Wed, 17 Apr 2019 04:03:25 GMT</lastBuildDate>
    <language>en-US</language>
    <sy:updatePeriod>hourly</sy:updatePeriod>
    <sy:updateFrequency>1</sy:updateFrequency>
    <item>
      <title>Developpement Windows Phone - partie 27</title>
      <link>https://docs.microsoft.com/archive/blogs/patrick_payet/developpement-windows-phone-partie-27</link>
      <pubDate>Tue, 06 Sep 2011 13:27:00 GMT</pubDate>
      <dc:creator><![CDATA[papayet]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/patrick_payet/2011/09/06/developpement-windows-phone-partie-27/</guid>
      <description><![CDATA[D&eacute;velopper avec l&rsquo;appareil photo de Windows Phone
Cet article fait partie d&rsquo;une...]]></description>
      <content:encoded><![CDATA[<h1>D&eacute;velopper avec l&rsquo;appareil photo de Windows Phone</h1>
<p>Cet article fait partie d&rsquo;une s&eacute;rie d&rsquo;articles sur le d&eacute;veloppement Windows Phone. Il s&rsquo;agit d&rsquo;une traduction des articles se trouvant <a href="http://create.msdn.com/en-us/education/quickstarts" target="_blank">sur la MSDN</a>.</p>
<h2><a name="sommaire"></a>Sommaire</h2>
<p><strong>Bien d&eacute;buter et fondamentaux</strong></p>
<ul>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-1.aspx" target="_blank">Bien d&eacute;marrer (Hello World)</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-2.aspx" target="_blank">Cr&eacute;er une interface utilisateur pour Windows Phone en XAML</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-3.aspx" target="_blank">Utiliser des contr&ocirc;les</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-4.aspx" target="_blank">Types de contr&ocirc;les</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-5.aspx" target="_blank">Contr&ocirc;les Panorama et Pivot</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-6.aspx" target="_blank">Travailler avec du texte sur le Windows Phone</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-7.aspx" target="_blank">Mise en page sur l&rsquo;&eacute;cran</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-8.aspx" target="_blank">Orientations de l&rsquo;&eacute;cran</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-9.aspx" target="_blank">Saisie tactile</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-10.aspx" target="_blank">Navigation</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-11.aspx" target="_blank">Ex&eacute;cuter votre application en arri&egrave;re-plan (tombstoning)</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-12.aspx" target="_blank">Notifications Push pour le d&eacute;veloppement Windows Phone</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-13.aspx" target="_blank">Publier votre application sur le Marketplace</a></li>
</ul>
<p><strong>Visuels et m&eacute;dia</strong></p>
<ul>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-14.aspx" target="_blank">Images</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-15.aspx" target="_blank">Animations</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-16.aspx" target="_blank">Vid&eacute;o et Audio</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-17.aspx" target="_blank">Graphiques</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-18.aspx" target="_blank">Pinceaux</a></li>
</ul>
<p><strong>Travailler avec les donn&eacute;es</strong></p>
<ul>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-19.aspx" target="_blank">Obtenir des donn&eacute;es dans vos applications Windows Phone</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-20.aspx" target="_blank">Data binding</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-21.aspx" target="_blank">Isolated storage</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-22.aspx" target="_blank">Acc&eacute;der &agrave; un service Web REST</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-23.aspx" target="_blank">Consommer des donn&eacute;es Windows Azure</a></li>
</ul>
<p><strong>Sondes et autres fonctionnalit&eacute;s sp&eacute;cifiques au t&eacute;l&eacute;phone</strong></p>
<ul>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-24.aspx" target="_blank">Lanceurs et choosers</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-25.aspx" target="_blank">D&eacute;tecter des mouvements (acc&eacute;l&eacute;rom&egrave;tres)</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-26.aspx" target="_blank">D&eacute;velopper avec le GPS Windows Phone (Services de localisation)</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-27.aspx" target="_blank">D&eacute;velopper avec l&rsquo;appareil photo du Windows Phone</a></li>
</ul>
<hr />
<h1>D&eacute;velopper avec l&rsquo;appareil photo de Windows Phone</h1>
<p>Silverlight pour Windows Phone comprend plusieurs outils faciles &agrave; utiliser pour l&rsquo;exploitation de la cam&eacute;ra et des photos. Ici, nous allons montrer comment prendre et enregistrer des photos avec l'appareil photo du Windows Phone, s&eacute;lectionner et afficher des photos depuis la biblioth&egrave;que d&rsquo;images de Windows Phone.</p>
<p>Cet article est divis&eacute; en plusieurs sections :</p>
<ul>
<li><a href="#interface">Cr&eacute;er une interface utilisateur pour la cam&eacute;ra et l&rsquo;affichage des photos</a></li>
<li><a href="#takingpictures">Prendre, S&eacute;lectionner et Afficher des images</a></li>
<li><a href="#savingpictures">Sauvegarde des images dans la biblioth&egrave;que d&rsquo;images</a></li>
</ul>
<p><span style="text-decoration: underline;"><a href="http://code.msdn.microsoft.com/silverlightforphone/Release/ProjectReleases.aspx?ReleaseId=5337">T&eacute;l&eacute;charger le code source complet de ce tutoriel.</a></span></p>
<p>&nbsp;</p>
<p><a name="interface"></a></p>
<h2>Cr&eacute;er une interface utilisateur pour l&rsquo;appareil photo et l&rsquo;affichage des images</h2>
<p>Lancez Visual Studio et commencez un projet de type "Silverlight pour Windows Phone". Puis cr&eacute;ez une interface utilisateur (UI) qui comporte les &eacute;l&eacute;ments suivants:</p>
<ul>
<li>Deux champs <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.textblock(VS.95).aspx">TextBlock</a> - un avec un nom significatif qui permettra d'afficher des messages d'&eacute;tat, et un TextBlock qui affiche simplement: &laquo;D&eacute;branchez votre t&eacute;l&eacute;phone &agrave; partir du logiciel Zune pour le faire fonctionner"</li>
<li>Un objet <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.image(v=VS.95).aspx">Image</a> avec un nom significatif qui aura sa source dynamiquement mise &agrave; jour pour refl&eacute;ter la nouvelle image qui a &eacute;t&eacute; prise ou choisie.</li>
<li>Trois <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.button(VS.95).aspx">boutons</a> avec des noms significatifs qui seront utilis&eacute;s pour prendre une nouvelle photo, afficher une photo existante, et enregistrer la photo affich&eacute;e dans l&rsquo;espace de stockage du t&eacute;l&eacute;phone. Dans cet article, ces boutons seront respectivement appel&eacute;s <strong>takePhotoButton</strong>, <strong>choosePhotoButton</strong>, et <strong>savePhotoButton</strong>.</li>
</ul>
<p>Une disposition de ces &eacute;l&eacute;ments est fournie ci-dessous. <br /><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/0636.clip_image001_52F2454C.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/0636.clip_5F00_image001_5F00_52F2454C.jpg"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="clip_image001" border="0" alt="clip_image001" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/3771.clip_image001_thumb_5069138E.jpg" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/3771.clip_5F00_image001_5F00_thumb_5F00_5069138E.jpg" width="325" height="599" /></a></p>
<p><b>XAML</b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:52ed55d4-7847-4e3f-9133-4a4c08e410a5" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;">
<li><span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Grid</span><span style="color: #ff0000;"> x</span><span style="color: #0000ff;">:</span><span style="color: #ff0000;">Name</span><span style="color: #0000ff;">="ContentPanel"</span><span style="color: #ff0000;"> Grid.Row</span><span style="color: #0000ff;">="1"</span><span style="color: #ff0000;"> Margin</span><span style="color: #0000ff;">="12,0,12,0"&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Button</span><span style="color: #ff0000;"> Content</span><span style="color: #0000ff;">="Take Photo"</span><span style="color: #ff0000;"> Height</span><span style="color: #0000ff;">="72"</span><span style="color: #ff0000;"> HorizontalAlignment</span><span style="color: #0000ff;">="Left"</span><span style="color: #ff0000;"> Margin</span><span style="color: #0000ff;">="12,6,0,0"</span><span style="color: #ff0000;"> Name</span><span style="color: #0000ff;">="button1"</span><span style="color: #ff0000;"> VerticalAlignment</span><span style="color: #0000ff;">="Top"</span><span style="color: #ff0000;"> Width</span><span style="color: #0000ff;">="189"</span><span style="color: #ff0000;"> Click</span><span style="color: #0000ff;">="</span><span style="color: #ff0000;">button1_Click</span><span style="color: #0000ff;">" /&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Image</span><span style="color: #ff0000;"> Height</span><span style="color: #0000ff;">="308"</span><span style="color: #ff0000;"> HorizontalAlignment</span><span style="color: #0000ff;">="Left"</span><span style="color: #ff0000;"> Margin</span><span style="color: #0000ff;">="27,275,0,0"</span><span style="color: #ff0000;"> Name</span><span style="color: #0000ff;">="myImage"</span><span style="color: #ff0000;"> Stretch</span><span style="color: #0000ff;">="Fill"</span><span style="color: #ff0000;"> VerticalAlignment</span><span style="color: #0000ff;">="Top"</span><span style="color: #ff0000;"> Width</span><span style="color: #0000ff;">="406"/&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Button</span><span style="color: #ff0000;"> Content</span><span style="color: #0000ff;">="Choose Existing"</span><span style="color: #ff0000;"> Height</span><span style="color: #0000ff;">="72"</span><span style="color: #ff0000;"> HorizontalAlignment</span><span style="color: #0000ff;">="Left"</span><span style="color: #ff0000;"> Margin</span><span style="color: #0000ff;">="194,6,0,0"</span><span style="color: #ff0000;"> Name</span><span style="color: #0000ff;">="button2"</span><span style="color: #ff0000;"> VerticalAlignment</span><span style="color: #0000ff;">="Top"</span><span style="color: #ff0000;"> Width</span><span style="color: #0000ff;">="239"</span><span style="color: #ff0000;"> Click</span><span style="color: #0000ff;">="</span><span style="color: #ff0000;">button2_Click</span><span style="color: #0000ff;">" /&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">TextBlock</span><span style="color: #ff0000;"> Height</span><span style="color: #0000ff;">="30"</span><span style="color: #ff0000;"> HorizontalAlignment</span><span style="color: #0000ff;">="Left"</span><span style="color: #ff0000;"> Margin</span><span style="color: #0000ff;">="27,162,0,0"</span><span style="color: #ff0000;"> Name</span><span style="color: #0000ff;">="textBlock1"</span><span style="color: #ff0000;"> Text</span><span style="color: #0000ff;">="Disconnect phone from Zune software to run!"</span><span style="color: #ff0000;"> VerticalAlignment</span><span style="color: #0000ff;">="Top"</span><span style="color: #ff0000;"> Width</span><span style="color: #0000ff;">="406" /&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Button</span><span style="color: #ff0000;"> Content</span><span style="color: #0000ff;">="Save Current Photo to Library"</span><span style="color: #ff0000;"> Height</span><span style="color: #0000ff;">="72"</span><span style="color: #ff0000;"> HorizontalAlignment</span><span style="color: #0000ff;">="Left"</span><span style="color: #ff0000;"> Margin</span><span style="color: #0000ff;">="12,84,0,0"</span><span style="color: #ff0000;"> Name</span><span style="color: #0000ff;">="savePhotoButton"</span><span style="color: #ff0000;"> VerticalAlignment</span><span style="color: #0000ff;">="Top"</span><span style="color: #ff0000;"> Width</span><span style="color: #0000ff;">="419"</span><span style="color: #ff0000;"> IsEnabled</span><span style="color: #0000ff;">="False"</span><span style="color: #ff0000;"> Click</span><span style="color: #0000ff;">="</span><span style="color: #ff0000;">savePhotoButton_Click</span><span style="color: #0000ff;">" /&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">TextBlock</span><span style="color: #ff0000;"> Height</span><span style="color: #0000ff;">="71"</span><span style="color: #ff0000;"> HorizontalAlignment</span><span style="color: #0000ff;">="Left"</span><span style="color: #ff0000;"> Margin</span><span style="color: #0000ff;">="29,197,0,0"</span><span style="color: #ff0000;"> Name</span><span style="color: #0000ff;">="statusText"</span><span style="color: #ff0000;"> Text</span><span style="color: #0000ff;">=""</span><span style="color: #ff0000;"> VerticalAlignment</span><span style="color: #0000ff;">="Top"</span><span style="color: #ff0000;"> Width</span><span style="color: #0000ff;">="402"</span><span style="color: #ff0000;"> Foreground</span><span style="color: #0000ff;">="Red"</span><span style="color: #ff0000;"> TextWrapping</span><span style="color: #0000ff;">="Wrap" /&gt;</span></li>
<li style="background: #f3f3f3;"><span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">Grid</span><span style="color: #0000ff;">&gt;</span></li>
</ol></div>
</div>
</div>
<p>En tant que derni&egrave;re &eacute;tape avant de coder, ajoutez la r&eacute;f&eacute;rence <b>Microsoft.Xna.Framework</b>. Nous allons utiliser l'espace de noms <b>Microsoft.Xna.Framework.Media</b> de cet assembly pour enregistrer des images &agrave; la biblioth&egrave;que de m&eacute;dia du t&eacute;l&eacute;phone, et il doit &ecirc;tre r&eacute;f&eacute;renc&eacute; par votre projet avant que l'un de ses types, &eacute;v&eacute;nements ou m&eacute;thodes puisse l&rsquo;utiliser dans votre application.</p>
<p><b>Pour ajouter l&rsquo;espace de nom Microsoft.Xna.Framework &agrave; votre application:</b></p>
<p>1. Dans le <b>Solution Explorer</b>, cliquez-droit sur <b>References</b>, puis s&eacute;lectionnez <b>Add Reference</b>.</p>
<p>2. S&eacute;lectionnez <b>Microsoft.Xna.Framework</b> dans la liste, puis cliquez sur <b>OK</b>.</p>
<p><a name="takingpictures"></a></p>
<h2>Prendre, s&eacute;lectionner, et afficher des images</h2>
<p>Dans le Solution Explorer, ouvrez le fichier <b>MainPage.xaml.cs,</b> et ajoutez les lignes de codes suivantes en haut de la page, laisser les r&eacute;f&eacute;rences existantes (par d&eacute;faut) en place.</p>
<p><b>C#</b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:f95c9eae-a224-405b-82f9-51f5304c4d73" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">using</span> Microsoft.Phone.Tasks;</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">using</span> System.Windows.Media.Imaging;</li>
<li><span style="color: #0000ff;">using</span> System.IO;</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">using</span> System.IO.IsolatedStorage;</li>
<li><span style="color: #0000ff;">using</span> Microsoft.<span style="color: #ff0000;">Xna</span>.Framework.Media;</li>
</ol></div>
</div>
</div>
<p><b>Visual Basic <br /></b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:89fb021c-d949-4a62-bdef-34ee8fd03119" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">Imports</span> Microsoft.Phone.Tasks</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">Imports</span> System.Windows.Media.Imaging</li>
<li><span style="color: #0000ff;">Imports</span> System.IO</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">Imports</span> System.IO.IsolatedStorage</li>
<li><span style="color: #0000ff;">Imports</span> Microsoft.Xna.Framework.Media</li>
</ol></div>
</div>
</div>
<p>Cela permet &agrave; votre code d'acc&eacute;der aux espaces de noms n&eacute;cessaires pour ouvrir l'application appareil photo du t&eacute;l&eacute;phone pour prendre une photo, utiliser un objet Bitmap r&eacute;inscriptible pour stocker les donn&eacute;es d'une image temporaire, utiliser un flux de m&eacute;moire pour convertir l'image en un fichier, sauvegarder une photo dans le l&rsquo;espace de stockage interne du t&eacute;l&eacute;phone, et d&eacute;placer une image &agrave; partir de l&rsquo;Isolated Storage du t&eacute;l&eacute;phone &agrave; la biblioth&egrave;que m&eacute;dias du t&eacute;l&eacute;phone.</p>
<p>Pour la s&eacute;lection de photos et l'utilisation de la cam&eacute;ra, il nous faudra une coordination entre plusieurs m&eacute;thodes, nous allons donc ajouter quelques membres de donn&eacute;es &agrave; la classe principale. Deux d'entre elles seront des objets <a href="http://msdn.microsoft.com/en-us/library/ff769543(v=vs.92).aspx">Chooser</a>, qui permettent aux applications de d&eacute;charger le contr&ocirc;le &agrave; la fonctionnalit&eacute; native du syst&egrave;me d'exploitation du t&eacute;l&eacute;phone afin de faciliter les choses comme le choix d'un contact &agrave; partir d'une liste, de prendre une photo, ou de s&eacute;lectionner une photo depuis la pellicule photo de l&rsquo;appareil photo du t&eacute;l&eacute;phone. Un autre objet sera une image bitmap que nous utilisons pour stocker les informations de l&rsquo;image temporaire, &agrave; savoir, les images que nous avons choisies, soit de la pellicule ou simplement prises avec l'appareil lui-m&ecirc;me</p>
<p><b>C# <br /></b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:65ff1bf7-6e14-4a32-aa98-f98a66f6b533" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">partial</span> <span style="color: #0000ff;">class</span> <span style="color: #2b91af;">MainPage</span> : <span style="color: #2b91af;">PhoneApplicationPage</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">// Declare the CameraCaptureTask object with page scope.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #2b91af;">CameraCaptureTask</span> cameraCaptureTask;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #2b91af;">PhotoChooserTask</span> photoChooserTask;</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #2b91af;">BitmapImage</span> bmp;</li>
<li>&nbsp;</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...</li>
</ol></div>
</div>
</div>
<p><b>Visual Basic <br /></b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:8d6294f4-54d0-4cad-8c72-7633a5cf3a35" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">Partial</span> <span style="color: #0000ff;">Public</span> <span style="color: #0000ff;">Class</span> <span style="color: #2b91af;">MainPage</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Inherits</span> PhoneApplicationPage</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">' Declare the CameraCaptureTask object with page scope.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Private</span> cameraCaptureTask <span style="color: #0000ff;">As</span> CameraCaptureTask</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Private</span> photoChooserTask <span style="color: #0000ff;">As</span> PhotoChooserTask</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Private</span> bmp <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">BitmapImage</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...</li>
</ol></div>
</div>
</div>
<p><b>cameraCaptureTask</b> et <b>photoChooserTask</b> auront besoin d'avoir des gestionnaires d'&eacute;v&eacute;nements c&acirc;bl&eacute;s qui se d&eacute;clencheront quand une photo sera prise ou choisie dans la biblioth&egrave;que d'images du t&eacute;l&eacute;phone. Cela signifie que les deux &eacute;v&eacute;nements suivants doivent &ecirc;tre g&eacute;r&eacute;s:</p>
<p>1. L&rsquo;&eacute;v&eacute;nement <b>Completed</b> de <b>cameraCaptureTask</b>.</p>
<p>2. L&rsquo;&eacute;v&eacute;nement <b>Completed </b>de <b>photoChooserTask</b></p>
<p><b><br /></b>Dans les deux cas, nous voulons juste afficher l'image &agrave; l'&eacute;cran, et parce que les &eacute;v&egrave;nements <b>Completed</b> envoient le m&ecirc;me type d'objet (un objet PhotoResult) &agrave; leurs gestionnaires , nous allons utiliser une seule m&eacute;thode pour g&eacute;rer ces deux &eacute;v&egrave;nements. Nous appellerons cette m&eacute;thode <b>photoCaptureOrSelectionCompleted</b>, et elle prendra une photo qui a &eacute;t&eacute; soit prise par la cam&eacute;ra ou s&eacute;lectionn&eacute;e &agrave; partir de la biblioth&egrave;que d'images, et l&rsquo;affichera sur l'&eacute;cran. Le c&acirc;blage des deux &eacute;v&egrave;nements &agrave; cette nouvelle m&eacute;thode est fait dans la fonction startup, <b>MainPage</b>, r&eacute;sultant ce qui suit:</p>
<p><b>C# <br /></b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:239f82d6-0b4f-473a-80e0-e8df644dc84f" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">public</span> MainPage()</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InitializeComponent();</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">// Initialize the Chooser objects and assign the handlers for their "Completed" events</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cameraCaptureTask = <span style="color: #0000ff;">new</span> <span style="color: #2b91af;">CameraCaptureTask</span>();</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cameraCaptureTask.Completed += <span style="color: #0000ff;">new</span> <span style="color: #2b91af;">EventHandler</span>&lt;<span style="color: #2b91af;">PhotoResult</span>&gt;(photoCaptureOrSelectionCompleted);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;photoChooserTask = <span style="color: #0000ff;">new</span> <span style="color: #2b91af;">PhotoChooserTask</span>();</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;photoChooserTask.Completed += <span style="color: #0000ff;">new</span> <span style="color: #2b91af;">EventHandler</span>&lt;PhotoResult&lt;(photoCaptureOrSelectionCompleted);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
</ol></div>
</div>
</div>
<p><b>Visual Basic <br /></b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:5379987c-00d2-41e2-a7aa-88c67e7c0392" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">Partial</span> <span style="color: #0000ff;">Public</span> <span style="color: #0000ff;">Class</span> <span style="color: #2b91af;">MainPage</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Inherits</span> PhoneApplicationPage</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">' Declare the CameraCaptureTask object with page scope.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Private</span> cameraCaptureTask <span style="color: #0000ff;">As</span> CameraCaptureTask</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Private</span> photoChooserTask <span style="color: #0000ff;">As</span> PhotoChooserTask</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Private</span> bmp <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">BitmapImage</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Class</span></li>
</ol></div>
</div>
</div>
<p>Plus t&ocirc;t, lors de la cr&eacute;ation de l'interface utilisateur, nous avons ajout&eacute; une image &agrave; l'&eacute;cran appel&eacute;e <b>myImage</b>, mais nous n'avions pas fix&eacute; sa source, laissant donc le champ vide. Quand l&rsquo;&eacute;v&egrave;nement <b>photoCaptureOrSelectionCompleted</b> est d&eacute;clench&eacute;, nous savons que l'utilisateur a pris ou s&eacute;lectionn&eacute; une image, il est donc temps de d&eacute;finir la Source de <b>myImage</b> &agrave; cette image, puis redimensionner celle-ci afin qu'elle s'adapte &agrave; la zone d'affichage de myImage. Nous allons &eacute;galement mettre &agrave; jour le <b>statut du texte </b>du TextBlock si n&eacute;cessaire. Enfin, nous allons activer le bouton qui permet &agrave; l'utilisateur d'enregistrer l'image affich&eacute;e.</p>
<p>La propri&eacute;t&eacute; Stretch de l&rsquo;objet Image d&eacute;termine la fa&ccedil;on dont l'image sera dimensionn&eacute;e pour s'adapter aux dimensions de <b>myImage</b>, nous utilisons ici <i>Stretch.Uniform</i> pour pr&eacute;server le ratio original de l&rsquo;image.</p>
<p>Ainsi, nous avons la possibilit&eacute; de sauvegarder plus tard cette image si l'utilisateur le souhaite, nous allons utiliser le bitmap que nous avons cr&eacute;&eacute; plus t&ocirc;t, appel&eacute; bmp, pour recevoir les nouvelles donn&eacute;es de l&rsquo;image, puis l&rsquo;affecter en tant que <b>source</b> de <b>myImage</b> afin qu'il s&rsquo;affiche sur l'&eacute;cran. (Dans une autre m&eacute;thode que nous mettrons en &oelig;uvre plus tard, le contenu de bmp pourra &ecirc;tre sauvegard&eacute; sur l&rsquo;espace de stockage interne du t&eacute;l&eacute;phone) La m&eacute;thode finale <b>photoCaptureOrSelectionCompleted</b> ressemble &agrave; ceci:</p>
<p><b>C# <br /></b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:a2a57e90-490b-49f7-b159-3fe154444139" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">void</span> photoCaptureOrSelectionCompleted(<span style="color: #0000ff;">object</span> sender, <span style="color: #2b91af;">PhotoResult</span> e)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">if</span> (e.TaskResult == <span style="color: #2b91af;">TaskResult</span>.OK)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bmp = <span style="color: #0000ff;">new</span> <span style="color: #2b91af;">BitmapImage</span>();</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bmp.SetSource(e.ChosenPhoto);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myImage.Source = bmp;</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myImage.Stretch = <span style="color: #2b91af;">Stretch</span>.Uniform;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">// swap UI element states</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;savePhotoButton.IsEnabled = <span style="color: #0000ff;">true</span>;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;statusText.Text = <span style="color: #a31515;">""</span>;</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">else</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;savePhotoButton.IsEnabled = <span style="color: #0000ff;">false</span>;</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;statusText.Text = <span style="color: #a31515;">"Task Result Error: "</span> + e.TaskResult.ToString();</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
</ol></div>
</div>
</div>
<p><b>Visual Basic <br /></b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:23fb417d-4cad-4668-b941-b32de123c243" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> photoCaptureOrSelectionCompleted(sender <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Object</span>, e <span style="color: #0000ff;">As</span> PhotoResult)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">If</span> e.TaskResult = TaskResult.OK <span style="color: #0000ff;">Then</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bmp = <span style="color: #0000ff;">New</span> <span style="color: #2b91af;">BitmapImage</span>()</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bmp.SetSource(e.ChosenPhoto)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myImage.Source = bmp</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myImage.Stretch = <span style="color: #2b91af;">Stretch</span>.Uniform</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">' swap UI element states</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;savePhotoButton.IsEnabled = <span style="color: #0000ff;">True</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;statusText.Text = <span style="color: #a31515;">""</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Else</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;savePhotoButton.IsEnabled = <span style="color: #0000ff;">False</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;statusText.Text = <span style="color: #a31515;">"Task Result Error: "</span> &amp; e.TaskResult.ToString()</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span></li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></li>
</ol></div>
</div>
</div>
<p>Maintenant nous c&acirc;blons les boutons que nous avons plac&eacute;s dans l'interface utilisateur pour lancer un Chooser qui prendra ou s&eacute;lectionnera une image. Retournez au Designer de l&rsquo;interface utilisateur et double-cliquez sur le bouton &laquo;Take Photo &raquo;. Cela va cr&eacute;er une fonction de gestionnaire d&rsquo;&eacute;v&egrave;nement vide qui se d&eacute;clenchera lorsque le bouton sera cliqu&eacute;. Notre bouton est nomm&eacute; <b>takePhotoButton</b>, et il ne n&eacute;cessite qu'une seule ligne de code pour lancer le Chooser. L'&eacute;v&egrave;nement <b>Completed</b> se d&eacute;clenchera lorsque la photo sera prise. Le r&eacute;sultat est une fonction tr&egrave;s simple nomm&eacute;e <b>takePhotoButton</b>_<b>Click</b>:</p>
<p><strong>C#</strong></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:01bbd5aa-bcc4-42bd-8d3c-7de79d6ed130" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;">
<li><span style="color: #008000;">// The camera Chooser is shown in response to a button click.</span></li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">private</span> <span style="color: #0000ff;">void</span> takePhotoButton_Click(<span style="color: #0000ff;">object</span> sender, <span style="color: #2b91af;">RoutedEventArgs</span> e)</li>
<li>{</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;cameraCaptureTask.Show();</li>
<li>}</li>
</ol></div>
</div>
</div>
<p><strong>Visual Basic</strong></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:1184a5af-a2c2-4a1b-abb7-b7e5482403ee" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;">
<li><span style="color: #008000;">' The camera Chooser is shown in response to a button click.</span></li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> takePhotoButton_Click(sender <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Object</span>, e <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">RoutedEventArgs</span>)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;cameraCaptureTask.Show()</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></li>
</ol></div>
</div>
</div>
<p>Maintenant, double-cliquez sur le bouton &laquo;Choose Existing&raquo; que nous avons nomm&eacute; <b>choosePhotoButton</b>. Une fois encore, une seule ligne de code est n&eacute;cessaire pour lancer le Chooser qui s&eacute;lectionnera une photo, r&eacute;sultant une m&eacute;thode <b>choosePhotoButton</b>_<b>Click</b> qui ressemble &agrave; ceci:</p>
<p><strong>C# <br /></strong></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:42192f8c-e974-4d1d-bef4-60c2d3a38d2a" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;">
<li><span style="color: #008000;">// The photo Chooser shown in response to a button click.</span></li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">private</span> <span style="color: #0000ff;">void</span> choosePhotoButton_Click(<span style="color: #0000ff;">object</span> sender, <span style="color: #2b91af;">RoutedEventArgs</span> e)</li>
<li>{</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;photoChooserTask.Show();</li>
<li>}</li>
</ol></div>
</div>
</div>
<p><strong>Visual Basic</strong></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:f2e17eee-4711-479b-b3a1-e39f5f75d931" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;">
<li><span style="color: #008000;">' The photo Chooser shown in response to a button click.</span></li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> choosePhotoButton_Click(sender <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Object</span>, e <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">RoutedEventArgs</span>)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;photoChooserTask.Show()</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></li>
</ol></div>
</div>
</div>
<p>L'application est maintenant capable de capturer et de choisir des images existantes et de les afficher &agrave; l'&eacute;cran dans des proportions correctes. <br />Comme l'avertissement dans l'interface utilisateur l&rsquo;indique, le t&eacute;l&eacute;phone doit &ecirc;tre d&eacute;connect&eacute; du logiciel Zune pour que les Choosers se lancent.</p>
<p><a id="savingpictures" name="savingpictures"></a></p>
<h2>Sauvegarde des images dans la biblioth&egrave;que d&rsquo;images</h2>
<p>Afin d'enregistrer l'image dans la biblioth&egrave;que du t&eacute;l&eacute;phone, celle-ci devra &ecirc;tre encod&eacute;e en premier en JPEG en utilisant la classe d&rsquo;<b>Extensions</b> de l'espace de noms <b>System.Windows.Media.Imaging.</b> Ensuite, l'assembly XNA que nous avons import&eacute;, sera utilis&eacute; pour l'interface avec la classe <b>MediaLibrary</b>, dont la m&eacute;thode <b>SavePicture</b> &eacute;crira l&rsquo;image dans la biblioth&egrave;que d'images du t&eacute;l&eacute;phone, o&ugrave; elle pourra &ecirc;tre synchronis&eacute;e &agrave; l'ordinateur, vue dans un diaporama, etc.</p>
<p>Nous allons &eacute;crire un fichier temporaire JPEG pour le stockage interne du t&eacute;l&eacute;phone, connu sous le nom d&rsquo;Isolated Storage, car ce processus implique deux &eacute;tapes de sauvegarde de l&rsquo;image au format JPEG et par la suite nous importerons celle-ci dans la biblioth&egrave;que. En d&rsquo;autres termes, l&rsquo;Isolated Storage pour Windows Phone assigne un espace unique et un fichier s&eacute;curis&eacute; pour chaque application du t&eacute;l&eacute;phone. Nous n'allons pas entrer dans les d&eacute;tails de l'utilisation de l&rsquo;Isolated Storage ici, nous avons juste besoin d'utiliser l'espace de stockage de notre application pour &eacute;crire notre fichier temporaire JPEG. Cela implique de cr&eacute;er en premier un fichier vide, puis en lui attribuant un contenu. Le type <b>WriteableBitmap</b> sera utilis&eacute; pour cette t&acirc;che, en recevant le contenu de <b>bmp</b> de notre image temporaire cr&eacute;e plus t&ocirc;t. Enfin, nous voulons mettre &agrave; jour la propri&eacute;t&eacute; <b>statusText</b> du TextBlock lorsque nous avons un r&eacute;sultat de la tentative de sauvegarde de l'image.</p>
<p>Retournez au concepteur d'interface utilisateur et double-cliquez sur le bouton &ldquo;Save Current Photo to Library &raquo;, que nous avons nomm&eacute; <b>savePhotoButton</b>. Comme avec les autres boutons nous avons un gestionnaire d&rsquo;&eacute;v&egrave;nement vide sur l&rsquo;&eacute;v&egrave;nement Click du bouton. Pour couvrir toutes les fonctionnalit&eacute;s d&eacute;crites, une fois mise en &oelig;uvre, la version finale de la m&eacute;thode <b>savePhotoButton_Click</b> ressemble &agrave; ceci:</p>
<p><strong>C# <br /></strong></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:e8470910-00d5-4abe-99e4-160e186aa743" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">private</span> <span style="color: #0000ff;">void</span> savePhotoButton_Click(<span style="color: #0000ff;">object</span> sender, <span style="color: #2b91af;">RoutedEventArgs</span> e)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">try</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">// Create a filename for JPEG file in isolated storage.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #2b91af;">String</span> tempJPEG = <span style="color: #a31515;">"TempJPEG"</span>;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">// Create virtual store and file stream. Check for duplicate tempJPEG files.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">var</span> myStore = <span style="color: #2b91af;">IsolatedStorageFile</span>.GetUserStoreForApplication();</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">if</span> (myStore.FileExists(tempJPEG))</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myStore.DeleteFile(tempJPEG);</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #2b91af;">IsolatedStorageFileStream</span> myFileStream = myStore.CreateFile(tempJPEG);</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">// Create a stream out of the sample JPEG file.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">// Instead of MyQuickApp in the URI, use the correct project name.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">// The use of TempJPEG was established earlier.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #2b91af;">Uri</span> uri = <span style="color: #0000ff;">new</span> <span style="color: #2b91af;">Uri</span>(<span style="color: #a31515;">"MyQuickApp;component/TempJPEG.jpg"</span>, <span style="color: #2b91af;">UriKind</span>.Relative);</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">// Create a new WriteableBitmap object and set it to the JPEG stream.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #2b91af;">WriteableBitmap</span> wb = <span style="color: #0000ff;">new</span> <span style="color: #2b91af;">WriteableBitmap</span>(bmp);</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">// Encode WriteableBitmap object to a JPEG stream.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">// SaveJpeg(WriteableBitmap bitmap, Stream targetStream, int targetWidth,</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">// int targetHeight, int orientation, int quality)</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #2b91af;">Extensions</span>.SaveJpeg(wb, myFileStream, wb.PixelWidth, wb.PixelHeight, 0, 85);</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myFileStream.Close();</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">// Create a new stream from isolated storage, and save the JPEG file to</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">// the media library on Windows Phone.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myFileStream = myStore.OpenFile(tempJPEG, <span style="color: #2b91af;">FileMode</span>.Open, <span style="color: #2b91af;">FileAccess</span>.Read);</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MediaLibrary library = <span style="color: #0000ff;">new</span> MediaLibrary();</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Picture pic = library.SavePicture(<span style="color: #a31515;">"SavedPicture.jpg"</span>, myFileStream);</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myFileStream.Close();</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;savePhotoButton.IsEnabled = <span style="color: #0000ff;">false</span>;</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;statusText.Text = <span style="color: #a31515;">"Saved!"</span>;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">catch</span> (<span style="color: #2b91af;">Exception</span> myError)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;statusText.Text = myError.Message;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
</ol></div>
</div>
</div>
<p><strong>Visual Basic</strong></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:e8e1e023-ba3c-4df2-b819-4768312fb946" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> savePhotoButton_Click(sender <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Object</span>, e <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">RoutedEventArgs</span>)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Try</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">' Create a filename for JPEG file in isolated storage.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Dim</span> tempJPEG <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">[String]</span> = <span style="color: #a31515;">"TempJPEG"</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">' Create virtual store and file stream. Check for duplicate tempJPEG files.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Dim</span> myStore = <span style="color: #2b91af;">IsolatedStorageFile</span>.GetUserStoreForApplication()</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">If</span> myStore.FileExists(tempJPEG) <span style="color: #0000ff;">Then</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myStore.DeleteFile(tempJPEG)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Dim</span> myFileStream <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">IsolatedStorageFileStream</span> = myStore.CreateFile(tempJPEG)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">' Create a stream out of the sample JPEG file.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">' Instead of MyQuickApp in the URI, use the correct project name.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">' The use of TempJPEG was established earlier.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Dim</span> uri <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">New</span> <span style="color: #2b91af;">Uri</span>(<span style="color: #a31515;">"MyQuickApp;component/TempJPEG.jpg"</span>, <span style="color: #2b91af;">UriKind</span>.Relative)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">' Create a new WriteableBitmap object and set it to the JPEG stream.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Dim</span> wb <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">New</span> <span style="color: #2b91af;">WriteableBitmap</span>(bmp)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">' Encode WriteableBitmap object to a JPEG stream.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">' SaveJpeg(WriteableBitmap bitmap, Stream targetStream, int targetWidth,</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">' int targetHeight, int orientation, int quality)</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #2b91af;">Extensions</span>.SaveJpeg(wb, myFileStream, wb.PixelWidth, wb.PixelHeight, 0, 85)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myFileStream.Close()</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">' Create a new stream from isolated storage, and save the JPEG file to</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">' the media library on Windows Phone.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myFileStream = myStore.OpenFile(tempJPEG, <span style="color: #2b91af;">FileMode</span>.Open, <span style="color: #2b91af;">FileAccess</span>.Read)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Dim</span> library <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">New</span> MediaLibrary()</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Dim</span> pic <span style="color: #0000ff;">As</span> Picture = library.SavePicture(<span style="color: #a31515;">"SavedPicture.jpg"</span>, myFileStream)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myFileStream.Close()</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;savePhotoButton.IsEnabled = <span style="color: #0000ff;">False</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;statusText.Text = <span style="color: #a31515;">"Saved!"</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Catch</span> myError <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">Exception</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;statusText.Text = myError.Message</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Try</span></li>
<li><span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></li>
</ol></div>
</div>
</div>
<p>Le tutoriel est maintenant termin&eacute;, et vous avez un exemple de programme qui g&egrave;re les entr&eacute;es de la cam&eacute;ra, lit et &eacute;crit dans la phototh&egrave;que. N'oubliez pas de d&eacute;brancher le t&eacute;l&eacute;phone du logiciel Zune de sorte que les m&eacute;thodes de d&eacute;marrage des Choosers puissent fonctionner.</p>
<p><b>Voir aussi <br /></b></p>
<ul>
<li><span style="text-decoration: underline;"><a href="http://code.msdn.microsoft.com/silverlightforphone/Release/ProjectReleases.aspx?ReleaseId=5337">Le code source de ce tutoriel</a></span></li>
<li><a href="http://msdn.microsoft.com/en-us/library/ff769556(v=VS.92).aspx">Les Launchers et les Choosers pour Windows Phone</a> (Documentation de r&eacute;f&eacute;rence)</li>
<li><span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/ff769549(v=vs.92).aspx">Comment encoder un fichier JPEG pour Windows Phone et enregistrer les images dans la biblioth&egrave;que d&rsquo;images</a> </span>(Documentation de r&eacute;f&eacute;rence)</li>
<li><span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.media.medialibrary.aspx">La classe MediaLibrary</a> </span>(Documentation de r&eacute;f&eacute;rence)</li>
<li><a href="http://msdn.microsoft.com/en-us/library/ff626522(v=VS.92).aspx">L&rsquo;Isolated Storage pour Windows Phone</a> (Documentation de r&eacute;f&eacute;rence)</li>
</ul>]]></content:encoded>
    </item>
    <item>
      <title>Developpement Windows Phone - partie 24</title>
      <link>https://docs.microsoft.com/archive/blogs/patrick_payet/developpement-windows-phone-partie-24</link>
      <pubDate>Tue, 06 Sep 2011 13:24:00 GMT</pubDate>
      <dc:creator><![CDATA[papayet]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/patrick_payet/2011/09/06/developpement-windows-phone-partie-24/</guid>
      <description><![CDATA[Launchers et Choosers
Cet article fait partie d&rsquo;une s&eacute;rie d&rsquo;articles sur le...]]></description>
      <content:encoded><![CDATA[<h1>Launchers et Choosers</h1>
<p>Cet article fait partie d&rsquo;une s&eacute;rie d&rsquo;articles sur le d&eacute;veloppement Windows Phone. Il s&rsquo;agit d&rsquo;une traduction des articles se trouvant <a href="http://create.msdn.com/en-us/education/quickstarts" target="_blank">sur la MSDN</a>.</p>
<h2><a name="sommaire"></a>Sommaire</h2>
<p><strong>Bien d&eacute;buter et fondamentaux</strong></p>
<ul>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-1.aspx" target="_blank">Bien d&eacute;marrer (Hello World)</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-2.aspx" target="_blank">Cr&eacute;er une interface utilisateur pour Windows Phone en XAML</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-3.aspx" target="_blank">Utiliser des contr&ocirc;les</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-4.aspx" target="_blank">Types de contr&ocirc;les</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-5.aspx" target="_blank">Contr&ocirc;les Panorama et Pivot</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-6.aspx" target="_blank">Travailler avec du texte sur le Windows Phone</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-7.aspx" target="_blank">Mise en page sur l&rsquo;&eacute;cran</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-8.aspx" target="_blank">Orientations de l&rsquo;&eacute;cran</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-9.aspx" target="_blank">Saisie tactile</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-10.aspx" target="_blank">Navigation</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-11.aspx" target="_blank">Ex&eacute;cuter votre application en arri&egrave;re-plan (tombstoning)</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-12.aspx" target="_blank">Notifications Push pour le d&eacute;veloppement Windows Phone</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-13.aspx" target="_blank">Publier votre application sur le Marketplace</a></li>
</ul>
<p><strong>Visuels et m&eacute;dia</strong></p>
<ul>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-14.aspx" target="_blank">Images</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-15.aspx" target="_blank">Animations</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-16.aspx" target="_blank">Vid&eacute;o et Audio</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-17.aspx" target="_blank">Graphiques</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-18.aspx" target="_blank">Pinceaux</a></li>
</ul>
<p><strong>Travailler avec les donn&eacute;es</strong></p>
<ul>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-19.aspx" target="_blank">Obtenir des donn&eacute;es dans vos applications Windows Phone</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-20.aspx" target="_blank">Data binding</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-21.aspx" target="_blank">Isolated storage</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-22.aspx" target="_blank">Acc&eacute;der &agrave; un service Web REST</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-23.aspx" target="_blank">Consommer des donn&eacute;es Windows Azure</a></li>
</ul>
<p><strong>Sondes et autres fonctionnalit&eacute;s sp&eacute;cifiques au t&eacute;l&eacute;phone</strong></p>
<ul>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-24.aspx" target="_blank">Lanceurs et choosers</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-25.aspx" target="_blank">D&eacute;tecter des mouvements (acc&eacute;l&eacute;rom&egrave;tres)</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-26.aspx" target="_blank">D&eacute;velopper avec le GPS Windows Phone (Services de localisation)</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-27.aspx" target="_blank">D&eacute;velopper avec l&rsquo;appareil photo du Windows Phone</a></li>
</ul>
<hr />
<h1>Launchers et Choosers</h1>
<p>Silverlight pour les applications Windows Phone ne dispose pas d&rsquo;un acc&egrave;s direct aux applications int&eacute;gr&eacute;es au t&eacute;l&eacute;phone, tel que le num&eacute;roteur t&eacute;l&eacute;phonique, ou les biblioth&egrave;ques de donn&eacute;es utilisateur, ainsi que la biblioth&egrave;que de photos. C'est parce que toutes les applications Windows Phone sont isol&eacute;es les unes des autres dans des sandbox.</p>
<p>Une application ne peut pas d&eacute;marrer directement une autre application, acc&eacute;der &agrave; la m&eacute;moire d'une autre application, ou acc&eacute;der au stockage de donn&eacute;es d'une autre application. Les Launchers et les Choosers permettent indirectement &agrave; Silverlight d&rsquo;utiliser les applications int&eacute;gr&eacute;es &agrave; l'appareil et d'acc&eacute;der &agrave; des biblioth&egrave;ques de donn&eacute;es communes. Ce tutoriel d&eacute;crit ce que les Launchers et les Choosers font et comment les utiliser dans vos applications.</p>
<p>Ce tutoriel contient les sections suivantes:</p>
<ul>
<li><a href="#intorduction">Introduction aux Launchers et Choosers</a></li>
<li><a href="#using_launchers">Utilisation des Launchers</a></li>
<li><a href="#using_choosers">Utilisation des Choosers</a></li>
</ul>
<p><a name="intorduction"></a></p>
<h2>Introduction aux Launchers et Choosers</h2>
<p>Les Launchers (lanceurs) et les Choosers (s&eacute;lecteurs) permettent aux applications Silverlight d&rsquo;acc&eacute;der aux applications int&eacute;gr&eacute;es ainsi qu&rsquo;aux stockages de donn&eacute;es sur le p&eacute;riph&eacute;rique Windows Phone. Par exemple, si vous voulez que votre application effectue un appel t&eacute;l&eacute;phonique, vous devrez utiliser le Launcher <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks.phonecalltask(v=VS.92).aspx">PhoneCallTask</a></span> pour d&eacute;marrer l'application du num&eacute;roteur t&eacute;l&eacute;phonique. Pour acc&eacute;der &agrave; des biblioth&egrave;ques de donn&eacute;es sur l'appareil, telles que la biblioth&egrave;que de photos, vous devrez utiliser le Chooser <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks.photochoosertask(v=VS.92).aspx">PhotoChooserTask</a></span>.</p>
<p>La diff&eacute;rence entre les Launchers et les Choosers est que les Launchers ne retournent pas de valeur lorsque l'application se termine, et les Choosers retournent une valeur. Par exemple, le Launcher <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks.emailcomposetask(v=VS.92).aspx">EmailComposeTask</a></span> d&eacute;marre l'application messagerie et quand il en sort, le contr&ocirc;le est simplement retourn&eacute; &agrave; l'application qui l&rsquo;a appel&eacute;. Le Chooser <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks.cameracapturetask(v=VS.92).aspx">CameraCaptureTask</a></span>, d&eacute;marre l'application cam&eacute;ra, mais apr&egrave;s que l&rsquo;utilisateur ai pris une photo, il fermera l&rsquo;application cam&eacute;ra et retournera la photo qui a &eacute;t&eacute; prise.</p>
<p>Lorsque vous appelez un Launcher ou Chooser, votre application Silverlight est d&eacute;sactiv&eacute;e et l'application ex&eacute;cut&eacute;e est d&eacute;marr&eacute;e. Quand l'application qui a &eacute;t&eacute; ex&eacute;cut&eacute;e est quitt&eacute;e, votre application est r&eacute;activ&eacute;e. Ce processus est appel&eacute; le tombstoning et peut avoir de subtils effets sur l'&eacute;tat de votre application. Pour plus d'informations sur la fa&ccedil;on de traiter correctement le tombstoning dans votre application Silverlight, allez voir la section le <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/ff769557(v=VS.92).aspx">mod&egrave;le d'ex&eacute;cution pour Windows Phone</a></span> sur MSDN ainsi que le <span style="text-decoration: underline;"><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-11.aspx">tutoriel sur le Tombstoning.</a></span></p>
<p>Les classes Launchers et Choosers sont pr&eacute;sentes dans l&rsquo;espace de nom <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks(VS.92).aspx">Microsoft.Phone.Tasks</a></span>, ainsi vous aurez besoin d'inclure une directive &laquo; <span style="text-decoration: underline;">using</span> &raquo; dans votre application.<a name="using_launchers"></a> </p>
<p><a name="using_launchers"></a></p>
<h2>Utilisation des Launchers</h2>
<p>Le processus d'utilisation de toutes les classes Launcher est le m&ecirc;me. Pour utiliser une classe Launcher, suivez les &eacute;tapes suivantes:</p>
<ol>
<li>Cr&eacute;ez une instance de la classe Launcher</li>
<li>D&eacute;finissez les propri&eacute;t&eacute;s de l&rsquo;objet Launcher</li>
<li>Appelez la m&eacute;thode <b>Show</b></li>
</ol>
<p>Par exemple, pour utiliser le Launcher Email afin de composer un nouveau email, vous pouvez cr&eacute;er une instance de la classe <a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks.emailcomposetask(v=VS.92).aspx">EmailComposeTask</a>, et d&eacute;finir les propri&eacute;t&eacute;s <a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks.emailcomposetask.to(v=VS.92).aspx">To</a>,<a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks.emailcomposetask.body(v=VS.92).aspx">Body</a> et <a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks.emailcomposetask.subject(v=VS.92).aspx">Subject</a> et appeler la m&eacute;thode <a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks.emailcomposetask.show(v=VS.92).aspx">Show</a> pour d&eacute;marrer l&rsquo;application. Quand vous sortez de l&rsquo;application Email, le contr&ocirc;le est retourn&eacute; &agrave; votre application.</p>
<p>Le tableau suivant liste les diff&eacute;rents Launchers disponibles :</p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<p>launcher</p>
</td>
<td>
<p>Description</p>
</td>
</tr>
<tr>
<td valign="top">
<p><a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks.emailcomposetask(v=VS.92).aspx">EmailComposeTask</a></p>
</td>
<td valign="top">
<p>Autorise une application &agrave; lancer l'application e-mail avec un nouveau message affich&eacute;. Utilisez cette option pour permettre aux utilisateurs d'envoyer des emails &agrave; partir de votre application.</p>
</td>
</tr>
<tr>
<td valign="top">
<p><a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks.marketplacedetailtask(v=VS.92).aspx">MarketplaceDetailTask</a></p>
</td>
<td valign="top">
<p>Autorise une application &agrave; lancer l&rsquo;application MarketPlace Windows Phone et d&rsquo;afficher la page de d&eacute;tails pour un produit sp&eacute;cifi&eacute;.</p>
</td>
</tr>
<tr>
<td valign="top">
<p><a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks.marketplacehubtask(v=VS.92).aspx">MarketplaceHubTask</a></p>
</td>
<td valign="top">
<p>Autorise une application &agrave; lancer l&rsquo;application MarketPlace.</p>
</td>
</tr>
<tr>
<td valign="top">
<p><a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks.marketplacesearchtask(v=VS.92).aspx">MarketplaceSearchTask</a></p>
</td>
<td valign="top">
<p>Autorise une application &agrave; lancer l&rsquo;application Marketplace Windows Phone et d&rsquo;afficher les r&eacute;sultats de recherche en fonction des termes sp&eacute;cifi&eacute;s.</p>
</td>
</tr>
<tr>
<td valign="top">
<p><a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks.mediaplayerlauncher(v=VS.92).aspx">MediaPlayerLauncher</a></p>
</td>
<td valign="top">
<p>Autorise une application &agrave; lancer le lecteur m&eacute;dia.</p>
</td>
</tr>
<tr>
<td valign="top">
<p><a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks.phonecalltask(v=VS.92).aspx">PhoneCallTask</a></p>
</td>
<td valign="top">
<p>Autorise une application &agrave; lancer l'application Phone. Utilisez cette option pour permettre aux utilisateurs d&rsquo;effectuer un appel t&eacute;l&eacute;phonique &agrave; partir de votre application.</p>
</td>
</tr>
<tr>
<td valign="top">
<p><a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks.searchtask(v=VS.92).aspx">SearchTask</a></p>
</td>
<td valign="top">
<p>Autorise une application &agrave; lancer l&rsquo;application de recherche sur internet.</p>
</td>
</tr>
<tr>
<td valign="top">
<p><a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks.smscomposetask(v=VS.92).aspx">SmsComposeTask</a></p>
</td>
<td valign="top">
<p>Autorise une application &agrave; lancer l'application de messagerie. L'application de messagerie commence un nouveau message SMS.</p>
</td>
</tr>
<tr>
<td valign="top">
<p><a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks.webbrowsertask(v=VS.92).aspx">WebBrowserTask</a></p>
</td>
<td valign="top">
<p>Autorise une application &agrave; lancer le navigateur internet</p>
</td>
</tr>
</tbody>
</table>
<p>L'exemple suivant montre comment utiliser le Launcher <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks.phonecalltask(v=VS.92).aspx">PhoneCallTask</a></span> ​​pour faire apparaitre le num&eacute;roteur t&eacute;l&eacute;phonique de l'appareil. Une interface utilisateur de base est cr&eacute;&eacute;e, et poss&egrave;de un <span style="text-decoration: underline;">Button</span> pour appeler le Launcher.</p>
<p><strong>XAML <br /></strong></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:f773975d-212d-435f-8107-2854da243632" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;">
<li>&nbsp;</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Button</span><span style="color: #ff0000;"> Name</span><span style="color: #0000ff;">="ButtonDialer"</span></li>
<li><span style="color: #ff0000;">Content</span><span style="color: #0000ff;">="Place Call"</span></li>
<li style="background: #f3f3f3;"><span style="color: #ff0000;">Height</span><span style="color: #0000ff;">="100"</span><span style="color: #ff0000;"> Width</span><span style="color: #0000ff;">="200"</span></li>
<li><span style="color: #ff0000;">Click</span><span style="color: #0000ff;">="</span><span style="color: #ff0000;">ButtonDialer_Click</span><span style="color: #0000ff;">" /&gt;</span></li>
</ol></div>
</div>
</div>
<p>L'image suivante montre un exemple d'application fonctionnant dans l'&eacute;mulateur Windows Phone.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/3108.image_21A470F1.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/3108.image_5F00_21A470F1.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/7713.image_thumb_4510EF89.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/7713.image_5F00_thumb_5F00_4510EF89.png" width="273" height="495" /></a></p>
<p>Par la suite, un objet <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks.phonecalltask(v=VS.92).aspx">PhoneCallTask</a></span> est instanci&eacute; et les propri&eacute;t&eacute;s <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks.phonecalltask.phonenumber(v=VS.92).aspx">DisplayName</a></span> et <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks.phonecalltask.phonenumber(v=VS.92).aspx">PhoneNumber</a></span> sont d&eacute;finies. Enfin, la m&eacute;thode <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks.phonecalltask.show(v=VS.92).aspx">Show</a></span> est appel&eacute;e pour d&eacute;marrer le Launcher.</p>
<p><strong>C# <br /></strong></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:df0de7a6-8afa-4dbb-8854-782e89d18f50" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">private</span> <span style="color: #0000ff;">void</span> ButtonDialer_Click(<span style="color: #0000ff;">object</span> sender, RoutedEventArgs e)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">// The launcher.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PhoneCallTask phoneCallTask = <span style="color: #0000ff;">new</span> PhoneCallTask();</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">// Contact information to pass to the phone dialer application.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;phoneCallTask.PhoneNumber = <span style="color: #a31515;">"(555)-555-5555"</span>;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;phoneCallTask.DisplayName = <span style="color: #a31515;">"Fred"</span>;</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">// Launches the phone dialer application.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;phoneCallTask.Show();</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
</ol></div>
</div>
</div>
<p><strong>Visual Basic <br /></strong></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:34c4ec27-60ec-45b4-b772-482de990c3ff" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> ButtonDialer_Click(sender <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Object</span>, e <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">RoutedEventArgs</span>)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">' The launcher.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Dim</span> phoneCallTask <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">New</span> PhoneCallTask()</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">' Contact information to pass to the phone dialer application.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;phoneCallTask.PhoneNumber = <span style="color: #a31515;">"(555)-555-5555"</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;phoneCallTask.DisplayName = <span style="color: #a31515;">"Fred"</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">' Launches the phone dialer application.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;phoneCallTask.Show()</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></li>
</ol></div>
</div>
</div>
<p>Apr&egrave;s que la m&eacute;thode <span style="text-decoration: underline;">Show</span> soit appel&eacute;e, l'utilisateur est invit&eacute; &agrave; passer l'appel ou non. L'image suivante montre un exemple d'application fonctionnant dans l'&eacute;mulateur Windows Phone.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/5165.image4_0F4B8462.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/5165.image4_5F00_0F4B8462.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/5340.image4_thumb_449496C7.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/5340.image4_5F00_thumb_5F00_449496C7.png" width="265" height="479" /></a></p>
<p>Si l'utilisateur accepte de passer l'appel, l'application t&eacute;l&eacute;phone est lanc&eacute;e et le num&eacute;ro de t&eacute;l&eacute;phone est compos&eacute;. Les images suivantes montrent un exemple d'application fonctionnant dans l'&eacute;mulateur Windows Phone.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/6735.image9_79DDA92C.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/6735.image9_5F00_79DDA92C.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/8308.image9_thumb_6AE65445.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/8308.image9_5F00_thumb_5F00_6AE65445.png" width="268" height="484" /></a></p>
<p>L'exemple suivant montre comment utiliser le Launcher <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks.searchtask(v=VS.92).aspx">SearchTask</a></span> pour effectuer une recherche sur Internet &agrave; partir de votre application.</p>
<p>Une interface utilisateur de base est cr&eacute;&eacute;e et poss&egrave;de un <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.button(VS.95).aspx">Button</a></span> pour appeler le Launcher.</p>
<p><b>XAML</b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:1eaa6f99-b7ca-4f5f-9ccc-c3d017e2036d" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Button</span><span style="color: #ff0000;"> Name</span><span style="color: #0000ff;">="ButtonSearch"</span></li>
<li style="background: #f3f3f3;"><span style="color: #ff0000;">Height</span><span style="color: #0000ff;">="100"</span><span style="color: #ff0000;"> Width</span><span style="color: #0000ff;">="250"</span></li>
<li><span style="color: #ff0000;">Content</span><span style="color: #0000ff;">="Search"</span></li>
<li style="background: #f3f3f3;"><span style="color: #ff0000;">Click</span><span style="color: #0000ff;">="</span><span style="color: #ff0000;">ButtonSearch_Click</span><span style="color: #0000ff;">" /&gt;</span></li>
</ol></div>
</div>
</div>
<p>L'image suivante montre un exemple d'application fonctionnant dans l'&eacute;mulateur Windows Phone.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/0572.image14_40B6A65D.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/0572.image14_5F00_40B6A65D.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/2133.image14_thumb_5D03E87D.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/2133.image14_5F00_thumb_5F00_5D03E87D.png" width="302" height="545" /></a></p>
<p>Ensuite, un <span style="text-decoration: underline;">SearchTask</span> est instanci&eacute; et la propri&eacute;t&eacute; <span style="text-decoration: underline;">SearchQuery</span> est d&eacute;finie sur "Silverlight Windows Phone". Enfin, la m&eacute;thode <span style="text-decoration: underline;">Show</span> est appel&eacute;e pour d&eacute;marrer l'application.</p>
<p><b>C# <br /></b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:41afa367-e43c-4d22-a519-af862b7efffa" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">private</span> <span style="color: #0000ff;">void</span> ButtonSearch_Click(<span style="color: #0000ff;">object</span> sender, RoutedEventArgs e)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">// The launcher.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;searchTask searchTask = <span style="color: #0000ff;">new</span> SearchTask();</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">// Set the Search query</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;searchTask.<span style="color: #ff0000;">SearchQuery</span> = <span style="color: #a31515;">"Silverlight Windows Phone"</span>;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">// Launches the phone Search application.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;searchTask.<span style="color: #ff0000;">Show</span>();</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
</ol></div>
</div>
</div>
<p><strong>Visual Basic <br /></strong></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:e6dbd1f5-5cae-4b6e-a789-2fa620fcb51a" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> ButtonSearch_Click(sender <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Object</span>, e <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">RoutedEventArgs</span>)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">' The launcher.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Dim</span> searchTask <span style="color: #0000ff;">As</span> searchTask = <span style="color: #0000ff;">New</span> SearchTask()</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">' Set the Search query</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;searchTask.SearchQuery = <span style="color: #a31515;">"Silverlight Windows Phone"</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">' Launches the phone Search application.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;searchTask.Show()</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></li>
</ol></div>
</div>
</div>
<p>Apr&egrave;s que la m&eacute;thode <span style="text-decoration: underline;">Show</span> soit appel&eacute;e, l'utilisateur est invit&eacute; par une bo&icirc;te de dialogue s&rsquo;il souhaite autoriser la recherche &agrave; s&rsquo;effectuer. L'image suivante montre la page de confidentialit&eacute; concernant la recherche.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/4670.image19_403A4D9B.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/4670.image19_5F00_403A4D9B.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/1033.image19_thumb_27E73380.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/1033.image19_5F00_thumb_5F00_27E73380.png" width="317" height="572" /></a></p>
<p>Si l'utilisateur accepte la d&eacute;claration de confidentialit&eacute;, la recherche est ex&eacute;cut&eacute;e et les r&eacute;sultats de recherche sont affich&eacute;s. Les images suivantes montrent un exemple d'application fonctionnant dans l'&eacute;mulateur Windows Phone.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/4670.image24_11D0A221.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/4670.image24_5F00_11D0A221.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/6330.image24_thumb_14B5E107.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/6330.image24_5F00_thumb_5F00_14B5E107.png" width="306" height="553" /></a></p>
<p><a name="using_choosers"></a></p>
<h2>Utilisation des Choosers</h2>
<p>L&rsquo;utilisation des Choosers est tr&egrave;s similaire &agrave; celle des Launchers. La principale diff&eacute;rence est le retour des valeurs des Choosers au travers de l'&eacute;v&egrave;nement <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/ff707989(v=VS.92).aspx">Completed</a></span>. Pour utiliser un Chooser, effectuez les &eacute;tapes suivantes:</p>
<ol>
<li>Cr&eacute;ez une instance de la classe Chooser</li>
<li>Ajoutez un gestionnaire d&rsquo;&eacute;v&egrave;nement sur l&rsquo;&eacute;v&egrave;nement <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/ff707989(v=VS.92).aspx">Completed</a></span></li>
<li>D&eacute;finissez les propri&eacute;t&eacute;s de l&rsquo;objet Chooser.</li>
<li>Appelez la m&eacute;thode <b>Show</b>.</li>
<li>R&eacute;cup&eacute;rez la valeur de retour de l&rsquo;application Chooser dans le gestionnaire d&rsquo;&eacute;v&egrave;nement <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/ff707989(v=VS.92).aspx">Completed</a></span>.</li>
</ol>
<p>Par exemple, pour utiliser le Chooser de photos, vous devrez cr&eacute;er une instance de la classe <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks.photochoosertask(v=VS.92).aspx">PhotoChooserTask</a></span>, ajouter un gestionnaire d'&eacute;v&egrave;nement &agrave; l&rsquo;&eacute;v&egrave;nement <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/ff707989(v=VS.92).aspx">Completed</a></span>, appeler la m&eacute;thode Show, puis dans le gestionnaire <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/ff707989(v=VS.92).aspx">Completed</a></span>, si le <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks.taskeventargs.taskresult(v=VS.92).aspx">TaskResult</a></span> est OK, r&eacute;cup&eacute;rer les donn&eacute;es de l&rsquo;image &agrave; partir la propri&eacute;t&eacute; <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks.photoresult.chosenphoto(v=VS.92).aspx">ChosenPhoto</a></span> des arguments de l&rsquo;&eacute;v&egrave;nement.</p>
<p>Le tableau suivant &eacute;num&egrave;re les diff&eacute;rents Choosers qui sont disponibles:</p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<p>Launcher</p>
</td>
<td>
<p>Description</p>
</td>
</tr>
<tr>
<td valign="top">
<p><a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks.cameracapturetask(v=VS.92).aspx">CameraCaptureTask</a></p>
</td>
<td valign="top">
<p>Autorise une application &agrave; lancer l&rsquo;application Camera. Utilisez cette classe pour permettre aux utilisateurs de prendre une photo &agrave; partir de votre application.</p>
</td>
</tr>
<tr>
<td valign="top">
<p><a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks.emailaddresschoosertask(v=VS.92).aspx">EmailAddressChooserTask</a></p>
</td>
<td valign="top">
<p>Autorise une application &agrave; lancer l&rsquo;application Contacts. Utilisez cette classe pour obtenir l&rsquo;adresse email d&rsquo;un contact s&eacute;lectionn&eacute; par un utilisateur.</p>
</td>
</tr>
<tr>
<td valign="top">
<p><a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks.phonenumberchoosertask(v=VS.92).aspx">PhoneNumberChooserTask</a></p>
</td>
<td valign="top">
<p>Autorise une application &agrave; lancer l&rsquo;application Contacts. Utiliser cette classe pour obtenir le num&eacute;ro de t&eacute;l&eacute;phone d&rsquo;un contact s&eacute;lectionn&eacute; par l&rsquo;utilisateur.</p>
</td>
</tr>
<tr>
<td valign="top">
<p><a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks.photochoosertask(v=VS.92).aspx">PhotoChooserTask</a></p>
</td>
<td valign="top">
<p>Autorise une application &agrave; lancer l&rsquo;application Photo Chooser. Utilisez cette classe pour permettre aux utilisateurs de s&eacute;lectionner une photo.</p>
</td>
</tr>
<tr>
<td valign="top">
<p><a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks.saveemailaddresstask(v=VS.92).aspx">SaveEmailAddressTask</a></p>
</td>
<td valign="top">
<p>Autorise une application &agrave; lancer l&rsquo;application Contacts. Utilisez cette classe pour permettre aux utilisateurs de sauvegarder une adresse email &agrave; partir de votre application pour un contact nouveau ou existant.</p>
</td>
</tr>
<tr>
<td valign="top">
<p><a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks.savephonenumbertask(v=VS.92).aspx">SavePhoneNumberTask</a></p>
</td>
<td valign="top">
<p>Autorise une application &agrave; lancer l&rsquo;application Contacts. Utilisez cette classe pour autoriser les utilisateurs &agrave; sauvegarder un num&eacute;ro de t&eacute;l&eacute;phone &agrave; partir de votre application pour un contact nouveau ou existant.</p>
</td>
</tr>
</tbody>
</table>
<p>L'exemple suivant montre comment utiliser le Chooser <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks.phonenumberchoosertask(v=VS.92).aspx">PhoneNumberChooserTask</a></span> pour choisir un num&eacute;ro de t&eacute;l&eacute;phone de l'un de ses contacts. Une interface utilisateur de base est cr&eacute;&eacute;e et poss&egrave;de un <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.button(VS.95).aspx">Button</a></span> pour appeler le Chooser et d&rsquo;un <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.textblock(VS.95).aspx">TextBlock</a></span> pour afficher le r&eacute;sultat.</p>
<p><b>XAML <br /></b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:fb89700c-bf1b-4366-8605-32c7323619cf" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;">
<li><span style="color: #a31515;"></span><span style="color: #008000;">&lt;!--ContentPanel - place additional content here--&gt;</span></li>
<li style="background: #f3f3f3;"><span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">StackPanel</span><span style="color: #0000ff;">&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Button</span><span style="color: #ff0000;"> Name</span><span style="color: #0000ff;">="ButtonChooser"</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> Height</span><span style="color: #0000ff;">="150"</span><span style="color: #ff0000;"> Width</span><span style="color: #0000ff;">="275"</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> Content</span><span style="color: #0000ff;">="Get Phone Number"</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> Click</span><span style="color: #0000ff;">="</span><span style="color: #ff0000;">ButtonChooser_Click</span><span style="color: #0000ff;">"/&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">TextBlock</span><span style="color: #ff0000;"> Name</span><span style="color: #0000ff;">="txtPhoneNumber"</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> Margin</span><span style="color: #0000ff;">="10"</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> FontSize</span><span style="color: #0000ff;">="28"</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> Text</span><span style="color: #0000ff;">="Phone Number: " /&gt;</span></li>
<li><span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">StackPanel</span><span style="color: #0000ff;">&gt;</span></li>
</ol></div>
</div>
</div>
<p>L&rsquo;image suivante montre un exemple d&rsquo;application fonctionnant dans l&rsquo;&eacute;mulateur Windows Phone.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/8867.image29_5045C9FA.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/8867.image29_5F00_5045C9FA.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/4572.image29_thumb_77BC9664.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/4572.image29_5F00_thumb_5F00_77BC9664.png" width="298" height="538" /></a></p>
<p>Une instance globale de la classe <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks.phonenumberchoosertask(v=VS.92).aspx">PhoneNumberChooserTask</a></span> est d&eacute;finie. Dans le constructeur de la classe public, le <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks.phonenumberchoosertask(v=VS.92).aspx">PhoneNumberChooserTask</a>&nbsp;</span>est instanci&eacute;. Un gestionnaire d'&eacute;v&eacute;nement nomm&eacute; <b>numberChooser_Completed</b> est cr&eacute;&eacute; pour g&eacute;rer l'&eacute;v&eacute;nement <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/ff707989(v=VS.92).aspx">Completed</a></span>. Enfin, la m&eacute;thode <a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks.phonenumberchoosertask.show(v=VS.92).aspx">Show</a> est appel&eacute;e pour d&eacute;marrer l'application.</p>
<p>Dans le gestionnaire d'&eacute;v&eacute;nement <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/ff707989(v=VS.92).aspx">Completed</a></span>, la propri&eacute;t&eacute; <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks.taskeventargs.taskresult(v=VS.92).aspx">TaskResult</a></span> sur ​ <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks.phonenumberresult(v=VS.92).aspx">PhoneNumberResult</a></span> est v&eacute;rifi&eacute;e. Si le <span style="text-decoration: underline;">TaskResult</span> est OK, la propri&eacute;t&eacute; <span style="text-decoration: underline;">Text</span> sur le <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.textblock(VS.95).aspx">TextBlock</a></span> est d&eacute;finie &agrave; la valeur de la propri&eacute;t&eacute; <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks.phonenumberresult.phonenumber(v=VS.92).aspx">PhoneNumber</a></span> de l'objet <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks.phonenumberresult(v=VS.92).aspx">PhoneNumberResult</a></span>.</p>
<p><strong>C# <br /></strong></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:9a8f1ea2-7e29-4104-8fb9-e4ae380a2ea3" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">partial</span> <span style="color: #0000ff;">class</span> <span style="color: #2b91af;">MainPage</span> : PhoneApplicationPage</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PhoneNumberChooserTask numberChooser;</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">// Constructor</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">public</span> MainPage()</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InitializeComponent();</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;numberChooser = <span style="color: #0000ff;">new</span> PhoneNumberChooserTask();</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;numberChooser.Completed += <span style="color: #0000ff;">new</span> <span style="color: #2b91af;">EventHandler</span>&lt;PhoneNumberResult&gt;(numberChooser_Completed);</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">void</span> numberChooser_Completed(<span style="color: #0000ff;">object</span> sender, PhoneNumberResult e)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">// Check if TaskResult is a success</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">if</span> (e.TaskResult == TaskResult.OK)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">// Display the phone number in the TextBlock txtPhoneNumber</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;">txtPhoneNumber</span>.Text += e.PhoneNumber;</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">private</span> <span style="color: #0000ff;">void</span> ButtonChooser_Click(<span style="color: #0000ff;">object</span> sender, RoutedEventArgs e)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">try</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">// Start the Chooser.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;numberChooser.Show();</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">catch</span> (System.<span style="color: #2b91af;">InvalidOperationException</span> ex)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">// Catch the exception, but no handling is necessary.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;}</li>
</ol></div>
</div>
</div>
<p><strong>Visual Basic <br /></strong></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:9ee385fb-b237-4eb1-8d00-1284ddea6497" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">Partial</span> <span style="color: #0000ff;">Public</span> <span style="color: #0000ff;">Class</span> <span style="color: #2b91af;">MainPage</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Inherits</span> PhoneApplicationPage</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Private</span> numberChooser <span style="color: #0000ff;">As</span> PhoneNumberChooserTask</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">' Constructor</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Public</span> <span style="color: #0000ff;">Sub</span> <span style="color: #0000ff;">New</span>()</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InitializeComponent()</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;numberChooser = <span style="color: #0000ff;">New</span> PhoneNumberChooserTask()</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;numberChooser.Completed += <span style="color: #0000ff;">New</span> EventHandler(<span style="color: #0000ff;">Of</span> PhoneNumberResult)(<span style="color: #0000ff;">AddressOf</span> numberChooser_Completed)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> numberChooser_Completed(sender <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Object</span>, e <span style="color: #0000ff;">As</span> PhoneNumberResult)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">' Check if TaskResult is a success</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">If</span> e.TaskResult = TaskResult.OK <span style="color: #0000ff;">Then</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">' Display the phone number in the TextBlock txtPhoneNumber</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtPhoneNumber.Text += e.PhoneNumber</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> ButtonChooser_Click(sender <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Object</span>, e <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">RoutedEventArgs</span>)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Try</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">' Start the Chooser.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;numberChooser.Show()</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">' Catch the exception, but no handling is necessary.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Catch</span> ex <span style="color: #0000ff;">As</span> System.<span style="color: #2b91af;">InvalidOperationException</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Try</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></li>
<li><span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Class</span></li>
</ol></div>
</div>
</div>
<p>L&rsquo;image suivante montre le Chooser PhoneNumber en ex&eacute;cution dans l&rsquo;&eacute;mulateur Windows Phone.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/3000.image34_01C111C3.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/3000.image34_5F00_01C111C3.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/0844.image34_thumb_24552A71.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/0844.image34_5F00_thumb_5F00_24552A71.png" width="306" height="553" /></a></p>
<p>Apr&egrave;s que l'utilisateur ait s&eacute;lectionn&eacute; le contact pour obtenir le num&eacute;ro de t&eacute;l&eacute;phone, le num&eacute;ro est affich&eacute;. Les images suivantes montrent l'application apr&egrave;s qu&rsquo;un contact soit s&eacute;lectionn&eacute;.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/6305.image39_383E973A.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/6305.image39_5F00_383E973A.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/7317.image39_thumb_229438D0.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/7317.image39_5F00_thumb_5F00_229438D0.png" width="307" height="555" /></a></p>
<p><strong>Voir aussi <br /></strong></p>
<ul>
<li><a href="http://msdn.microsoft.com/en-us/library/ff769542(VS.92).aspx">Vue d&rsquo;ensemble sur les Launchers et les Choosers pour Windows Phone</a></li>
<li><a href="http://msdn.microsoft.com/en-us/library/ff769557(v=VS.92).aspx">Mod&egrave;le d&rsquo;ex&eacute;cution pour Windows Phone</a></li>
<li><a href="http://msdn.microsoft.com/en-us/library/ff955600(v=VS.92).aspx">Le support des Launchers et des Choosers dans l&rsquo;&eacute;mulateur Windows Phone </a></li>
<li><a href="http://msdn.microsoft.com/en-us/library/ff769550(v=VS.92).aspx">Comment utiliser les Launchers pour Windows Phone</a></li>
<li><a href="http://msdn.microsoft.com/en-us/library/ff769543(v=VS.92).aspx">Comment utiliser les Choosers pour Windows Phone</a></li>
</ul>]]></content:encoded>
    </item>
    <item>
      <title>Developpement Windows Phone - partie 21</title>
      <link>https://docs.microsoft.com/archive/blogs/patrick_payet/developpement-windows-phone-partie-21</link>
      <pubDate>Tue, 06 Sep 2011 13:21:00 GMT</pubDate>
      <dc:creator><![CDATA[papayet]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/patrick_payet/2011/09/06/developpement-windows-phone-partie-21/</guid>
      <description><![CDATA[L&rsquo;Isolated Storage
Cet article fait partie d&rsquo;une s&eacute;rie d&rsquo;articles sur le...]]></description>
      <content:encoded><![CDATA[<h1>L&rsquo;Isolated Storage</h1>
<p>Cet article fait partie d&rsquo;une s&eacute;rie d&rsquo;articles sur le d&eacute;veloppement Windows Phone. Il s&rsquo;agit d&rsquo;une traduction des articles se trouvant <a href="http://create.msdn.com/en-us/education/quickstarts" target="_blank">sur la MSDN</a>.</p>
<h2><a name="sommaire"></a>Sommaire</h2>
<p><strong>Bien d&eacute;buter et fondamentaux</strong></p>
<ul>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-1.aspx" target="_blank">Bien d&eacute;marrer (Hello World)</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-2.aspx" target="_blank">Cr&eacute;er une interface utilisateur pour Windows Phone en XAML</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-3.aspx" target="_blank">Utiliser des contr&ocirc;les</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-4.aspx" target="_blank">Types de contr&ocirc;les</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-5.aspx" target="_blank">Contr&ocirc;les Panorama et Pivot</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-6.aspx" target="_blank">Travailler avec du texte sur le Windows Phone</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-7.aspx" target="_blank">Mise en page sur l&rsquo;&eacute;cran</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-8.aspx" target="_blank">Orientations de l&rsquo;&eacute;cran</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-9.aspx" target="_blank">Saisie tactile</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-10.aspx" target="_blank">Navigation</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-11.aspx" target="_blank">Ex&eacute;cuter votre application en arri&egrave;re-plan (tombstoning)</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-12.aspx" target="_blank">Notifications Push pour le d&eacute;veloppement Windows Phone</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-13.aspx" target="_blank">Publier votre application sur le Marketplace</a></li>
</ul>
<p><strong>Visuels et m&eacute;dia</strong></p>
<ul>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-14.aspx" target="_blank">Images</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-15.aspx" target="_blank">Animations</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-16.aspx" target="_blank">Vid&eacute;o et Audio</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-17.aspx" target="_blank">Graphiques</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-18.aspx" target="_blank">Pinceaux</a></li>
</ul>
<p><strong>Travailler avec les donn&eacute;es</strong></p>
<ul>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-19.aspx" target="_blank">Obtenir des donn&eacute;es dans vos applications Windows Phone</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-20.aspx" target="_blank">Data binding</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-21.aspx" target="_blank">Isolated storage</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-22.aspx" target="_blank">Acc&eacute;der &agrave; un service Web REST</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-23.aspx" target="_blank">Consommer des donn&eacute;es Windows Azure</a></li>
</ul>
<p><strong>Sondes et autres fonctionnalit&eacute;s sp&eacute;cifiques au t&eacute;l&eacute;phone</strong></p>
<ul>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-24.aspx" target="_blank">Lanceurs et choosers</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-25.aspx" target="_blank">D&eacute;tecter des mouvements (acc&eacute;l&eacute;rom&egrave;tres)</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-26.aspx" target="_blank">D&eacute;velopper avec le GPS Windows Phone (Services de localisation)</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-27.aspx" target="_blank">D&eacute;velopper avec l&rsquo;appareil photo du Windows Phone</a></li>
</ul>
<hr />
<h1>L&rsquo;Isolated Storage</h1>
<p>Dans Silverlight pour Windows Phone 7, il n&rsquo;y a pas d&rsquo;acc&egrave;s direct au syst&egrave;me de fichier sur le p&eacute;riph&eacute;rique. Cela signifie que vous ne pouvez pas sauvegarder ou acc&eacute;der aux donn&eacute;es n&rsquo;importe o&ugrave;. Toutefois, Silverlight fournit pour chaque application un m&eacute;canisme de sauvegarde et d&rsquo;acc&egrave;s aux donn&eacute;es &agrave; une zone sp&eacute;cifique auquelle seule l&rsquo;application peut acc&eacute;der. Cet acc&egrave;s IO est appel&eacute; l&rsquo;Isolated Storage, et vous pouvez l&rsquo;utiliser pour enregistrer et r&eacute;cup&eacute;rer des donn&eacute;es localement sur votre appareil Windows Phone.</p>
<p>Ce tutoriel montre comment utiliser l&rsquo;Isolated Storage sur un p&eacute;riph&eacute;rique Windows Phone</p>
<p>Ce tutoriel contient les sections suivantes:</p>
<ul>
<li><span style="text-decoration: underline;"><a href="#introduction">Introduction &agrave; l&rsquo;Isolated Storage</a> </span></li>
<li><a href="#key_value_pairs">Travailler avec des paires cl&eacute;s / valeurs</a></li>
<li><a href="#files">Travailler avec des fichiers</a></li>
</ul>
<p><a name="introduction"></a></p>
<h2>Introduction &agrave; l&rsquo;Isolated Storage</h2>
<p>L&rsquo;Isolated Storage cr&eacute;e un syst&egrave;me de fichiers virtuel auquel seule l&rsquo;application associ&eacute;e peut avoir acc&egrave;s. Cela signifie qu&rsquo;une application peut sauvegarder et r&eacute;cup&eacute;rer des donn&eacute;es dans son Isolated Storage, mais elle ne peut pas acc&eacute;der aux donn&eacute;es d&rsquo;autres Isolated Storage appartenant &agrave; d&rsquo;autres applications.</p>
<p>L&rsquo;Isolated Storage est constitu&eacute; d&rsquo;un ou de plusieurs fichiers de stockage, appel&eacute;s magasins, qui contiennent l&rsquo;emplacement du r&eacute;pertoire courant o&ugrave; les donn&eacute;es sont stock&eacute;es.</p>
<p>Il y a deux fa&ccedil;ons d&rsquo;utiliser l&rsquo;Isolated Storage. La premi&egrave;re fa&ccedil;on et la plus simple est de sauvegarder ou de r&eacute;cup&eacute;rer les donn&eacute;es comme paire cl&eacute;/valeur &agrave; partir d&rsquo;un dictionnaire en utilisant la classe <span style="text-decoration: underline;"><a href="http://go.microsoft.com/fwlink/?LinkId=129990">IsolatedStorageSettings</a></span>. La deuxi&egrave;me fa&ccedil;on est de sauvegarder ou r&eacute;cup&eacute;rer des fichiers en utilisant la classe <span style="text-decoration: underline;">IsolatedStorage</span>. Les classes <span style="text-decoration: underline;"><a href="http://go.microsoft.com/fwlink/?LinkId=129990">IsolatedStorageSettings</a>&nbsp;</span>et <span style="text-decoration: underline;"><a href="http://go.microsoft.com/fwlink/?LinkId=129992">IsolatedStorageFile</a></span> sont situ&eacute;es dans le namespace <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/system.io.isolatedstorage(VS.95).aspx">System.IO.IsolatedStorage</a></span>, vous ajouterez donc une directive <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/sf0df423.aspx">using</a></span> pour ce namespace. <br /><br /></p>
<p><a name="key_value_pairs"></a></p>
<h2>Travailler avec des paires cl&eacute;/valeur</h2>
<p>Pour sauvegarder ou r&eacute;cup&eacute;rer des donn&eacute;es comme paires cl&eacute;/valeur, vous utilisez la classe <span style="text-decoration: underline;"><a href="http://go.microsoft.com/fwlink/?LinkId=129990">IsolatedStorageSettings</a></span>. Cette classe est un dictionnaire qui vous permet de stocker des objets, telles que des cha&icirc;nes de caract&egrave;res (String). Celle-ci est id&eacute;alement adapt&eacute;e pour sauvegarder des &laquo; morceaux de donn&eacute;es &raquo;, tels que les param&egrave;tres des applications, dont vous avez besoin au d&eacute;marrage et &agrave; la sortie de l&rsquo;application. Les deux sc&eacute;narios o&ugrave; cela est commun sont lorsqu&rsquo;une application est d&eacute;marr&eacute;e ou arr&ecirc;t&eacute;e par l&rsquo;utilisateur, et lorsqu&rsquo;une application est &laquo; tombston&eacute;e &raquo; (soit d&eacute;sactiv&eacute;e). Pour plus d&rsquo;informations sur le tombstoning, voir l&rsquo;article MSDN <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/ff817008(v=VS.92).aspx">sur l&rsquo;ensemble d&rsquo;ex&eacute;cution du mod&egrave;le pour Windows Phone</a></span></p>
<p>De mani&egrave;re g&eacute;n&eacute;rale, vous utiliserez les m&eacute;thodes suivantes de la classe <span style="text-decoration: underline;"><a href="http://go.microsoft.com/fwlink/?LinkId=129990">IsolatedStorageSettings</a></span>:</p>
<ul>
<li><a href="http://go.microsoft.com/fwlink/?LinkId=129996">Add</a>: Ajoute une entr&eacute;e dans le dictionnaire pour la paire cl&eacute; / valeur</li>
<li><a href="http://go.microsoft.com/fwlink/?LinkId=129997">Contains</a>: D&eacute;termine si le dictionnaire contient la cl&eacute; sp&eacute;cifi&eacute;e</li>
<li><a href="http://go.microsoft.com/fwlink/?LinkId=129999">Remove</a>: Supprime l&rsquo;entr&eacute;e avec la cl&eacute; sp&eacute;cifi&eacute;e.</li>
</ul>
<p>L&rsquo;image suivante montre un exemple d&rsquo;application qui ajoute, r&eacute;cup&egrave;re, et supprime une paire cl&eacute;/valeur de l&rsquo;IsolatedStorage.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/2766.image_2A29A7E7.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/2766.image_5F00_2A29A7E7.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/7534.image_thumb_0CF3DA10.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/7534.image_5F00_thumb_5F00_0CF3DA10.png" width="309" height="559" /></a></p>
<p>L'exemple suivant montre comment ajouter une paire cl&eacute; / valeur. Une instance de l&rsquo; <span style="text-decoration: underline;"><a href="http://go.microsoft.com/fwlink/?LinkId=129990">IsolatedStorageSettings</a>&nbsp;</span>est cr&eacute;&eacute;e &agrave; partir de la propri&eacute;t&eacute; <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/system.io.isolatedstorage.isolatedstoragesettings.applicationsettings(v=VS.95).aspx">ApplicationSettings</a></span>. Une cl&eacute; nomm&eacute;e &laquo;UserData&raquo; est cr&eacute;&eacute;e dans le dictionnaire. La valeur de &laquo;UserData&raquo; est affect&eacute;e &agrave; la propri&eacute;t&eacute; <span style="text-decoration: underline;">Text</span> d&rsquo;un <span style="text-decoration: underline;">TextBox</span>. Enfin, les param&egrave;tres sont enregistr&eacute;s en utilisant la m&eacute;thode <a href="http://msdn.microsoft.com/en-us/library/system.io.isolatedstorage.isolatedstoragesettings.save(v=VS.95).aspx">Save</a>.</p>
<p><b>C# <br /></b><b></b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:cd8cfe58-a5c2-4a3f-ab4a-61e30e7fc8a5" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">private</span> <span style="color: #0000ff;">void</span> btnSaveSetting_Click(<span style="color: #0000ff;">object</span> sender, RoutedEventArgs e)</li>
<li style="background: #f3f3f3;">{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;IsolatedStorageSettings settings = IsolatedStorageSettings.ApplicationSettings;</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">// txtInput is a TextBox defined in XAML.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">if</span> (!settings.Contains(<span style="color: #a31515;">"userData"</span>))</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;settings.Add(<span style="color: #a31515;">"userData"</span>, <span style="color: #ff0000;">txtInput</span>.Text);</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">else</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;settings[<span style="color: #a31515;">"userData"</span>] = <span style="color: #ff0000;">txtInput</span>.Text;</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;settings.Save();</li>
<li style="background: #f3f3f3;">}</li>
</ol></div>
</div>
</div>
<p>Visual Basic</p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:ea4c1eb4-40c5-49f3-a786-546dec5458f1" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> btnSaveSetting_Click(sender <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Object</span>, e <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">RoutedEventArgs</span>)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Dim</span> settings <span style="color: #0000ff;">As</span> IsolatedStorageSettings = IsolatedStorageSettings.ApplicationSettings</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">' txtInput is a TextBox defined in XAML.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">If</span> <span style="color: #0000ff;">Not</span> settings.Contains(<span style="color: #a31515;">"userData"</span>) <span style="color: #0000ff;">Then</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;settings.Add(<span style="color: #a31515;">"userData"</span>, txtInput.Text)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Else</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;settings(<span style="color: #a31515;">"userData"</span>) = txtInput.Text</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;settings.Save()</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></li>
</ol></div>
</div>
</div>
<p>L'exemple suivant montre comment r&eacute;cup&eacute;rer les donn&eacute;es d'une paire cl&eacute; / valeur. Cette donn&eacute;e est accessible directement &agrave; partir de la propri&eacute;t&eacute; <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/system.io.isolatedstorage.isolatedstoragesettings.applicationsettings(v=VS.95).aspx">ApplicationSettings</a></span>. La propri&eacute;t&eacute; <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.textblock.text(v=VS.95).aspx">Text</a></span> d'un <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.textblock(VS.95).aspx">TextBlock</a></span> est d&eacute;finie &agrave; la valeur de la cl&eacute; &laquo;UserData &raquo;.</p>
<p><b>C# <br /></b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:34d8f8f8-fc4d-427a-8e9b-945afda0ce3a" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">private</span> <span style="color: #0000ff;">void</span> btnDisplaySetting_Click(<span style="color: #0000ff;">object</span> sender, RoutedEventArgs e)</li>
<li style="background: #f3f3f3;">{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">// txtDisplay is a TextBlock defined in XAML.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;txtDisplay.Text = <span style="color: #a31515;">"USER DATA: "</span>;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">if</span> (IsolatedStorageSettings.ApplicationSettings.Contains(<span style="color: #a31515;">"userData"</span>))</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtDisplay.Text += IsolatedStorageSettings.ApplicationSettings[<span style="color: #a31515;">"userData"</span>] <span style="color: #0000ff;">as</span> <span style="color: #0000ff;">string</span>;</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>}</li>
</ol></div>
</div>
</div>
<p><strong>Visual Basic <br /></strong></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:0c12232d-913b-43db-96b0-73cbe25a7e27" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> btnDisplaySetting_Click(sender <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Object</span>, e <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">RoutedEventArgs</span>)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">' txtDisplay is a TextBlock defined in XAML.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;txtDisplay.Text = <span style="color: #a31515;">"USER DATA: "</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">If</span> IsolatedStorageSettings.ApplicationSettings.Contains(<span style="color: #a31515;">"userData"</span>) <span style="color: #0000ff;">Then</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;txtDisplay.Text += <span style="color: #0000ff;">TryCast</span>(IsolatedStorageSettings.ApplicationSettings(<span style="color: #a31515;">"userData"</span>), <span style="color: #0000ff;">String</span>)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span></li>
<li><span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></li>
</ol></div>
</div>
</div>
<p>L'exemple suivant montre comment supprimer une paire cl&eacute; / valeur. Cette donn&eacute;e est accessible directement &agrave; partir de la propri&eacute;t&eacute; <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/system.io.isolatedstorage.isolatedstoragesettings.applicationsettings(v=VS.95).aspx">ApplicationSettings</a></span>. La cl&eacute; &laquo;UserData" est retir&eacute;e du dictionnaire en utilisant la m&eacute;thode <span style="text-decoration: underline;"><a href="http://go.microsoft.com/fwlink/?LinkId=129999">Remove</a></span>.</p>
<p><b>C# <br /></b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:85ed856a-95b4-4ae7-a106-2cd2d91bdc77" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">private</span> <span style="color: #0000ff;">void</span> btnRemoveSetting_Click(<span style="color: #0000ff;">object</span> sender, RoutedEventArgs e)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">if</span>(IsolatedStorageSettings.ApplicationSettings.Contains(<span style="color: #a31515;">"userData"</span>))</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IsolatedStorageSettings.ApplicationSettings.Remove(<span style="color: #a31515;">"userData"</span>);</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
</ol></div>
</div>
</div>
<p><strong>Visual Basic</strong></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:79079b06-4165-4fbd-9f9f-a80c8cb64f7f" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> btnRemoveSetting_Click(sender <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Object</span>, e <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">RoutedEventArgs</span>)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">If</span> IsolatedStorageSettings.ApplicationSettings.Contains(<span style="color: #a31515;">"userData"</span>) <span style="color: #0000ff;">Then</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IsolatedStorageSettings.ApplicationSettings.Remove(<span style="color: #a31515;">"userData"</span>)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span></li>
<li><span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></li>
</ol></div>
</div>
</div>
<p><a name="files"></a></p>
<h2>Travailler avec les fichiers</h2>
<p>Pour sauvegarder ou r&eacute;cup&eacute;rer des fichiers, vous utiliserez la classe <span style="text-decoration: underline;"><a href="http://go.microsoft.com/fwlink/?LinkId=129992">IsolatedStorageFile</a></span>. Cette classe repr&eacute;sente une zone de stockage isol&eacute;e qui contient des fichiers et des r&eacute;pertoires. Lorsque vous travaillez avec des fichiers, vous utilisez g&eacute;n&eacute;ralement la classe <span style="text-decoration: underline;"><a href="http://go.microsoft.com/fwlink/?LinkId=130001">IsolatedStorageFileStream</a></span> pour lire et &eacute;crire le contenu dans le fichier. Vous utiliserez g&eacute;n&eacute;ralement les m&eacute;thodes suivantes de la classe <span style="text-decoration: underline;"><a href="http://go.microsoft.com/fwlink/?LinkId=129992">IsolatedStorageFile</a></span>:</p>
<ul>
<li><a href="http://go.microsoft.com/fwlink/?LinkId=130002">GetUserStoreForApplication</a>: Obtient l&rsquo;espace de stockage isol&eacute; de l&rsquo;utilisateur qui correspond &agrave; l'identit&eacute; de l&rsquo;application du code qui l&rsquo;appelle.</li>
<li><a href="http://go.microsoft.com/fwlink/?LinkId=130003">FileExists</a>: D&eacute;termine si le chemin sp&eacute;cifi&eacute; se r&eacute;f&egrave;re &agrave; un fichier existant dans le stockage isol&eacute;</li>
<li><a href="http://go.microsoft.com/fwlink/?LinkId=130004">CreateFile</a>: Cr&eacute;er un fichier dans le stockage isol&eacute;</li>
<li><a href="http://go.microsoft.com/fwlink/?LinkId=130005">OpenFile</a>: Ouvre un fichier &agrave; un emplacement sp&eacute;cifi&eacute; en utilisant le partage et les options d'acc&egrave;s d&eacute;finies. Cette m&eacute;thode retourne un objet <span style="text-decoration: underline;"><a href="http://go.microsoft.com/fwlink/?LinkId=130001">IsolatedStorageFileStream</a>&nbsp;</span>qui contient le flux du fichier.</li>
<li><a href="http://go.microsoft.com/fwlink/?LinkId=130006">DeleteFile</a>: Supprime un fichier dans le stockage isol&eacute;.</li>
<li><a href="http://go.microsoft.com/fwlink/?LinkId=130007">DirectoryExists</a>: D&eacute;termine si le chemin sp&eacute;cifi&eacute; se r&eacute;f&egrave;re &agrave; un r&eacute;pertoire existant dans le stockage isol&eacute;</li>
<li><a href="http://go.microsoft.com/fwlink/?LinkId=130008">CreateDirectory</a>: Cr&eacute;e un r&eacute;pertoire dans le stockage isol&eacute;.</li>
<li><a href="http://go.microsoft.com/fwlink/?LinkId=130009">DeleteDirectory</a>: Supprime un r&eacute;pertoire dans le stockage isol&eacute;.</li>
<li><a href="http://go.microsoft.com/fwlink/?LinkId=130010">Remove</a>: Supprime la port&eacute;e de l&rsquo;Isolated Storage et tout son contenu.</li>
</ul>
<p>Les instances des classes <span style="text-decoration: underline;"><a href="http://go.microsoft.com/fwlink/?LinkId=129992">IsolatedStorageFile</a></span> et <span style="text-decoration: underline;"><a href="http://go.microsoft.com/fwlink/?LinkId=130001">IsolatedStorageFileStream</a></span> doivent &ecirc;tre supprim&eacute;es apr&egrave;s leurs utilisations. La d&eacute;claration du &laquo; <span style="text-decoration: underline;">using</span> &raquo; le fait automatiquement pour vous et est une bonne pratique &agrave; utiliser.</p>
<p>L'exemple suivant cr&eacute;&eacute; une application qui enregistre et r&eacute;cup&egrave;re un fichier image dans l&rsquo;isolated storage. Cet exemple utilise la classe <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks.photochoosertask(VS.92).aspx">PhotoChooserTask</a></span> pour obtenir une image se situant dans la biblioth&egrave;que d&rsquo;images sur l'appareil. Ce tutoriel n&rsquo;ira pas dans les d&eacute;tails de l'utilisation du <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks.photochoosertask(VS.92).aspx">PhotoChooserTask</a></span>. Pour plus d'informations sur l'utilisation de <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.tasks.photochoosertask(VS.92).aspx">PhotoChooserTask</a></span>, voir l&rsquo;article MSDN sur <span style="text-decoration: underline;"><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-24.aspx">l&rsquo;aper&ccedil;u des Launcher et Choosers pour Windows Phone.</a></span></p>
<p>Le XAML suivant montre une interface utilisateur de base pour une application. Un <span style="text-decoration: underline;">Button</span> pour lancer le s&eacute;lecteur de photo et enregistrer le fichier image, un <span style="text-decoration: underline;">Button</span> pour r&eacute;cup&eacute;rer le fichier &agrave; partir de l&rsquo;isolated storage et l'afficher, et un objet <span style="text-decoration: underline;">Image</span> pour afficher le fichier image.</p>
<p><b>XAML</b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:7a415e1c-db00-47c6-a177-de3cc254e667" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;">
<li><span style="color: #a31515;"></span><span style="color: #008000;">&lt;!--ContentPanel - place additional content here--&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">StackPanel</span><span style="color: #ff0000;"> x</span><span style="color: #0000ff;">:</span><span style="color: #ff0000;">Name</span><span style="color: #0000ff;">="ContentPanel"</span><span style="color: #ff0000;"> Grid.Row</span><span style="color: #0000ff;">="1"</span><span style="color: #ff0000;"> Margin</span><span style="color: #0000ff;">="12,0,12,0"&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Button</span><span style="color: #ff0000;"> Name</span><span style="color: #0000ff;">="btnSaveFile"</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> Content</span><span style="color: #0000ff;">="Save Image"</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> Height</span><span style="color: #0000ff;">="100"</span><span style="color: #ff0000;"> Width</span><span style="color: #0000ff;">="300"</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> Click</span><span style="color: #0000ff;">="</span><span style="color: #ff0000;">btnSaveFile_Click</span><span style="color: #0000ff;">"/&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Button</span><span style="color: #ff0000;"> Name</span><span style="color: #0000ff;">="btnDisplayFile"</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> Content</span><span style="color: #0000ff;">="Display Saved Image"</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> Height</span><span style="color: #0000ff;">="100"</span><span style="color: #ff0000;"> Width</span><span style="color: #0000ff;">="300"</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> Click</span><span style="color: #0000ff;">="</span><span style="color: #ff0000;">btnDisplayFile_Click</span><span style="color: #0000ff;">"/&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Image</span><span style="color: #ff0000;"> Name</span><span style="color: #0000ff;">="userImage"</span><span style="color: #ff0000;"> Source</span><span style="color: #0000ff;">="Sl_Nebula.jpg" /&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">StackPanel</span><span style="color: #0000ff;">&gt;</span></li>
</ol></div>
</div>
</div>
<p>L&rsquo;image suivante montre l&rsquo;application en ex&eacute;cution dans l&rsquo;&eacute;mulateur Windows Phone.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/0268.image5_6FBE0C38.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/0268.image5_5F00_6FBE0C38.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/8512.image5_thumb_110D8C08.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/8512.image5_5F00_thumb_5F00_110D8C08.png" width="314" height="567" /></a></p>
<p>Le code suivant cr&eacute;&eacute; et d&eacute;marre le <span style="text-decoration: underline;">PhotoChooserTask</span> pour obtenir une image, puis l&rsquo;enregistrer dans l&rsquo;Isolated Storage. Apr&egrave;s que l&rsquo;image est &eacute;t&eacute; choisie, un r&eacute;pertoire nomm&eacute; images est cr&eacute;&eacute; s'il n'existe pas. Un objet <span style="text-decoration: underline;">IsolatedStorageFileStream</span> est cr&eacute;&eacute; pour stocker le fichier. La m&eacute;thode <span style="text-decoration: underline;">SaveJpeg</span> est utilis&eacute;e pour sauvegarder les donn&eacute;es de l&rsquo;image dans l'objet <span style="text-decoration: underline;">IsolatedStorageFileStream</span>.</p>
<p><b>C# <br /></b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:efe4b647-b08b-4d2d-83f2-0b8d2d1279b8" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">private</span> <span style="color: #0000ff;">void</span> SaveToFile(BitmapImage image)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">using</span> (<span style="color: #2b91af;">IsolatedStorageFile</span> store = <span style="color: #2b91af;">IsolatedStorageFile</span>.GetUserStoreForApplication())</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WriteableBitmap bmImage = <span style="color: #0000ff;">new</span> WriteableBitmap(image);</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">if</span> (!store.DirectoryExists(<span style="color: #a31515;">"Images"</span>))</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;store.CreateDirectory(<span style="color: #a31515;">"Images"</span>);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">using</span> (<span style="color: #2b91af;">IsolatedStorageFileStream</span> isoStream =</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;store.OpenFile(<span style="color: #a31515;">@"Images\userPhoto.jpg"</span>, <span style="color: #2b91af;">FileMode</span>.OpenOrCreate))</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Extensions.SaveJpeg(</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bmImage,</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;isoStream,</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bmImage.PixelWidth,</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bmImage.PixelHeight,</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0,</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;100);</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
</ol></div>
</div>
</div>
<p><strong>Visual Basic <br /></strong></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:a18e72bc-ea20-4bf0-aece-7edd78c96b04" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">Private</span> photoTask <span style="color: #0000ff;">As</span> PhotoChooserTask</li>
<li style="background: #f3f3f3;"><span style="color: #008000;">' Constructor</span></li>
<li><span style="color: #0000ff;">Public</span> <span style="color: #0000ff;">Sub</span> <span style="color: #0000ff;">New</span>()</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;InitializeComponent()</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;photoTask = <span style="color: #0000ff;">New</span> PhotoChooserTask()</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;photoTask.Completed += <span style="color: #0000ff;">New</span> EventHandler(<span style="color: #0000ff;">Of</span> PhotoResult)(<span style="color: #0000ff;">AddressOf</span> photoTask_Completed)</li>
<li><span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> photoTask_Completed(sender <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Object</span>, e <span style="color: #0000ff;">As</span> PhotoResult)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">If</span> e.TaskResult = TaskResult.OK <span style="color: #0000ff;">Then</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Dim</span> bmp <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">New</span> <span style="color: #2b91af;">BitmapImage</span>()</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bmp.SetSource(e.ChosenPhoto)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SaveToFile(bmp)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span></li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></li>
<li><span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> btnSaveFile_Click(sender <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Object</span>, e <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">RoutedEventArgs</span>)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;photoTask.Show()</li>
<li><span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> SaveToFile(image <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">BitmapImage</span>)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Using</span> store <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">IsolatedStorageFile</span> = <span style="color: #2b91af;">IsolatedStorageFile</span>.GetUserStoreForApplication()</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Dim</span> bmImage <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">New</span> <span style="color: #2b91af;">WriteableBitmap</span>(image)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">If</span> <span style="color: #0000ff;">Not</span> store.DirectoryExists(<span style="color: #a31515;">"Images"</span>) <span style="color: #0000ff;">Then</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;store.CreateDirectory(<span style="color: #a31515;">"Images"</span>)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Using</span> isoStream <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">IsolatedStorageFileStream</span> = store.OpenFile(<span style="color: #a31515;">"Images\userPhoto.jpg"</span>, <span style="color: #2b91af;">FileMode</span>.OpenOrCreate)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #2b91af;">Extensions</span>.SaveJpeg(bmImage, isoStream, bmImage.PixelWidth, bmImage.PixelHeight, 0, 100)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Using</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Using</span></li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></li>
</ol></div>
</div>
</div>
<p>L&rsquo;image suivante montre le s&eacute;lecteur d&rsquo;images sur le t&eacute;l&eacute;phone.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/8105.image10_5CC93CF4.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/8105.image10_5F00_5CC93CF4.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/3005.image10_thumb_5E69E2FB.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/3005.image10_5F00_thumb_5F00_5E69E2FB.png" width="279" height="504" /></a></p>
<p>Le code suivant r&eacute;cup&egrave;re le fichier image &agrave; partir de l&rsquo;Isolated Storage en utilisant la m&eacute;thode <span style="text-decoration: underline;">OpenFile</span>, et d&eacute;finit la propri&eacute;t&eacute; <span style="text-decoration: underline;">Source</span> d'un objet <span style="text-decoration: underline;">Image</span> pour cette image.</p>
<p><b>C# <br /></b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:b7b3b846-2cdd-4443-8afa-60c62c5c5c50" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">private</span> BitmapImage GetSavedImage()</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BitmapImage image;</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">using</span> (<span style="color: #2b91af;">IsolatedStorageFile</span> store =</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #2b91af;">IsolatedStorageFile</span>.GetUserStoreForApplication())</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">using</span> (<span style="color: #2b91af;">IsolatedStorageFileStream</span> isoStream =</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;store.OpenFile(<span style="color: #a31515;">@"Images\userPhoto.jpg"</span>, <span style="color: #2b91af;">FileMode</span>.Open))</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;image = <span style="color: #0000ff;">new</span> BitmapImage();</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;image.SetSource(isoStream);</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">return</span> image;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">private</span> <span style="color: #0000ff;">void</span> btnDisplayFile_Click(<span style="color: #0000ff;">object</span> sender, RoutedEventArgs e)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BitmapImage bitmap = GetSavedImage();</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">if</span> (bitmap != <span style="color: #0000ff;">null</span>)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">// userImage is defined in MainPage.xaml</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;">userImage</span>.Source = bitmap;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
</ol></div>
</div>
</div>
<p><strong>Visual Basic</strong></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:3a67dea5-3818-434b-b5b3-dbb033ec374b" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Function</span> GetSavedImage() <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">BitmapImage</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Dim</span> image <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">BitmapImage</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Using</span> store <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">IsolatedStorageFile</span> = <span style="color: #2b91af;">IsolatedStorageFile</span>.GetUserStoreForApplication()</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Using</span> isoStream <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">IsolatedStorageFileStream</span> = store.OpenFile(<span style="color: #a31515;">"Images\userPhoto.jpg"</span>, <span style="color: #2b91af;">FileMode</span>.Open)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;image = <span style="color: #0000ff;">New</span> <span style="color: #2b91af;">BitmapImage</span>()</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;image.SetSource(isoStream)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Using</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Using</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Return</span> image</li>
<li style="background: #f3f3f3;">&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Function</span></li>
<li>&nbsp;<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> btnDisplayFile_Click(sender <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Object</span>, e <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">RoutedEventArgs</span>)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Dim</span> bitmap <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">BitmapImage</span> = GetSavedImage()</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">If</span> bitmap <span style="color: #0000ff;">IsNot</span> <span style="color: #0000ff;">Nothing</span> <span style="color: #0000ff;">Then</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">' userImage is defined in MainPage.xaml</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;userImage.Source = bitmap</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span></li>
<li>&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></li>
</ol></div>
</div>
</div>
<p>L'image suivante montre l'application apr&egrave;s que l'objet <span style="text-decoration: underline;">Image</span> ai &eacute;t&eacute; mis &agrave; jour avec le fichier image r&eacute;cup&eacute;r&eacute; de l&rsquo;Isolated Storage.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/5140.image15_0BBB52FF.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/5140.image15_5F00_0BBB52FF.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/3225.image15_thumb_3A04B2DF.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/3225.image15_5F00_thumb_5F00_3A04B2DF.png" width="311" height="562" /></a></p>
<p><strong>Voir aussi</strong> <br /><br /></p>
<ul>
<li><a href="http://msdn.microsoft.com/en-us/library/ff402541(VS.92).aspx">La vue d&rsquo;ensemble sur l&rsquo;Isolated Storage pour Windows Phone</a></li>
<li><a href="http://msdn.microsoft.com/en-us/library/ff817008(v=VS.92).aspx">La vue d&rsquo;ensemble sur le mod&egrave;le d&rsquo;ex&eacute;cution pour Windows Phone</a></li>
<li><a href="http://go.microsoft.com/fwlink/?LinkId=129994">Isolated Storage</a></li>
<li><span style="text-decoration: underline;"><a href="http://go.microsoft.com/fwlink/?LinkId=130011">Le Namespace System.IO.IsolatedStorage</a> </span></li>
</ul>]]></content:encoded>
    </item>
    <item>
      <title>Developpement Windows Phone - partie 18</title>
      <link>https://docs.microsoft.com/archive/blogs/patrick_payet/developpement-windows-phone-partie-18</link>
      <pubDate>Tue, 06 Sep 2011 13:18:00 GMT</pubDate>
      <dc:creator><![CDATA[papayet]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/patrick_payet/2011/09/06/developpement-windows-phone-partie-18/</guid>
      <description><![CDATA[Les Pinceaux (Brushes)
Cet article fait partie d&rsquo;une s&eacute;rie d&rsquo;articles sur le...]]></description>
      <content:encoded><![CDATA[<h1>Les Pinceaux (Brushes)</h1>
<p>Cet article fait partie d&rsquo;une s&eacute;rie d&rsquo;articles sur le d&eacute;veloppement Windows Phone. Il s&rsquo;agit d&rsquo;une traduction des articles se trouvant <a href="http://create.msdn.com/en-us/education/quickstarts" target="_blank">sur la MSDN</a>.</p>
<h2><a name="sommaire"></a>Sommaire</h2>
<p><strong>Bien d&eacute;buter et fondamentaux</strong></p>
<ul>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-1.aspx" target="_blank">Bien d&eacute;marrer (Hello World)</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-2.aspx" target="_blank">Cr&eacute;er une interface utilisateur pour Windows Phone en XAML</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-3.aspx" target="_blank">Utiliser des contr&ocirc;les</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-4.aspx" target="_blank">Types de contr&ocirc;les</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-5.aspx" target="_blank">Contr&ocirc;les Panorama et Pivot</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-6.aspx" target="_blank">Travailler avec du texte sur le Windows Phone</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-7.aspx" target="_blank">Mise en page sur l&rsquo;&eacute;cran</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-8.aspx" target="_blank">Orientations de l&rsquo;&eacute;cran</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-9.aspx" target="_blank">Saisie tactile</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-10.aspx" target="_blank">Navigation</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-11.aspx" target="_blank">Ex&eacute;cuter votre application en arri&egrave;re-plan (tombstoning)</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-12.aspx" target="_blank">Notifications Push pour le d&eacute;veloppement Windows Phone</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-13.aspx" target="_blank">Publier votre application sur le Marketplace</a></li>
</ul>
<p><strong>Visuels et m&eacute;dia</strong></p>
<ul>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-14.aspx" target="_blank">Images</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-15.aspx" target="_blank">Animations</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-16.aspx" target="_blank">Vid&eacute;o et Audio</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-17.aspx" target="_blank">Graphiques</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-18.aspx" target="_blank">Pinceaux</a></li>
</ul>
<p><strong>Travailler avec les donn&eacute;es</strong></p>
<ul>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-19.aspx" target="_blank">Obtenir des donn&eacute;es dans vos applications Windows Phone</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-20.aspx" target="_blank">Data binding</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-21.aspx" target="_blank">Isolated storage</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-22.aspx" target="_blank">Acc&eacute;der &agrave; un service Web REST</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-23.aspx" target="_blank">Consommer des donn&eacute;es Windows Azure</a></li>
</ul>
<p><strong>Sondes et autres fonctionnalit&eacute;s sp&eacute;cifiques au t&eacute;l&eacute;phone</strong></p>
<ul>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-24.aspx" target="_blank">Lanceurs et choosers</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-25.aspx" target="_blank">D&eacute;tecter des mouvements (acc&eacute;l&eacute;rom&egrave;tres)</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-26.aspx" target="_blank">D&eacute;velopper avec le GPS Windows Phone (Services de localisation)</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-27.aspx" target="_blank">D&eacute;velopper avec l&rsquo;appareil photo du Windows Phone</a></li>
</ul>
<hr />
<h1>Les Pinceaux (Brushes)</h1>
<p>Avec Silverlight pour Windows Phone 7 vous pouvez dessiner des objets &agrave; l&rsquo;&eacute;cran et les peindre avec des objets <a href="http://msdn.microsoft.com/en-us/library/system.windows.media.brush(VS.95).aspx">Brush</a>. Ce tutoriel introduit les diff&eacute;rents Brush (pinceaux) qui sont pr&eacute;sents dans Silverlight et comment les utiliser.</p>
<p>Ce tutoriel contient les sections suivantes :</p>
<ul>
<li><a href="#introduction_brushes">Introduction aux Brushes</a></li>
<li><span style="text-decoration: underline;"><a href="#brushes_solidcolorbrushs">Les Brushes SolidColor</a> </span></li>
<li><span style="text-decoration: underline;"><a href="#brushes_lineargradientbrush">Les Brushes LinearGradient</a> </span></li>
<li><span style="text-decoration: underline;"><a href="#brushes_radialgradientbrush">Les Brushes RadialGradient</a> </span></li>
<li><span style="text-decoration: underline;"><a href="#brushes_imagebrush">Les Brushes Image</a></span></li>
</ul>
<p><a name="introduction_brushes"></a></p>
<h2>Introduction aux brushes</h2>
<p><a name="brushes_solidcolorbrushs"></a>Vous utilisez des objets Brush pour peindre une zone avec une couleur unie, un d&eacute;grad&eacute; ou une image. Si vous &ecirc;tes familier avec la fa&ccedil;on dont les Brushes fonctionnent avec les applications Silverlight s&lsquo;ex&eacute;cutant dans le navigateur, alors vous serez heureux de savoir que les Brushes fonctionnent exactement de la m&ecirc;me mani&egrave;re sur Windows Phone. La seule exception est que le <a href="http://msdn.microsoft.com/en-us/library/system.windows.media.videobrush(VS.95).aspx">VideoBrush</a> n&rsquo;est pas support&eacute; sur Windows Phone.</p>
<p>Pour peindre un objet sur l&rsquo;&eacute;cran, comme une forme (<a href="http://msdn.microsoft.com/en-us/library/system.windows.shapes.shape(VS.95).aspx">Shape</a>) ou un <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.control(VS.95).aspx">Control</a>, vous utilisez un <a href="http://msdn.microsoft.com/en-us/library/system.windows.media.brush(VS.95).aspx">Brush</a>. Vous d&eacute;finissez la propri&eacute;t&eacute; Fill de la forme (<a href="http://msdn.microsoft.com/en-us/library/system.windows.shapes.shape(VS.95).aspx">Shape</a>) ou les propri&eacute;t&eacute;s Background et Foreground d&rsquo;un Control avec le Brush d&eacute;sir&eacute;.</p>
<p>Les diff&eacute;rents types de Brush dans Silverlight pour Windows Phone sont le <a href="http://msdn.microsoft.com/en-us/library/system.windows.media.solidcolorbrush(VS.95).aspx">SolidColorBrush</a>, le <a href="http://msdn.microsoft.com/en-us/library/system.windows.media.lineargradientbrush(VS.95).aspx">LinearGradientBrush</a>, le <a href="http://msdn.microsoft.com/en-us/library/system.windows.media.radialgradientbrush(VS.95).aspx">RadialGradientBrush</a> et l&rsquo;<a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imagebrush(VS.95).aspx">ImageBrush</a>.</p>
<p>Pour plus d&rsquo;informations sur les Brushes, consultez la <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/cc189003(VS.95).aspx">Vue d&rsquo;ensemble sur les Brushes</a> </span>sur MSDN.&nbsp;</p>
<p><a name="brushes_solidcolorbrushs"></a></p>
<h2>Les Brushes solidcolor</h2>
<p>Un <a href="http://msdn.microsoft.com/en-us/library/system.windows.media.solidcolorbrush(VS.95).aspx">SolidColorBrush</a> peint une zone avec une seule couleur, comme le rouge ou le bleu. Il y a trois mani&egrave;res en XAML de d&eacute;finir un SolidColorBrush et de lui sp&eacute;cifier sa couleur. Vous pouvez utiliser les noms de couleurs pr&eacute;d&eacute;finies, utiliser les valeurs hexad&eacute;cimales de couleur ou la propri&eacute;t&eacute; Syntax Element.</p>
<p><b>Les noms de couleurs pr&eacute;d&eacute;finies</b></p>
<p>Vous pouvez utiliser un nom de couleur pr&eacute;d&eacute;finie, comme Yellow ou SlateBlue pour d&eacute;finir la propri&eacute;t&eacute; Fill de de la forme (Shape) ou les propri&eacute;t&eacute;s Background et Foreground d&rsquo;un Control. L&rsquo;analyseur XAML convertit le nom en une structure Color.</p>
<p>Remarque</p>
<p>Pour un graphe avec tous les noms de couleurs pr&eacute;d&eacute;finies et leurs valeurs hexad&eacute;cimales correspondantes, consultez la structure Color sur MSDN.</p>
<p>L&rsquo;exemple suivant d&eacute;finit la propri&eacute;t&eacute; Fill d&rsquo;un Rectangle &agrave; la couleur pr&eacute;d&eacute;finie Red</p>
<p><b>XAML</b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:193e1027-fc1f-4ab7-82d8-a0fa28367659" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">StackPanel</span><span style="color: #0000ff;">&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Rectangle</span><span style="color: #ff0000;"> Width</span><span style="color: #0000ff;">="100"</span><span style="color: #ff0000;"> Height</span><span style="color: #0000ff;">="100"</span><span style="color: #ff0000;"> Fill</span><span style="color: #0000ff;">="Red" /&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">StackPanel</span><span style="color: #0000ff;">&gt;</span></li>
</ol></div>
</div>
</div>
<p><b>Les valeurs de couleur hexad&eacute;cimale </b></p>
<p>Vous pouvez utiliser la valeur hexad&eacute;cimale d&rsquo;une couleur pour d&eacute;finir la propri&eacute;t&eacute; Fill d&rsquo;un Shape ou les propri&eacute;t&eacute;s Background et Foreground d&rsquo;un Control. La structure de la valeur hexad&eacute;cimale est une valeur alpha (opacit&eacute;), valeur rouge, valeur vert, valeur bleue. Par exemple, la valeur hexad&eacute;cimale #FFFF0000 d&eacute;finit une couleur rouge opaque (alpha=FF, rouge=FF, vert=FF et bleue=00).</p>
<p>L&rsquo;exemple suivant d&eacute;finit la propri&eacute;t&eacute; Fill d&rsquo;un Rectangle &agrave; la valeur hexad&eacute;cimale #FFFF0000</p>
<p><b>XAML</b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:117e755e-cba6-4f80-9bfd-62bbf21cca37" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">StackPanel</span><span style="color: #0000ff;">&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Rectangle</span><span style="color: #ff0000;"> Width</span><span style="color: #0000ff;">="100"</span><span style="color: #ff0000;"> Height</span><span style="color: #0000ff;">="100"</span><span style="color: #ff0000;"> Fill</span><span style="color: #0000ff;">="#FFFF0000" /&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">StackPanel</span><span style="color: #0000ff;">&gt;</span></li>
</ol></div>
</div>
</div>
<p><b>La propri&eacute;t&eacute; Syntax Element </b></p>
<p>Vous pouvez utiliser la propri&eacute;t&eacute; Syntax Element pour d&eacute;finir un SolidColorBrush. Cette syntaxe est plus verbeuse que les pr&eacute;c&eacute;dentes m&eacute;thodes, mais elle vous permet de sp&eacute;cifier des param&egrave;tres suppl&eacute;mentaires, comme la propri&eacute;t&eacute; Opacity de Brush. Pour plus d&rsquo;informations sur la syntaxe XAML, y compris la propri&eacute;t&eacute; Syntax Element, consultez le tutoriel sur le XAML.</p>
<p>L&rsquo;exemple suivant cr&eacute;&eacute; un Rectangle et cr&eacute;&eacute; explicitement le SolidColorBrush pour la propri&eacute;t&eacute; Fill. La couleur (Color) du SolidColorBrush est d&eacute;finie &agrave; Bleu et la propri&eacute;t&eacute; Opacity est d&eacute;finie &agrave; 0,5.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/8103.image_257D7B6C.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/8103.image_5F00_257D7B6C.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/0576.image_thumb_56500D0A.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/0576.image_5F00_thumb_5F00_56500D0A.png" width="252" height="454" /></a></p>
<p><b>XAML</b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:bbd1e859-9632-403e-af9f-1ea6e970af4c" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;">
<li><span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Grid</span><span style="color: #0000ff;">&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Rectangle</span><span style="color: #ff0000;"> Width</span><span style="color: #0000ff;">="200"</span><span style="color: #ff0000;"> Height</span><span style="color: #0000ff;">="150"&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Rectangle.Fill</span><span style="color: #0000ff;">&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">SolidColorBrush</span><span style="color: #ff0000;"> Color</span><span style="color: #0000ff;">="Blue"</span><span style="color: #ff0000;"> Opacity</span><span style="color: #0000ff;">="0.5" /&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">Rectangle.Fill</span><span style="color: #0000ff;">&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">Rectangle</span><span style="color: #0000ff;">&gt;</span></li>
<li><span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">Grid</span><span style="color: #0000ff;">&gt;</span></li>
</ol></div>
</div>
</div>
<h2><a name="brushes_lineargradientbrush"></a> <br />Les Brushes lineargradient</h2>
<p>Un LinearGradientBrush peint une zone avec un d&eacute;grad&eacute; qui est d&eacute;fini le long d&rsquo;une ligne, appel&eacute;e l&rsquo;axe de d&eacute;grad&eacute;. Vous sp&eacute;cifiez les couleurs du d&eacute;grad&eacute; et leur emplacement le long de l&rsquo;axe du d&eacute;grad&eacute; en utilisant des objets GradientStop. Vous pouvez &eacute;galement modifier l&rsquo;axe de d&eacute;grad&eacute;, ce qui vous permet de cr&eacute;er des d&eacute;grad&eacute;s horizontaux et verticaux, et d&rsquo;inverser la direction de celui-ci.</p>
<p>Le GradientStop est la pierre angulaire d&rsquo;un pinceau &agrave; d&eacute;grad&eacute;. Un GradientStop sp&eacute;cifie une couleur (Color) &agrave; un Offset le long de l&rsquo;axe de d&eacute;grad&eacute;.</p>
<p>La propri&eacute;t&eacute; Color du GradientStop sp&eacute;cifie la couleur du GradientStop. Vous pouvez d&eacute;finir la couleur en utilisant un nom de couleur pr&eacute;d&eacute;finie ou en sp&eacute;cifiant les valeurs hexad&eacute;cimales ARVB.</p>
<p>La propri&eacute;t&eacute; Offset du GradientStop sp&eacute;cifie la position de la couleur d&rsquo;arr&ecirc;t du d&eacute;grad&eacute; sur l&rsquo;axe. L&rsquo;Offset est un Double qui varie entre 0 et 1. Plus la valeur de l&rsquo;Offset du d&eacute;grad&eacute; est proche de 0, plus la couleur se rapprochera du d&eacute;but du d&eacute;grad&eacute;. Plus la valeur de l&rsquo;Offset du d&eacute;grad&eacute; est proche de 1, plus la couleur se rapprochera de la fin du d&eacute;grad&eacute;.</p>
<p>L&rsquo;exemple suivant cr&eacute;&eacute; un d&eacute;grad&eacute; lin&eacute;aire avec 4 couleurs et l&rsquo;utilise pour peindre un Rectangle.</p>
<p><b>XAML <br /></b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:33fa1023-2aa0-4cb3-a8b7-1743eb085274" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;">
<li><span style="color: #a31515;"> </span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">StackPanel</span><span style="color: #0000ff;">&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #008000;">&lt;!-- This rectangle is painted with a diagonal linear gradient. --&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Rectangle</span><span style="color: #ff0000;"> Width</span><span style="color: #0000ff;">="400"</span><span style="color: #ff0000;"> Height</span><span style="color: #0000ff;">="200"&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Rectangle.Fill</span><span style="color: #0000ff;">&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">LinearGradientBrush</span><span style="color: #ff0000;"> StartPoint</span><span style="color: #0000ff;">="0,0"</span><span style="color: #ff0000;"> EndPoint</span><span style="color: #0000ff;">="1,1"&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">GradientStop</span><span style="color: #ff0000;"> Color</span><span style="color: #0000ff;">="Yellow"</span><span style="color: #ff0000;"> Offset</span><span style="color: #0000ff;">="0.0" /&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">GradientStop</span><span style="color: #ff0000;"> Color</span><span style="color: #0000ff;">="Red"</span><span style="color: #ff0000;"> Offset</span><span style="color: #0000ff;">="0.25" /&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">GradientStop</span><span style="color: #ff0000;"> Color</span><span style="color: #0000ff;">="Blue"</span><span style="color: #ff0000;"> Offset</span><span style="color: #0000ff;">="0.75" /&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">GradientStop</span><span style="color: #ff0000;"> Color</span><span style="color: #0000ff;">="LimeGreen"</span><span style="color: #ff0000;"> Offset</span><span style="color: #0000ff;">="1.0" /&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">LinearGradientBrush</span><span style="color: #0000ff;">&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">Rectangle.Fill</span><span style="color: #0000ff;">&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">Rectangle</span><span style="color: #0000ff;">&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">StackPanel</span><span style="color: #0000ff;">&gt;</span></li>
</ol></div>
</div>
</div>
<p>L&rsquo;image suivante montre &agrave; quoi ressemble le d&eacute;grad&eacute; sur un Windows Phone</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/5857.image_256D559F.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/5857.image_5F00_256D559F.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/0564.image_thumb_68F4E0F4.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/0564.image_5F00_thumb_5F00_68F4E0F4.png" width="211" height="380" /></a></p>
<p>La couleur de chaque point entre les points de d&eacute;grad&eacute; est interpol&eacute;e lin&eacute;airement comme une combinaison de la couleur sp&eacute;cifi&eacute;e par les deux points de d&eacute;grad&eacute; de contour. L&rsquo;illustration suivante met en &eacute;vidence les points de d&eacute;grad&eacute; dans l&rsquo;exemple pr&eacute;c&eacute;dent. Les cercles marquent la position des points de d&eacute;grad&eacute; et la ligne hachur&eacute;e montre l&rsquo;axe du d&eacute;grad&eacute;. <br /> <br /><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/0068.image10_10D7E054.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/0068.image10_5F00_10D7E054.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/8156.image10_thumb_29F33A8C.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/8156.image10_5F00_thumb_5F00_29F33A8C.png" width="468" height="293" /></a></p>
<p>Vous pouvez changer la ligne sur laquelle les points du d&eacute;grad&eacute; sont positionn&eacute;s en d&eacute;finissant les propri&eacute;t&eacute;s <a href="http://msdn.microsoft.com/en-us/library/system.windows.media.lineargradientbrush.startpoint(VS.95).aspx">StartPoint</a> et <a href="http://msdn.microsoft.com/en-us/library/system.windows.media.lineargradientbrush.endpoint(VS.95).aspx">EndPoint</a> du Brush. En manipulant ces propri&eacute;t&eacute;s vous pouvez cr&eacute;er des d&eacute;grad&eacute;s horizontaux et verticaux, inverser la direction du d&eacute;grad&eacute;, condenser la propagation de celui-ci, et plus encore.</p>
<p>L&rsquo;exemple suivant cr&eacute;&eacute; un Rectangle qui a un LinearGradientBrush d&eacute;fini sur sa propri&eacute;t&eacute; Fill. Le LinearGradientBrush cr&eacute;e deux GradientStops, un rouge et un bleu. Le GradientStop rouge est d&eacute;fini &agrave; un Offset de 0 et le GradientStop bleu est d&eacute;fini &agrave; un Offset de 0.75. La propri&eacute;t&eacute; StartPoint est d&eacute;finie &agrave; (0,0) et la propri&eacute;t&eacute; EndPoint est d&eacute;finie &agrave; (1,1) qui sont les valeurs par d&eacute;faut. La m&eacute;thode Spread sp&eacute;cifie les diff&eacute;rentes fa&ccedil;ons dont le d&eacute;grad&eacute; peut &ecirc;tre dessin&eacute;. Utiliser les curseurs dans cet exemple pour exp&eacute;rimenter ce qu&rsquo;il se passe avec les diff&eacute;rentes valeurs de la propri&eacute;t&eacute;.</p>
<p><object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="600" height="400" autoupdate="true"><param name="source" value="http://create.msdn.com/assets/cms/docs/QuickstartsXAP/Brushes_LineraGradientInteractive.xap" /><param name="minRuntimeVersion" value="2.0.31005.0" /><param name="background" value="White" /><param name="autoUpgrade" value="true" /><a href="http://go.microsoft.com/fwlink/?LinkID=149156&amp;v=2.0.31005.0" style="text-decoration: none;"> <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style: none;" /> </a> </object></p>
<p><a name="brushes_radialgradientbrush"></a></p>
<h2>Les Brushes radialgradient</h2>
<p>Comme un objet LinearGradientBrush, un RadialGradientBrush peint une zone avec des couleurs qui se m&eacute;langent le long d&rsquo;un axe. Un d&eacute;grad&eacute; de l&rsquo;axe d&rsquo;un Brush est d&eacute;fini par un cercle. Ses couleurs rayonnent vers l&rsquo;ext&eacute;rieur de son origine. Utiliser les propri&eacute;t&eacute;s GradientOrigin, Center, RadiusX et RadiusY pour d&eacute;finir le d&eacute;grad&eacute; radial</p>
<p>L&rsquo;exemple suivant cr&eacute;&eacute; un d&eacute;grad&eacute; radial avec quatre GradientStops.</p>
<p><b>XAML <br /></b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:3b251aed-3515-43bf-b7a4-4297675fc760" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">StackPanel</span><span style="color: #0000ff;">&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #008000;">&lt;!-- This rectangle is painted with a radial gradient. --&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Rectangle</span><span style="color: #ff0000;"> Width</span><span style="color: #0000ff;">="400"</span><span style="color: #ff0000;"> Height</span><span style="color: #0000ff;">="200"&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Rectangle.Fill</span><span style="color: #0000ff;">&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">RadialGradientBrush</span><span style="color: #ff0000;"> GradientOrigin</span><span style="color: #0000ff;">="0.5,0.5"</span><span style="color: #ff0000;"> Center</span><span style="color: #0000ff;">="0.5,0.5"</span><span style="color: #ff0000;"> RadiusX</span><span style="color: #0000ff;">="0.5"</span><span style="color: #ff0000;"> RadiusY</span><span style="color: #0000ff;">="0.5"&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">GradientStop</span><span style="color: #ff0000;"> Color</span><span style="color: #0000ff;">="Yellow"</span><span style="color: #ff0000;"> Offset</span><span style="color: #0000ff;">="0" /&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">GradientStop</span><span style="color: #ff0000;"> Color</span><span style="color: #0000ff;">="Red"</span><span style="color: #ff0000;"> Offset</span><span style="color: #0000ff;">="0.25" /&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">GradientStop</span><span style="color: #ff0000;"> Color</span><span style="color: #0000ff;">="Blue"</span><span style="color: #ff0000;"> Offset</span><span style="color: #0000ff;">="0.75" /&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">GradientStop</span><span style="color: #ff0000;"> Color</span><span style="color: #0000ff;">="LimeGreen"</span><span style="color: #ff0000;"> Offset</span><span style="color: #0000ff;">="1" /&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">RadialGradientBrush</span><span style="color: #0000ff;">&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">Rectangle.Fill</span><span style="color: #0000ff;">&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">Rectangle</span><span style="color: #0000ff;">&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">StackPanel</span><span style="color: #0000ff;">&gt;</span></li>
</ol></div>
</div>
</div>
<p>L&rsquo;image suivante montre &agrave; quoi ressemble le d&eacute;grad&eacute; sur un Windows Phone</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/0552.image_6516F08A.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/0552.image_5F00_6516F08A.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/1122.image_thumb_7391ECAF.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/1122.image_5F00_thumb_5F00_7391ECAF.png" width="199" height="358" /></a></p>
<p>L&rsquo;illustration suivante montre le d&eacute;grad&eacute; cr&eacute;&eacute; dans l&rsquo;exemple pr&eacute;c&eacute;dent. Les points du d&eacute;grad&eacute; du Brush ont &eacute;t&eacute; mis en &eacute;vidence. Notez que m&ecirc;me si les r&eacute;sultats sont diff&eacute;rents, les points de d&eacute;grad&eacute; dans cet exemple sont identiques aux points des d&eacute;grad&eacute;s des pr&eacute;c&eacute;dents exemples.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/7080.image_286ECC20.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/7080.image_5F00_286ECC20.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/5758.image_thumb_05CA8DA5.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/5758.image_5F00_thumb_5F00_05CA8DA5.png" width="343" height="288" /></a></p>
<p>L&rsquo;illustration suivante montre plusieurs d&eacute;grad&eacute;s radiaux avec diff&eacute;rents param&egrave;tres pour le GradientOrigin, Center, RadiusX et RadiusY.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/5415.image_01FCC308.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/5415.image_5F00_01FCC308.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/0143.image_thumb_549B2D37.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/0143.image_5F00_thumb_5F00_549B2D37.png" width="320" height="313" /></a></p>
<p><a name="brushes_imagebrush"></a>L&rsquo;exemple suivant cr&eacute;&eacute; un Rectangle qui a un RadialGradientBrush sur la propri&eacute;t&eacute; Fill. Le RadialGradientBrush cr&eacute;&eacute; deux GradientStops, un rouge et un bleu. Le GradientStop rouge est d&eacute;finit avec un offset de 0 est le GradientStop bleu est d&eacute;finit avec un Offset de 0,75. Les propri&eacute;t&eacute;s GradientOrigin et Center sont toutes deux d&eacute;finies &agrave; (0.5, 0.5) et les propri&eacute;t&eacute;s RadiusX et RadiusY sont d&eacute;finies &agrave; 0.5 qui sont les valeurs par d&eacute;faut. Utilisez les curseurs dans cet exemple afin d&rsquo;exp&eacute;rimenter les diff&eacute;rentes valeurs de propri&eacute;t&eacute;s.</p>
<p><object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="600" height="460" autoupdate="true"><param name="source" value="http://create.msdn.com/assets/cms/docs/QuickstartsXAP/Brushes_RadialGradientInteractive.xap" /><param name="minRuntimeVersion" value="2.0.31005.0" /><param name="background" value="White" /><param name="autoUpgrade" value="true" /><a href="http://go.microsoft.com/fwlink/?LinkID=149156&amp;v=2.0.31005.0" style="text-decoration: none;"> <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style: none;" /> </a> </object></p>
<p><a name="brushes_imagebrush"></a></p>
<h2>Les Brushes Image</h2>
<p>Une <a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imagebrush(VS.95).aspx">ImageBrush</a> peint une zone avec une image. Il peint la zone avec une image JPEG ou PNG sp&eacute;cifi&eacute;e par la propri&eacute;t&eacute; <a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imagebrush.imagesource(VS.95).aspx">ImageSource</a>. Vous d&eacute;finissez la propri&eacute;t&eacute; <a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imagebrush.imagesource(VS.95).aspx">ImageSource</a> avec le chemin de l&rsquo;image &agrave; charger.</p>
<p>Par d&eacute;faut, une ImageBrush &eacute;tire son image pour remplir la zone peinte, et peut &eacute;ventuellement d&eacute;former l&rsquo;image si la zone peinte a un ratio diff&eacute;rent de l&rsquo;image d&rsquo;origine. Vous pouvez changer ce comportement en changeant la propri&eacute;t&eacute; Strech de sa valeur par d&eacute;faut de Fill &agrave; None, Uniform ou UniformToFill.</p>
<p>L&rsquo;exemple suivant cr&eacute;&eacute; un ImageBrush et d&eacute;finit la propri&eacute;t&eacute; <a href="http://msdn.microsoft.com/en-us/library/system.windows.media.imagebrush.imagesource(VS.95).aspx">ImageSource</a> &agrave; une image nomm&eacute;e flower.jpg qui est incluse en tant que ressource dans l&rsquo;application. Utilisez la liste d&eacute;roulante pour changer la propri&eacute;t&eacute;.</p>
<p><object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="600" height="600" autoupdate="true"><param name="source" value="http://create.msdn.com/assets/cms/docs/QuickstartsXAP/Brushes_ImageInteractive.xap" /><param name="minRuntimeVersion" value="2.0.31005.0" /><param name="background" value="White" /><param name="autoUpgrade" value="true" /><a href="http://go.microsoft.com/fwlink/?LinkID=149156&amp;v=2.0.31005.0" style="text-decoration: none;"> <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style: none;" /> </a> </object></p>
<p>L&rsquo;image suivante montre &agrave; quoi ressemble l&rsquo;image sur un Windows Phone <br /><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/4338.image_0A507292.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/4338.image_5F00_0A507292.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/1033.image_thumb_3F2D5202.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/1033.image_5F00_thumb_5F00_3F2D5202.png" width="240" height="432" /></a></p>
<p><strong>Voir aussi <br /></strong></p>
<ul>
<li><span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/cc189003(VS.95).aspx">Vue d&rsquo;ensemble sur les Brushes</a> </span></li>
</ul>]]></content:encoded>
    </item>
    <item>
      <title>Developpement Windows Phone - partie 15</title>
      <link>https://docs.microsoft.com/archive/blogs/patrick_payet/developpement-windows-phone-partie-15</link>
      <pubDate>Tue, 06 Sep 2011 13:15:00 GMT</pubDate>
      <dc:creator><![CDATA[papayet]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/patrick_payet/2011/09/06/developpement-windows-phone-partie-15/</guid>
      <description><![CDATA[Les animations
Cet article fait partie d&rsquo;une s&eacute;rie d&rsquo;articles sur le...]]></description>
      <content:encoded><![CDATA[<h1>Les animations</h1>
<p>Cet article fait partie d&rsquo;une s&eacute;rie d&rsquo;articles sur le d&eacute;veloppement Windows Phone. Il s&rsquo;agit d&rsquo;une traduction des articles se trouvant <a href="http://create.msdn.com/en-us/education/quickstarts" target="_blank">sur la MSDN</a>.</p>
<h2><a name="sommaire"></a>Sommaire</h2>
<p><strong>Bien d&eacute;buter et fondamentaux</strong></p>
<ul>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-1.aspx" target="_blank">Bien d&eacute;marrer (Hello World)</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-2.aspx" target="_blank">Cr&eacute;er une interface utilisateur pour Windows Phone en XAML</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-3.aspx" target="_blank">Utiliser des contr&ocirc;les</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-4.aspx" target="_blank">Types de contr&ocirc;les</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-5.aspx" target="_blank">Contr&ocirc;les Panorama et Pivot</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-6.aspx" target="_blank">Travailler avec du texte sur le Windows Phone</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-7.aspx" target="_blank">Mise en page sur l&rsquo;&eacute;cran</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-8.aspx" target="_blank">Orientations de l&rsquo;&eacute;cran</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-9.aspx" target="_blank">Saisie tactile</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-10.aspx" target="_blank">Navigation</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-11.aspx" target="_blank">Ex&eacute;cuter votre application en arri&egrave;re-plan (tombstoning)</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-12.aspx" target="_blank">Notifications Push pour le d&eacute;veloppement Windows Phone</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-13.aspx" target="_blank">Publier votre application sur le Marketplace</a></li>
</ul>
<p><strong>Visuels et m&eacute;dia</strong></p>
<ul>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-14.aspx" target="_blank">Images</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-15.aspx" target="_blank">Animations</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-16.aspx" target="_blank">Vid&eacute;o et Audio</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-17.aspx" target="_blank">Graphiques</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-18.aspx" target="_blank">Pinceaux</a></li>
</ul>
<p><strong>Travailler avec les donn&eacute;es</strong></p>
<ul>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-19.aspx" target="_blank">Obtenir des donn&eacute;es dans vos applications Windows Phone</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-20.aspx" target="_blank">Data binding</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-21.aspx" target="_blank">Isolated storage</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-22.aspx" target="_blank">Acc&eacute;der &agrave; un service Web REST</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-23.aspx" target="_blank">Consommer des donn&eacute;es Windows Azure</a></li>
</ul>
<p><strong>Sondes et autres fonctionnalit&eacute;s sp&eacute;cifiques au t&eacute;l&eacute;phone</strong></p>
<ul>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-24.aspx" target="_blank">Lanceurs et choosers</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-25.aspx" target="_blank">D&eacute;tecter des mouvements (acc&eacute;l&eacute;rom&egrave;tres)</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-26.aspx" target="_blank">D&eacute;velopper avec le GPS Windows Phone (Services de localisation)</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-27.aspx" target="_blank">D&eacute;velopper avec l&rsquo;appareil photo du Windows Phone</a></li>
</ul>
<hr />
<h1>Les animations</h1>
<p>Avec Silverlight pour Windows Phone 7, les animations peuvent am&eacute;liorer vos applications en y ajoutant de l&rsquo;interactivit&eacute; et du mouvement. En animant une couleur de fond ou en appliquant une transformation anim&eacute;e, vous pouvez cr&eacute;er des transitions d&rsquo;&eacute;crans spectaculaires ou fournir des rep&egrave;res visuels utiles. Ce tutoriel vous montre comment cr&eacute;er des animations de base en changeant les valeurs d&rsquo;une propri&eacute;t&eacute; et en utilisant des images cl&eacute;s (Key-Frames)</p>
<p>Ce tutoriel contient les sections suivantes :</p>
<p><span style="text-decoration: underline;"><a href="#animating_double_property">Animation d&rsquo;une propri&eacute;t&eacute; de type Double</a> <br /></span><span style="text-decoration: underline;"><a href="#animating_double_property">Animation d&rsquo;une propri&eacute;t&eacute; de type Color</a> <br /></span><a href="#starting_stopping_pausing_and_resuming">D&eacute;marrage, Arr&ecirc;t, Pause, Reprise</a> <br /><a href="#advanced_animations">Animation par l&rsquo;utilisation de Key-Frames</a> <br /><a href="#easing_functions">Animation par l&rsquo;utilisation des Easing Functions</a></p>
<p><strong>Remarque</strong></p>
<p>Les exemples interactifs de ce tutoriel utilisent Silverlight qui est ex&eacute;cut&eacute; sur le navigateur pour simuler le comportement de Silverlight pour Windows Phone. Le comportement actuel peut &ecirc;tre visiblement diff&eacute;rent dans l&rsquo;&eacute;mulateur ou sur un t&eacute;l&eacute;phone Windows Phone.</p>
<p><a name="animating_double_property"></a></p>
<h2>Animation d&rsquo;une propri&eacute;t&eacute; de type Double</h2>
<p>Les animations en Silverlight pour Windows Phone sont cr&eacute;&eacute;es en animant les valeurs des propri&eacute;t&eacute;s de leurs objets. Par exemple, vous pouvez animer les propri&eacute;t&eacute;s <a href="http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.width(v=VS.95).aspx">Width</a> et <a href="http://msdn.microsoft.com/en-us/library/ms615650(v=VS.95).aspx">Rectangle</a>, l&rsquo;angle d&rsquo;un <a href="http://msdn.microsoft.com/en-us/library/system.windows.media.rotatetransform(VS.95).aspx">RotateTransform</a>, ou la valeur d&rsquo;une couleur d&rsquo;un contr&ocirc;le <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.button(VS.95).aspx">Button</a>. Dans l&rsquo;exemple suivant, la propri&eacute;t&eacute; <a href="http://msdn.microsoft.com/en-us/library/system.windows.uielement.opacity(v=VS.95).aspx">Opacity</a> est anim&eacute;e. Pour essayer cet exemple, cliquez sur le Rectangle pour le voir se fondre et disparaitre.</p>
<p><object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="560" height="520" autoupdate="true"><param name="source" value="http://create.msdn.com/assets/cms/docs/QuickstartsXAP/QuickStartsPhone_Animation1.xap" /><param name="minRuntimeVersion" value="2.0.31005.0" /><param name="background" value="White" /><param name="autoUpgrade" value="true" /><a href="http://go.microsoft.com/fwlink/?LinkID=149156&amp;v=2.0.31005.0" style="text-decoration: none;"> <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style: none;" /> </a> </object></p>
<h6>XAML</h6>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:1c16ea83-bd84-4cc4-9291-749d70b60f49" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;">
<li><span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">StackPanel</span><span style="color: #0000ff;"> &gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">StackPanel.Resources</span><span style="color: #0000ff;">&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #008000;">&lt;!-- Animates the rectangle's opacity. --&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Storyboard</span><span style="color: #ff0000;"> x</span><span style="color: #0000ff;">:</span><span style="color: #ff0000;">Name</span><span style="color: #0000ff;">="myStoryboard"&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">DoubleAnimation</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> Storyboard.TargetName</span><span style="color: #0000ff;">="MyAnimatedRectangle"</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> Storyboard.TargetProperty</span><span style="color: #0000ff;">="Opacity"</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> From</span><span style="color: #0000ff;">="1.0"</span><span style="color: #ff0000;"> To</span><span style="color: #0000ff;">="0.0"</span><span style="color: #ff0000;"> Duration</span><span style="color: #0000ff;">="0:0:1"</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> AutoReverse</span><span style="color: #0000ff;">="True"&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">DoubleAnimation</span><span style="color: #0000ff;">&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">Storyboard</span><span style="color: #0000ff;">&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">StackPanel.Resources</span><span style="color: #0000ff;">&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Rectangle</span><span style="color: #ff0000;"> MouseLeftButtonUp</span><span style="color: #0000ff;">="</span><span style="color: #ff0000;">Rectangle_Tapped</span><span style="color: #0000ff;">"</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> x</span><span style="color: #0000ff;">:</span><span style="color: #ff0000;">Name</span><span style="color: #0000ff;">="MyAnimatedRectangle"</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> Width</span><span style="color: #0000ff;">="300"</span><span style="color: #ff0000;"> Height</span><span style="color: #0000ff;">="200"</span><span style="color: #ff0000;"> Fill</span><span style="color: #0000ff;">="Blue" /&gt;</span></li>
<li style="background: #f3f3f3;"><span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">StackPanel</span><span style="color: #0000ff;">&gt;</span></li>
</ol></div>
</div>
</div>
<p><b>C#</b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:ab04ffc8-01fb-4c7b-aad2-321b4caa7b7d" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;">
<li><span style="color: #008000;">// When the user taps the rectangle, the animation begins.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">private</span> <span style="color: #0000ff;">void</span> Rectangle_Tapped(<span style="color: #0000ff;">object</span> sender, <span style="color: #2b91af;">MouseEventArgs</span> e)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myStoryboard.Begin();</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
</ol></div>
</div>
</div>
<p><b>Visual Basic</b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:85dd0ef4-ae1a-41cc-9e56-d8a844e2bf14" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;">
<li><span style="color: #008000;">' When the user taps the rectangle, the animation begins.</span></li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> Rectangle_Tapped(sender <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Object</span>, e <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">MouseEventArgs</span>)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;myStoryboard.Begin()</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></li>
</ol></div>
</div>
</div>
<p>Les sections suivantes parlent des &eacute;tapes d&rsquo;animations sur la propri&eacute;t&eacute; <a href="http://msdn.microsoft.com/en-us/library/system.windows.uielement.opacity(v=VS.95).aspx" target="_blank">Opacity</a> et examinent le code XAML qui est utilis&eacute; pour chaque &eacute;tape.</p>
<p><strong>Identifier la propri&eacute;t&eacute; &agrave; animer</strong></p>
<p>Dans cet exemple, vous animez la propri&eacute;t&eacute; <a href="http://msdn.microsoft.com/en-us/library/system.windows.uielement.opacity(v=VS.95).aspx" target="_blank">Opacity</a> d&rsquo;un <a href="http://msdn.microsoft.com/en-us/library/ms615650(v=VS.95).aspx" target="_blank">Rectangle</a>. Vous n&rsquo;avez pas &agrave; d&eacute;clarer la propri&eacute;t&eacute; que vous voulez animer sur l&rsquo;objet lui-m&ecirc;me. Cependant, en g&eacute;n&eacute;ral vous nommez l&rsquo;objet que vous voulez animer. Nommer l&rsquo;objet rend plus facile de sp&eacute;cifier quel objet sera vis&eacute; par l&rsquo;animation. Le XAML suivant montre comment nommer le <a href="http://msdn.microsoft.com/en-us/library/ms615650(v=VS.95).aspx" target="_blank">Rectangle</a>.</p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:e8afc7db-8617-4ff5-a2f1-4e46305909f3" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Rectangle</span><span style="color: #ff0000;"> x</span><span style="color: #0000ff;">:</span><span style="color: #ff0000;">Name</span><span style="color: #0000ff;">="MyAnimatedRectangle"/&gt;</span></li>
</ol></div>
</div>
</div>
<h3>&nbsp;</h3>
<p><strong>Cr&eacute;er un Storyboard et en faire une ressource</strong></p>
<p>Un <a href="http://msdn.microsoft.com/en-us/library/system.windows.media.animation.storyboard(VS.95).aspx" target="_blank">StoryBoard</a> est un conteneur dans lequel vous mettez les objets &agrave; animer. Vous devez construire une ressource <a href="http://msdn.microsoft.com/en-us/library/system.windows.media.animation.storyboard(VS.95).aspx" target="_blank">StoryBoard</a> qui est disponible pour l&rsquo;objet que vous voulez animer. Le XAML suivant montre comment construire une ressource <a href="http://msdn.microsoft.com/en-us/library/system.windows.media.animation.storyboard(VS.95).aspx" target="_blank">StoryBoard</a> de l&rsquo;&eacute;l&eacute;ment racine qui est un <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.stackpanel(VS.95).aspx" target="_blank">StackPanel</a>.</p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:9c22ec05-0c6e-43b5-aba0-cabe9b797eca" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;">
<li><span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">StackPanel</span><span style="color: #ff0000;"> x</span><span style="color: #0000ff;">:</span><span style="color: #ff0000;">Name</span><span style="color: #0000ff;">="rootElement"&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">StackPanel.Resources</span><span style="color: #0000ff;">&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #008000;">&lt;!-- Animates the rectangle's opacity. --&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Storyboard</span><span style="color: #ff0000;"> x</span><span style="color: #0000ff;">:</span><span style="color: #ff0000;">Name</span><span style="color: #0000ff;">="myStoryboard"&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #008000;">&lt;!-- Animation objects go here. --&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">Storyboard</span><span style="color: #0000ff;">&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">StackPanel.Resources</span><span style="color: #0000ff;">&gt;</span></li>
<li style="background: #f3f3f3;"><span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">StackPanel</span><span style="color: #0000ff;">&gt;</span></li>
</ol></div>
</div>
</div>
<h3>&nbsp;</h3>
<p><strong>Ajout d&rsquo;une animation d&rsquo;objet dans le storyboard</strong></p>
<p>Cet exemple utilise l&rsquo;objet <a href="http://go.microsoft.com/fwlink/?LinkId=129176" target="_blank">DoubleAnimation</a> parce que la valeur de la propri&eacute;t&eacute; que vous animez (<a href="http://msdn.microsoft.com/en-us/library/system.windows.uielement.opacity(v=VS.95).aspx" target="_blank">Opacity</a>) utilise un double. Un objet animation sp&eacute;cifie ce qui est anim&eacute; et comment l&rsquo;animation se comporte. Le XAML suivant montre comment l&rsquo;objet <a href="http://go.microsoft.com/fwlink/?LinkId=129176" target="_blank">DoubleAnimation</a> est ajout&eacute; au <a href="http://msdn.microsoft.com/en-us/library/system.windows.media.animation.storyboard(VS.95).aspx" target="_blank">StoryBoard</a>.</p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:8102252e-c0ce-495c-86eb-97596994e4e4" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;">
<li><span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Storyboard</span><span style="color: #ff0000;"> x</span><span style="color: #0000ff;">:</span><span style="color: #ff0000;">Name</span><span style="color: #0000ff;">="myStoryboard"&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">DoubleAnimation</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> Storyboard.TargetName</span><span style="color: #0000ff;">="MyAnimatedRectangle"</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> Storyboard.TargetProperty</span><span style="color: #0000ff;">="Opacity"</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> From</span><span style="color: #0000ff;">="1.0"</span><span style="color: #ff0000;"> To</span><span style="color: #0000ff;">="0.0"</span><span style="color: #ff0000;"> Duration</span><span style="color: #0000ff;">="0:0:1"</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> AutoReverse</span><span style="color: #0000ff;">="True"</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> RepeatBehavior</span><span style="color: #0000ff;">="Forever"&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">DoubleAnimation</span><span style="color: #0000ff;">&gt;</span></li>
<li>&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">Storyboard</span><span style="color: #0000ff;">&gt;</span></li>
</ol></div>
</div>
</div>
<p>L&rsquo;objet <a href="http://go.microsoft.com/fwlink/?LinkId=129176" target="_blank">DoubleAnimation</a> sp&eacute;cifie l&rsquo;animation suivante :</p>
<ul>
<li>Storyboard.TargetProperty="Opacity" sp&eacute;cifie que la propri&eacute;t&eacute; <a href="http://msdn.microsoft.com/en-us/library/system.windows.uielement.opacity(v=VS.95).aspx" target="_blank">Opacity</a> est anim&eacute;e.</li>
<li>Storyboard.TargetName="MyAnimatedRectangle" sp&eacute;cifie que la propri&eacute;t&eacute; de cet objet est anim&eacute;e. (le Rectangle)</li>
<li>From="1.0" To="0.0" sp&eacute;cifie que la propri&eacute;t&eacute; <a href="http://msdn.microsoft.com/en-us/library/system.windows.uielement.opacity(v=VS.95).aspx" target="_blank">Opacity</a> commence &agrave; une valeur de 1 et est anim&eacute;e jusqu&rsquo;&agrave; 0 (D&eacute;marre opaque et s&rsquo;estompe par la suite)</li>
<li>Duration="0:0:1" sp&eacute;cifie combien de temps l&rsquo;animation dure (A quelle vitesse s&rsquo;estompe le Rectangle). La dur&eacute;e utilis&eacute;e dans cet exemple est d&rsquo;une seconde parce que la propri&eacute;t&eacute; <a href="http://msdn.microsoft.com/en-us/library/system.windows.media.animation.timeline.duration(v=VS.95).aspx" target="_blank">Duration</a> est sp&eacute;cifi&eacute;e sous forme de &laquo; heures : minutes : secondes &raquo;.</li>
<li>AutoReverse="True" sp&eacute;cifie que quand l&rsquo;animation se termine, elle recommence dans le sens inverse. Dans le cas de cet exemple, elle s&rsquo;estompe et s&rsquo;inverse &agrave; une opacit&eacute; compl&egrave;te.</li>
<li>RepeatBehavior= &laquo; Forever &raquo;&nbsp; sp&eacute;cifie que lorsque l&rsquo;animation commence celle-ci continue ind&eacute;finiment. Dans cet exemple, le Rectangle s&rsquo;estompe continuellement&hellip;</li>
</ul>
<p><strong>D&eacute;marrer l&rsquo;animation</strong></p>
<p>Une mani&egrave;re commune de d&eacute;marrer une animation est une r&eacute;ponse &agrave; un &eacute;v&egrave;nement. Dans cet exemple, l&rsquo;&eacute;v&egrave;nement MouseLeftButtonUp est utilis&eacute; pour d&eacute;marrer l&rsquo;animation quand l&rsquo;utilisateur touche le Rectangle.</p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:724a9b97-7ea9-4a83-ad14-49c68be3c9ac" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Rectangle</span><span style="color: #ff0000;"> MouseLeftButtonUp</span><span style="color: #0000ff;">="Rectangle_Tapped"</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> x</span><span style="color: #0000ff;">:</span><span style="color: #ff0000;">Name</span><span style="color: #0000ff;">="MyAnimatedRectangle"</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> Width</span><span style="color: #0000ff;">="100"</span><span style="color: #ff0000;"> Height</span><span style="color: #0000ff;">="100"</span><span style="color: #ff0000;"> Fill</span><span style="color: #0000ff;">="Blue" /&gt;</span></li>
</ol></div>
</div>
</div>
<p>Le Storyboard est d&eacute;marr&eacute; en utilisant la m&eacute;thode Begin().</p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:3cfe48ef-414f-4220-a7b6-95a367cc4af6" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;">
<li>myStoryboard.Begin();</li>
</ol></div>
</div>
</div>
<p><strong>Remarque</strong></p>
<p>Vous pouvez utiliser le code C# au lieu du XAML pour d&eacute;finir une animation. Pour voir un exemple, allez &agrave; la section <a href="http://go.microsoft.com/fwlink/?LinkID=111736">Vue d&rsquo;ensemble d&rsquo;une Animation</a><span style="text-decoration: underline;"> </span>dans la librairie MSDN.</p>
<p><a name="animating_color_property"></a></p>
<h2>Animation d&rsquo;une propri&eacute;t&eacute; Color</h2>
<p>L&rsquo;exemple pr&eacute;c&eacute;dent nous a montr&eacute; comment animer une propri&eacute;t&eacute; qui utilisait une valeur de type Double. Et que faire si vous voulez animer un type Color ?</p>
<p>Silverlight pour Windows Phone fourni des objets d&rsquo;animation qui sont utilis&eacute;s pour animer d&rsquo;autres types de valeurs. Les objets suivants animent respectivement les propri&eacute;t&eacute;s de type <a href="http://msdn.microsoft.com/en-us/library/678hzkk9(v=VS.100).aspx" target="_blank">Double</a>, <a href="http://msdn.microsoft.com/en-us/library/system.windows.media.color(VS.95).aspx" target="_blank">Color</a> et <a href="http://msdn.microsoft.com/en-us/library/system.windows.point(v=VS.95).aspx" target="_blank">Point</a> :</p>
<ul>
<li><a href="http://go.microsoft.com/fwlink/?LinkId=129176">DoubleAnimation</a></li>
<li><a href="http://go.microsoft.com/fwlink/?LinkId=129177">ColorAnimation</a></li>
<li><a href="http://go.microsoft.com/fwlink/?LinkId=129178">PointAnimation</a></li>
</ul>
<p><strong>Remarque</strong></p>
<p>Vous pouvez aussi animer les propri&eacute;t&eacute;s qui utilisent des objets. Pour plus d&rsquo;informations, voir la section <a href="#advanced_animations">Animations avanc&eacute;es</a>.</p>
<p>L&rsquo;exemple suivant montre comment cr&eacute;er un objet <a href="http://go.microsoft.com/fwlink/?LinkId=129177">ColorAnimation</a>. Pour essayer cet exemple, cliquez sur le <a href="http://msdn.microsoft.com/en-us/library/ms615650(v=VS.95).aspx">Rectangle</a> pour changer la couleur de fond du Canvas de rouge &agrave; vert sur une p&eacute;riode de 4 secondes.</p>
<p><object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="560" height="520" autoupdate="true"><param name="source" value="http://create.msdn.com/assets/cms/docs/QuickstartsXAP/QuickStartsPhone_Animation2.xap" /><param name="minRuntimeVersion" value="2.0.31005.0" /><param name="background" value="White" /><param name="autoUpgrade" value="true" /><a href="http://go.microsoft.com/fwlink/?LinkID=149156&amp;v=2.0.31005.0" style="text-decoration: none;"> <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style: none;" /> </a> </object></p>
<p><b>XAML</b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:ae51701d-5ff9-4d0e-9335-232ba54caab1" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">StackPanel</span><span style="color: #ff0000;"> MouseLeftButtonUp</span><span style="color: #0000ff;">="Rectangle_Tapped"&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">StackPanel.Resources</span><span style="color: #0000ff;">&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Storyboard</span><span style="color: #ff0000;"> x</span><span style="color: #0000ff;">:</span><span style="color: #ff0000;">Name</span><span style="color: #0000ff;">="myStoryboard"&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #008000;">&lt;!-- Animate the background color of the canvas from red to green over 4 seconds. --&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">ColorAnimation</span><span style="color: #ff0000;"> Storyboard.TargetName</span><span style="color: #0000ff;">="mySolidColorBrush"</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> Storyboard.TargetProperty</span><span style="color: #0000ff;">="Color"</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> From</span><span style="color: #0000ff;">="Red"</span><span style="color: #ff0000;"> To</span><span style="color: #0000ff;">="Green"</span><span style="color: #ff0000;"> Duration</span><span style="color: #0000ff;">="0:0:4" /&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">Storyboard</span><span style="color: #0000ff;">&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">StackPanel.Resources</span><span style="color: #0000ff;">&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">StackPanel.Background</span><span style="color: #0000ff;">&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">SolidColorBrush</span><span style="color: #ff0000;"> x</span><span style="color: #0000ff;">:</span><span style="color: #ff0000;">Name</span><span style="color: #0000ff;">="mySolidColorBrush"</span><span style="color: #ff0000;"> Color</span><span style="color: #0000ff;">="Red" /&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">StackPanel.Background</span><span style="color: #0000ff;">&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">StackPanel</span><span style="color: #0000ff;">&gt;</span></li>
</ol></div>
</div>
</div>
<p><b>C#</b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:7f4936e5-f141-4701-b26f-d6d1377dc85c" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;">
<li><span style="color: #008000;">// When the user taps the rectangle, the animation begins.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">private</span> <span style="color: #0000ff;">void</span> Rectangle_Tapped(<span style="color: #0000ff;">object</span> sender, <span style="color: #2b91af;">MouseEventArgs</span> e)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myStoryboard.Begin();</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
</ol></div>
</div>
</div>
<p><b>Visual Basic <br /></b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:d1c969d1-8ce2-4d79-b44f-6a447a9b7b2a" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;">
<li><span style="color: #008000;">' When the user taps the rectangle, the animation begins.</span></li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> Rectangle_Tapped(sender <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Object</span>, e <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">MouseEventArgs</span>)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;myStoryboard.Begin()</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></li>
</ol></div>
</div>
</div>
<h3><br />D&eacute;marrage, arr&ecirc;t, pause et reprise</h3>
<p>L&rsquo;exemple pr&eacute;c&eacute;dant nous a montr&eacute; comment d&eacute;marrer une animation en utilisant la m&eacute;thode <a href="http://msdn.microsoft.com/en-us/library/cc190590(v=VS.95).aspx" target="_blank">Begin</a>(). Le <a href="http://msdn.microsoft.com/en-us/library/system.windows.media.animation.storyboard(VS.95).aspx" target="_blank">Storyboard</a> aussi poss&egrave;de les m&eacute;thodes <a href="http://msdn.microsoft.com/en-us/library/cc190749(v=VS.95).aspx" target="_blank">Stop</a>(), <a href="http://msdn.microsoft.com/en-us/library/cc190455(v=VS.95).aspx" target="_blank">Pause</a>(), et <a href="http://msdn.microsoft.com/en-us/library/cc190437(v=VS.95).aspx" target="_blank">Resume</a>() qui peuvent &ecirc;tre utilis&eacute;es pour contr&ocirc;ler une animation. L&rsquo;exemple suivant cr&eacute;&eacute; quatre contr&ocirc;les Button qui permettent &agrave; l&rsquo;utilisateur de contr&ocirc;ler l&rsquo;animation d&rsquo;une <a href="http://msdn.microsoft.com/en-us/library/system.windows.shapes.ellipse(VS.95).aspx" target="_blank">Ellipse</a> sur l&rsquo;&eacute;cran. Pour essayer cet exemple, cliquez sur les boutons et regardez comment l&rsquo;animation se comporte.</p>
<p><object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="560" height="520" autoupdate="true"><param name="source" value="http://create.msdn.com/assets/cms/docs/QuickstartsXAP/QuickStartsPhone_Animation3.xap" /><param name="minRuntimeVersion" value="2.0.31005.0" /><param name="background" value="White" /><param name="autoUpgrade" value="true" /><a href="http://go.microsoft.com/fwlink/?LinkID=149156&amp;v=2.0.31005.0" style="text-decoration: none;"> <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style: none;" /> </a> </object></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:8998f0d7-424d-4826-9e76-ae46e5b727d0" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;">
<li><span style="color: #a31515;"> </span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Canvas</span><span style="color: #0000ff;">&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Canvas.Resources</span><span style="color: #0000ff;">&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Storyboard</span><span style="color: #ff0000;"> x</span><span style="color: #0000ff;">:</span><span style="color: #ff0000;">Name</span><span style="color: #0000ff;">="myStoryboard"&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #008000;">&lt;!-- Animate the center point of the ellipse. --&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">PointAnimation</span><span style="color: #ff0000;"> Storyboard.TargetProperty</span><span style="color: #0000ff;">="Center"</span><span style="color: #ff0000;"> Storyboard.TargetName</span><span style="color: #0000ff;">="MyAnimatedEllipseGeometry"</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> Duration</span><span style="color: #0000ff;">="0:0:5"</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> From</span><span style="color: #0000ff;">="20,200"</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> To</span><span style="color: #0000ff;">="400,100"</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> RepeatBehavior</span><span style="color: #0000ff;">="Forever" /&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">Storyboard</span><span style="color: #0000ff;">&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">Canvas.Resources</span><span style="color: #0000ff;">&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Path</span><span style="color: #ff0000;"> Fill</span><span style="color: #0000ff;">="Blue"&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Path.Data</span><span style="color: #0000ff;">&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #008000;">&lt;!-- Describe an ellipse. --&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">EllipseGeometry</span><span style="color: #ff0000;"> x</span><span style="color: #0000ff;">:</span><span style="color: #ff0000;">Name</span><span style="color: #0000ff;">="MyAnimatedEllipseGeometry"</span><span style="color: #ff0000;"> Center</span><span style="color: #0000ff;">="20,20"</span><span style="color: #ff0000;"> RadiusX</span><span style="color: #0000ff;">="15"</span><span style="color: #ff0000;"> RadiusY</span><span style="color: #0000ff;">="15" /&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">Path.Data</span><span style="color: #0000ff;">&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">Path</span><span style="color: #0000ff;">&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">StackPanel</span><span style="color: #ff0000;"> Orientation</span><span style="color: #0000ff;">="Horizontal"</span><span style="color: #ff0000;"> Canvas.Left</span><span style="color: #0000ff;">="10"</span><span style="color: #ff0000;"> Canvas.Top</span><span style="color: #0000ff;">="265"&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #008000;">&lt;!-- Button that begins animation. --&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Button</span><span style="color: #ff0000;"> Click</span><span style="color: #0000ff;">="</span><span style="color: #ff0000;">Animation_Begin</span><span style="color: #0000ff;">"</span><span style="color: #ff0000;"> Width</span><span style="color: #0000ff;">="65"</span><span style="color: #ff0000;"> Height</span><span style="color: #0000ff;">="30"</span><span style="color: #ff0000;"> Margin</span><span style="color: #0000ff;">="2"</span><span style="color: #ff0000;"> Content</span><span style="color: #0000ff;">="Begin" /&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #008000;">&lt;!-- Button that pauses animation. --&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Button</span><span style="color: #ff0000;"> Click</span><span style="color: #0000ff;">="</span><span style="color: #ff0000;">Animation_Pause</span><span style="color: #0000ff;">"</span><span style="color: #ff0000;"> Width</span><span style="color: #0000ff;">="65"</span><span style="color: #ff0000;"> Height</span><span style="color: #0000ff;">="30"</span><span style="color: #ff0000;"> Margin</span><span style="color: #0000ff;">="2"</span><span style="color: #ff0000;"> Content</span><span style="color: #0000ff;">="Pause" /&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #008000;">&lt;!-- Button that resumes animation. --&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Button</span><span style="color: #ff0000;"> Click</span><span style="color: #0000ff;">="</span><span style="color: #ff0000;">Animation_Resume</span><span style="color: #0000ff;">"</span><span style="color: #ff0000;"> Width</span><span style="color: #0000ff;">="65"</span><span style="color: #ff0000;"> Height</span><span style="color: #0000ff;">="30"</span><span style="color: #ff0000;"> Margin</span><span style="color: #0000ff;">="2"</span><span style="color: #ff0000;"> Content</span><span style="color: #0000ff;">="Resume" /&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #008000;">&lt;!-- Button that stops animation. Stopping the animation returns the ellipse to its original location. --&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Button</span><span style="color: #ff0000;"> Click</span><span style="color: #0000ff;">="</span><span style="color: #ff0000;">Animation_Stop</span><span style="color: #0000ff;">"</span><span style="color: #ff0000;"> Width</span><span style="color: #0000ff;">="65"</span><span style="color: #ff0000;"> Height</span><span style="color: #0000ff;">="30"</span><span style="color: #ff0000;"> Margin</span><span style="color: #0000ff;">="2"</span><span style="color: #ff0000;"> Content</span><span style="color: #0000ff;">="Stop" /&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">StackPanel</span><span style="color: #0000ff;">&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">Canvas</span><span style="color: #0000ff;">&gt;</span></li>
</ol></div>
</div>
</div>
<p><b>C#</b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:24def88c-5ed1-405c-b174-7546138670d8" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;">
<li>&nbsp;</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">private</span> <span style="color: #0000ff;">void</span> Animation_Begin(<span style="color: #0000ff;">object</span> sender, <span style="color: #2b91af;">RoutedEventArgs</span> e)</li>
<li>{</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;myStoryboard.Begin();</li>
<li>}</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">private</span> <span style="color: #0000ff;">void</span> Animation_Pause(<span style="color: #0000ff;">object</span> sender, <span style="color: #2b91af;">RoutedEventArgs</span> e)</li>
<li>{</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;myStoryboard.Pause();</li>
<li>}</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">private</span> <span style="color: #0000ff;">void</span> Animation_Resume(<span style="color: #0000ff;">object</span> sender, <span style="color: #2b91af;">RoutedEventArgs</span> e)</li>
<li>{</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;myStoryboard.Resume();</li>
<li>}</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">private</span> <span style="color: #0000ff;">void</span> Animation_Stop(<span style="color: #0000ff;">object</span> sender, <span style="color: #2b91af;">RoutedEventArgs</span> e)</li>
<li>{</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;myStoryboard.Stop();</li>
<li>}</li>
</ol></div>
</div>
</div>
<p><b>Visual Basic </b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:53d34c61-1f0c-4cd7-b48e-27d53c166c1c" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> Animation_Begin(sender <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Object</span>, e <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">RoutedEventArgs</span>)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;myStoryboard.Begin()</li>
<li><span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> Animation_Pause(sender <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Object</span>, e <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">RoutedEventArgs</span>)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;myStoryboard.Pause()</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></li>
<li><span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> Animation_Resume(sender <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Object</span>, e <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">RoutedEventArgs</span>)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;myStoryboard.[Resume]()</li>
<li><span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> Animation_Stop(sender <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Object</span>, e <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">RoutedEventArgs</span>)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;myStoryboard.[Stop]()</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></li>
</ol></div>
</div>
</div>
<h2>&nbsp;</h2>
<p><a name="starting_stopping_pausing_and_resuming"></a></p>
<h2>Animation en utilisant les Key-Frames</h2>
<p>Jusqu&rsquo;&agrave; maintenant, les exemples dans ce tutoriel ont montr&eacute; les animations entre 2 valeurs. (Elles sont appel&eacute;es les animations From/To/By) Les animations Key-Frames vous laissent utiliser plus de deux valeurs cibles et contr&ocirc;lent la m&eacute;thode d&rsquo;interpolation d&rsquo;une animation (plus pr&eacute;cis&eacute;ment, en utilisant la propri&eacute;t&eacute; KeySpline), vous pouvez contr&ocirc;ler l&rsquo;acc&eacute;l&eacute;ration d&rsquo;une animation. <br />L&rsquo;exemple suivant montre comment utiliser une animation key-frame pour animer la propri&eacute;t&eacute; <a href="http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.height(v=VS.95).aspx">Height</a> d&rsquo;un <a href="http://msdn.microsoft.com/en-us/library/ms615650(v=VS.95).aspx">Rectangle</a>. Pour essayer cet exemple, cliquez sur le <a href="http://msdn.microsoft.com/en-us/library/ms615650(v=VS.95).aspx">Rectangle</a> pour voir l&rsquo;effet attendu.</p>
<p><object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="560" height="520" autoupdate="true"><param name="source" value="http://create.msdn.com/assets/cms/docs/QuickstartsXAP/QuickStartsPhone_Animations4.xap" /><param name="minRuntimeVersion" value="2.0.31005.0" /><param name="background" value="White" /><param name="autoUpgrade" value="true" /><a href="http://go.microsoft.com/fwlink/?LinkID=149156&amp;v=2.0.31005.0" style="text-decoration: none;"> <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style: none;" /> </a> </object></p>
<p><b>XAML</b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:fff1a809-8d4f-4936-aff0-4c3bda7ef531" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;">
<li><span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">StackPanel</span><span style="color: #ff0000;"> Background</span><span style="color: #0000ff;">="#FDF5E6"&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">StackPanel.Resources</span><span style="color: #0000ff;">&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Storyboard</span><span style="color: #ff0000;"> x</span><span style="color: #0000ff;">:</span><span style="color: #ff0000;">Name</span><span style="color: #0000ff;">="myStoryboard"&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">DoubleAnimationUsingKeyFrames</span><span style="color: #ff0000;"> Storyboard.TargetName</span><span style="color: #0000ff;">="myRectangle"</span><span style="color: #ff0000;"> Storyboard.TargetProperty</span><span style="color: #0000ff;">="Height"&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #008000;">&lt;!-- This key frame resets the animation to its starting value (30) at the beginning of the animation. --&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">LinearDoubleKeyFrame</span><span style="color: #ff0000;"> Value</span><span style="color: #0000ff;">="30"</span><span style="color: #ff0000;"> KeyTime</span><span style="color: #0000ff;">="0:0:0" /&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #008000;">&lt;!-- Spline animations are used to create acceleration. This </span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">SplineDoubleKeyFrame creates an animation that starts out slow</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">and then speeds up. The rectangle "falls". --&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">SplineDoubleKeyFrame</span><span style="color: #ff0000;"> KeySpline</span><span style="color: #0000ff;">="0,0 1,0"</span><span style="color: #ff0000;"> Value</span><span style="color: #0000ff;">="300"</span><span style="color: #ff0000;"> KeyTime</span><span style="color: #0000ff;">="0:0:0.8" /&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #008000;">&lt;!-- This spline animation creates the "bounce" at the end where</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">the rectangle shortens its length quickly at first and then</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">slows down and stops. --&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">SplineDoubleKeyFrame</span><span style="color: #ff0000;"> KeySpline</span><span style="color: #0000ff;">="0.10, 0.21 0.00, 1.0"</span><span style="color: #ff0000;"> Value</span><span style="color: #0000ff;">="250"</span><span style="color: #ff0000;"> KeyTime</span><span style="color: #0000ff;">="0:0:1.5" /&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">DoubleAnimationUsingKeyFrames</span><span style="color: #0000ff;">&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">Storyboard</span><span style="color: #0000ff;">&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">StackPanel.Resources</span><span style="color: #0000ff;">&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Rectangle</span><span style="color: #ff0000;"> x</span><span style="color: #0000ff;">:</span><span style="color: #ff0000;">Name</span><span style="color: #0000ff;">="myRectangle"</span><span style="color: #ff0000;"> MouseLeftButtonUp</span><span style="color: #0000ff;">="Rectangle_Tapped"</span><span style="color: #ff0000;"> Fill</span><span style="color: #0000ff;">="Blue"</span><span style="color: #ff0000;"> Width</span><span style="color: #0000ff;">="200"</span><span style="color: #ff0000;"> Height</span><span style="color: #0000ff;">="30" /&gt;</span></li>
<li><span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">StackPanel</span><span style="color: #0000ff;">&gt;</span></li>
</ol></div>
</div>
</div>
<p><b>C# <br /></b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:a276c299-b36c-46d8-99aa-58493d581953" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 400px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;">
<li><span style="color: #008000;">// When the user taps the rectangle, the animation begins.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">private</span> <span style="color: #0000ff;">void</span> Rectangle_Tapped(<span style="color: #0000ff;">object</span> sender, <span style="color: #2b91af;">MouseEventArgs</span> e)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myStoryboard.Begin();</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
</ol></div>
</div>
</div>
<p><b>Visual Basic <br /></b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:ed44d029-cd01-47b7-8644-a3678646330d" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;">
<li><span style="color: #008000;">' When the user taps the rectangle, the animation begins.</span></li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> Rectangle_Tapped(sender <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Object</span>, e <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">MouseEventArgs</span>)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;myStoryboard.Begin()</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></li>
</ol></div>
</div>
</div>
<p>Le XAML suivant inclut trois Key-Frames. Chaque key-frame sp&eacute;cifie une valeur anim&eacute;e pour un certain temps. L&rsquo;animation enti&egrave;re prend donc 1,5 seconde.</p>
<ul>
<li>La premi&egrave;re key-frame de cet exemple est un <a href="http://msdn.microsoft.com/en-us/library/system.windows.media.animation.lineardoublekeyframe.aspx">LinearDoubleKeyFrame</a>. Les objets tels que le <a href="http://msdn.microsoft.com/en-us/library/system.windows.media.animation.lineardoublekeyframe.aspx">LinearDoubleKeyFrame</a> cr&eacute;ent une transition lin&eacute;aire entre les valeurs. Cependant ici, cela est utilis&eacute; pour sp&eacute;cifier que l&rsquo;animation est &agrave; une valeur de 30 au temps 0.</li>
<li>La deuxi&egrave;me key-frame dans cet exemple est un <a href="http://msdn.microsoft.com/en-us/library/system.windows.media.animation.splinedoublekeyframe(VS.95).aspx">SplineDoubleKeyFrame</a> qui sp&eacute;cifie que la hauteur (Height) d&rsquo;un Rectangle est &agrave; 300 au temps 0,8 seconde apr&egrave;s que l&rsquo;animation ait commenc&eacute;. Les objets de type <a href="http://msdn.microsoft.com/en-us/library/system.windows.media.animation.splinedoublekeyframe(VS.95).aspx">SplineDoubleKeyFrame</a> tels que <a href="http://msdn.microsoft.com/en-us/library/system.windows.media.animation.splinedoublekeyframe(VS.95).aspx">SplineDoubleKeyFrame</a> cr&eacute;ent une variable de transition entre les valeurs selon la valeur de la propri&eacute;t&eacute; <a href="http://msdn.microsoft.com/en-us/library/system.windows.media.animation.splinedoublekeyframe.keyspline(v=VS.95).aspx">KeySpline</a>. Ici, le Rectangle commence par se d&eacute;placer doucement et avance jusqu&rsquo;&agrave; la fin du temps du segment.</li>
<li>La troisi&egrave;me key-frame dans cet exemple est un <a href="http://msdn.microsoft.com/en-us/library/system.windows.media.animation.splinedoublekeyframe(VS.95).aspx">SplineDoubleKeyFrame</a> qui sp&eacute;cifie que la hauteur (Height) du Rectangle est de 250 au temps de 1,5 seconde apr&egrave;s que l&rsquo;animation ait commenc&eacute; (0,7 seconde apr&egrave;s que le dernier <a href="http://msdn.microsoft.com/en-us/library/system.windows.media.animation.splinedoublekeyframe(VS.95).aspx">SplineDoubleKeyFrame</a> se termine). En contraste avec le pr&eacute;c&eacute;dent <a href="http://msdn.microsoft.com/en-us/library/system.windows.media.animation.splinedoublekeyframe(VS.95).aspx">SplineDoubleKeyFrame</a> ce key-frame fait que l&rsquo;animation d&eacute;marre rapidement et ralentit jusqu&rsquo;&agrave; la fin.</li>
<li>La propri&eacute;t&eacute; la plus astucieuse utilis&eacute;e par le <a href="http://msdn.microsoft.com/en-us/library/system.windows.media.animation.splinedoublekeyframe(VS.95).aspx">SplineDoubleKeyFrame</a> est la propri&eacute;t&eacute; <a href="http://msdn.microsoft.com/en-us/library/system.windows.media.animation.splinedoublekeyframe.keyspline(v=VS.95).aspx">KeySpline</a>. Elle sp&eacute;cifie les premiers et deuxi&egrave;mes points de contr&ocirc;le d&rsquo;une courbe de B&eacute;zier, qui d&eacute;crit l&rsquo;acc&eacute;l&eacute;ration de l&rsquo;animation.</li>
</ul>
<p><object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="560" height="400" autoupdate="true"><param name="source" value="http://create.msdn.com/assets/cms/docs/QuickstartsXAP/KeySplineExample.xap" /><param name="minRuntimeVersion" value="2.0.31005.0" /><param name="background" value="White" /><param name="autoUpgrade" value="true" /><a href="http://go.microsoft.com/fwlink/?LinkID=149156&amp;v=2.0.31005.0" style="text-decoration: none;"> <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style: none;" /> </a> </object></p>
<p><strong>Remarque</strong></p>
<p><a name="easing_functions"></a>Pour en apprendre plus sur les &laquo; key splines &raquo; et les courbes de B&eacute;zier, ex&eacute;cutez cet <a href="http://go.microsoft.com/fwlink/?LinkId=129172" target="_blank">exemple Windows Presentation Foundation</a> ou allez voir &agrave; la section <a href="http://go.microsoft.com/fwlink/?LinkId=129174" target="_blank">Key-Frame Animations</a> dans la librairie MSDN.</p>
<p><a name="easing_functions"></a></p>
<h2>Animer en utilisant les Easing Functions</h2>
<p>Les Easing Functions vous permettent d&rsquo;appliquer des formules de math&eacute;matiques personnalis&eacute;es pour votre animation. Par exemple, vous aimeriez qu&rsquo;un objet rebondisse ou se comporte comme s&rsquo;il &eacute;tait sur ressort. Vous pouvez utiliser les animations de type Key-Frame ou m&ecirc;me From/To/By pour approximer ces effets, mais cela prendrait une somme significative de temps et de travail, et l&rsquo;animation serait moins efficace qu&rsquo;en utilisant une formule math&eacute;matique.</p>
<p>Outre le fait de cr&eacute;er votre propre Easing Function en impl&eacute;mentant l&rsquo;interface <a href="http://msdn.microsoft.com/en-us/library/system.windows.media.animation.ieasingfunction(VS.95).aspx" target="_blank">IEasingFunction</a>, vous pouvez utiliser une des plusieurs Easing Functions fournies par le runtime pour cr&eacute;er des effets communs. L&rsquo;exemple suivant montre les Easing Function qui sont fournies avec le runtime. S&eacute;lectionnez une Easing Function dans la liste d&eacute;roulante, d&eacute;finissez ses propri&eacute;t&eacute;s, puis ex&eacute;cutez l&rsquo;animation. Le code XAML pour l&rsquo;animation est affich&eacute; sur le coin inf&eacute;rieur droit de l&rsquo;exemple.</p>
<p>L&rsquo;exemple suivant montre comment utiliser une animation Key Frame pour animer la hauteur (Height) d&rsquo;un <a href="http://msdn.microsoft.com/en-us/library/ms615650(v=VS.95).aspx" target="_blank">Rectangle</a>. Pour essayer cet exemple, cliquez sur le <a href="http://msdn.microsoft.com/en-us/library/ms615650(v=VS.95).aspx" target="_blank">Rectangle</a> pour voir l&rsquo;effet.</p>
<p><object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="650" height="700" autoupdate="true"><param name="source" value="http://create.msdn.com/assets/cms/docs/QuickstartsXAP/easment_functions.xap" /><param name="minRuntimeVersion" value="2.0.31005.0" /><param name="background" value="White" /><param name="autoUpgrade" value="true" /><a href="http://go.microsoft.com/fwlink/?LinkID=149156&amp;v=2.0.31005.0" style="text-decoration: none;"> <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style: none;" /> </a> </object></p>
<p>Ci-dessous une liste des Easing Functions d&eacute;montr&eacute;es dans l&rsquo;exemple ci-dessus avec un rapide r&eacute;sum&eacute; de ce qu&rsquo;elles font :</p>
<ul>
<li><a href="http://go.microsoft.com/fwlink/?LinkId=147761">BackEase</a>: R&eacute;tracte les mouvements d&rsquo;une animation avant qu&rsquo;ils commencent &agrave; s&rsquo;animer sur le chemin indiqu&eacute;.</li>
<li><a href="http://go.microsoft.com/fwlink/?LinkId=147763">BounceEase</a>: Cr&eacute;&eacute;e un effet de rebondissement</li>
<li><a href="http://go.microsoft.com/fwlink/?LinkId=147765">CircleEase</a>: Cr&eacute;&eacute;e une animation qui acc&eacute;l&egrave;re et / ou d&eacute;c&eacute;l&egrave;re en utilisant une fonction circulaire.</li>
<li><a href="http://go.microsoft.com/fwlink/?LinkId=147767">CubicEase</a>: Cr&eacute;&eacute;e une animation qui acc&eacute;l&egrave;re et / ou d&eacute;c&eacute;l&egrave;re en utilisant la formule f(t) = t3.</li>
<li><a href="http://go.microsoft.com/fwlink/?LinkId=147768">ElasticEase</a>: Cr&eacute;&eacute;e une animation qui a un ressort oscillant d&rsquo;avant en arri&egrave;re jusqu&rsquo;&agrave; ce qu&rsquo;il s&rsquo;immobilise.</li>
<li><a href="http://go.microsoft.com/fwlink/?LinkId=147769">ExponentialEase</a>: Cr&eacute;&eacute;e une animation qui acc&eacute;l&egrave;re et / ou d&eacute;c&eacute;l&egrave;re en utilisant une formule exponentielle.</li>
<li><a href="http://go.microsoft.com/fwlink/?LinkId=147770">PowerEase</a>: Cr&eacute;&eacute;e une animation qui acc&eacute;l&egrave;re et /ou d&eacute;c&eacute;l&egrave;re en utilisant la formule f(t) = tp o&ugrave; p est &eacute;gal &agrave; la propri&eacute;t&eacute; puissance.</li>
<li><a href="http://go.microsoft.com/fwlink/?LinkId=147771">QuadraticEase</a>: Cr&eacute;&eacute;e une animation qui acc&eacute;l&egrave;re et / ou d&eacute;c&eacute;l&egrave;re en utilisant la formule f(t)= t2</li>
<li><a href="http://go.microsoft.com/fwlink/?LinkId=147772">QuarticEase</a>: Cr&eacute;&eacute;e une animation qui acc&eacute;l&egrave;re et / ou d&eacute;c&eacute;l&egrave;re en utilisant la formule f(t) = t4</li>
<li><a href="http://go.microsoft.com/fwlink/?LinkId=147773">QuinticEase</a>: Cr&eacute;&eacute;e une animation qui acc&eacute;l&egrave;re et / ou d&eacute;c&eacute;l&egrave;re en utilisant la formule f(t) = t5</li>
<li><a href="http://go.microsoft.com/fwlink/?LinkId=147774">SineEase</a>: Cr&eacute;&eacute;e une animation qui acc&eacute;l&egrave;re et / ou d&eacute;c&eacute;l&egrave;re en utilisant une formule sinus.</li>
</ul>
<p>Dans l&rsquo;exemple pr&eacute;c&eacute;dent, les Easing Functions sont appliqu&eacute;es pour une animation From/To/By. Vous pouvez aussi appliquer ces Easing Functions aux animations Key Frame en utilisant les objets suivants :</p>
<ul>
<li><a href="http://go.microsoft.com/fwlink/?LinkId=147793">EasingDoubleKeyFrame</a></li>
<li><a href="http://go.microsoft.com/fwlink/?LinkId=147792">EasingPointKeyFrame</a></li>
<li><a href="http://go.microsoft.com/fwlink/?LinkId=147796">EasingColorKeyFrame</a></li>
</ul>
<p>L&rsquo;exemple suivant montre comment utiliser les Key Frames avec les Easing Functions qui leurs sont associ&eacute;es pour cr&eacute;er l&rsquo;animation d&rsquo;un <a href="http://msdn.microsoft.com/en-us/library/ms615650(v=VS.95).aspx" target="_blank">Rectangle</a> qui se contracte, ralentit, puis s&rsquo;&eacute;tend vers le bas (comme s&rsquo;il chutait) et puis rebondit jusqu&rsquo;&agrave; s&rsquo;arr&ecirc;ter. Pour essayer cet exemple, cliquez sur le <a href="http://msdn.microsoft.com/en-us/library/ms615650(v=VS.95).aspx" target="_blank">Rectangle</a> pour voir l&rsquo;effet.</p>
<p><object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="650" height="520" autoupdate="true"><param name="source" value="http://create.msdn.com/assets/cms/docs/QuickstartsXAP/QuickStartsPhone_Animation6.xap" /><param name="minRuntimeVersion" value="2.0.31005.0" /><param name="background" value="White" /><param name="autoUpgrade" value="true" /><a href="http://go.microsoft.com/fwlink/?LinkID=149156&amp;v=2.0.31005.0" style="text-decoration: none;"> <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style: none;" /> </a> </object></p>
<p><b>XAML</b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:cde377d0-529a-4f06-9b7e-3fd54657f3d9" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 500px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">StackPanel</span><span style="color: #ff0000;"> x</span><span style="color: #0000ff;">:</span><span style="color: #ff0000;">Name</span><span style="color: #0000ff;">="LayoutRoot"</span><span style="color: #ff0000;"> Background</span><span style="color: #0000ff;">="White"&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">StackPanel.Resources</span><span style="color: #0000ff;">&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Storyboard</span><span style="color: #ff0000;"> x</span><span style="color: #0000ff;">:</span><span style="color: #ff0000;">Name</span><span style="color: #0000ff;">="myStoryboard"&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">DoubleAnimationUsingKeyFrames</span><span style="color: #ff0000;"> Storyboard.TargetProperty</span><span style="color: #0000ff;">="Height"</span><span style="color: #ff0000;"> Storyboard.TargetName</span><span style="color: #0000ff;">="myRectangle"&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #008000;">&lt;!-- This keyframe animates the ellipse up to the crest where it slows down and stops. --&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">EasingDoubleKeyFrame</span><span style="color: #ff0000;"> Value</span><span style="color: #0000ff;">="30"</span><span style="color: #ff0000;"> KeyTime</span><span style="color: #0000ff;">="00:00:02"&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">EasingDoubleKeyFrame.EasingFunction</span><span style="color: #0000ff;">&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">CubicEase</span><span style="color: #ff0000;"> EasingMode</span><span style="color: #0000ff;">="EaseOut"/&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">EasingDoubleKeyFrame.EasingFunction</span><span style="color: #0000ff;">&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">EasingDoubleKeyFrame</span><span style="color: #0000ff;">&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #008000;">&lt;!-- This keyframe animates the ellipse back down and makes it bounce. --&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">EasingDoubleKeyFrame</span><span style="color: #ff0000;"> Value</span><span style="color: #0000ff;">="200"</span><span style="color: #ff0000;"> KeyTime</span><span style="color: #0000ff;">="00:00:06"&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">EasingDoubleKeyFrame.EasingFunction</span><span style="color: #0000ff;">&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">BounceEase</span><span style="color: #ff0000;"> Bounces</span><span style="color: #0000ff;">="5"</span><span style="color: #ff0000;"> EasingMode</span><span style="color: #0000ff;">="EaseOut"/&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">EasingDoubleKeyFrame.EasingFunction</span><span style="color: #0000ff;">&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">EasingDoubleKeyFrame</span><span style="color: #0000ff;">&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">DoubleAnimationUsingKeyFrames</span><span style="color: #0000ff;">&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">Storyboard</span><span style="color: #0000ff;">&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">StackPanel.Resources</span><span style="color: #0000ff;">&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Rectangle</span><span style="color: #ff0000;"> x</span><span style="color: #0000ff;">:</span><span style="color: #ff0000;">Name</span><span style="color: #0000ff;">="myRectangle"</span><span style="color: #ff0000;"> MouseLeftButtonUp</span><span style="color: #0000ff;">="Rectangle_Tapped"</span><span style="color: #ff0000;"> Fill</span><span style="color: #0000ff;">="Blue"</span><span style="color: #ff0000;"> Width</span><span style="color: #0000ff;">="200"</span><span style="color: #ff0000;"> Height</span><span style="color: #0000ff;">="200" /&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">StackPanel</span><span style="color: #0000ff;">&gt;</span></li>
</ol></div>
</div>
</div>
<p><b>C# <br /></b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:16311855-0713-451a-a589-8b90526b29d9" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;">
<li><span style="color: #008000;">// When the user taps the rectangle, the animation begins.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">private</span> <span style="color: #0000ff;">void</span> Rectangle_Tapped(<span style="color: #0000ff;">object</span> sender, <span style="color: #2b91af;">MouseEventArgs</span> e)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myStoryboard.Begin();</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
</ol></div>
</div>
</div>
<p><b>Visual Basic <br /></b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:4fda0942-3454-4d4b-a3be-81acdb2ee4fa" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;">
<li><span style="color: #008000;">' When the user taps the rectangle, the animation begins.</span></li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> Rectangle_Tapped(sender <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Object</span>, e <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">MouseEventArgs</span>)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;myStoryboard.Begin()</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></li>
</ol></div>
</div>
</div>
<p>En plus de l&rsquo;utilisation des Easing Functions, vous pouvez cr&eacute;er vos propres Easing Functions en h&eacute;ritant d&rsquo;EasingFunctionBase. Pour plus d&rsquo;informations, consultez <a href="http://go.microsoft.com/fwlink/?LinkId=156805">EasingFunctionBase</a>.</p>
<p>Voir aussi</p>
<ul>
<li><a href="http://go.microsoft.com/fwlink/?LinkID=111736">Vue d&rsquo;ensemble d&rsquo;une Animation</a></li>
<li><span style="text-decoration: underline;"><a href="http://go.microsoft.com/fwlink/?LinkId=129174" target="_blank">Les animations Key-Frame</a></span></li>
<li><span style="text-decoration: underline;"><a href="http://go.microsoft.com/fwlink/?LinkId=129175" target="_blank">Travailler les animations par programmation</a></span></li>
</ul>]]></content:encoded>
    </item>
    <item>
      <title>Developpement Windows Phone - partie 12</title>
      <link>https://docs.microsoft.com/archive/blogs/patrick_payet/developpement-windows-phone-partie-12</link>
      <pubDate>Tue, 06 Sep 2011 13:12:00 GMT</pubDate>
      <dc:creator><![CDATA[papayet]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/patrick_payet/2011/09/06/developpement-windows-phone-partie-12/</guid>
      <description><![CDATA[Les Notifications Push pour le d&eacute;veloppement Windows Phone
Cet article fait partie...]]></description>
      <content:encoded><![CDATA[<h1>Les Notifications Push pour le d&eacute;veloppement Windows Phone</h1>
<p>Cet article fait partie d&rsquo;une s&eacute;rie d&rsquo;articles sur le d&eacute;veloppement Windows Phone. Il s&rsquo;agit d&rsquo;une traduction des articles se trouvant <a href="http://create.msdn.com/en-us/education/quickstarts" target="_blank">sur la MSDN</a>.</p>
<h2><a name="sommaire"></a>Sommaire</h2>
<p><strong>Bien d&eacute;buter et fondamentaux</strong></p>
<ul>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-1.aspx" target="_blank">Bien d&eacute;marrer (Hello World)</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-2.aspx" target="_blank">Cr&eacute;er une interface utilisateur pour Windows Phone en XAML</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-3.aspx" target="_blank">Utiliser des contr&ocirc;les</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-4.aspx" target="_blank">Types de contr&ocirc;les</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-5.aspx" target="_blank">Contr&ocirc;les Panorama et Pivot</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-6.aspx" target="_blank">Travailler avec du texte sur le Windows Phone</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-7.aspx" target="_blank">Mise en page sur l&rsquo;&eacute;cran</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-8.aspx" target="_blank">Orientations de l&rsquo;&eacute;cran</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-9.aspx" target="_blank">Saisie tactile</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-10.aspx" target="_blank">Navigation</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-11.aspx" target="_blank">Ex&eacute;cuter votre application en arri&egrave;re-plan (tombstoning)</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-12.aspx" target="_blank">Notifications Push pour le d&eacute;veloppement Windows Phone</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-13.aspx" target="_blank">Publier votre application sur le Marketplace</a></li>
</ul>
<p><strong>Visuels et m&eacute;dia</strong></p>
<ul>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-14.aspx" target="_blank">Images</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-15.aspx" target="_blank">Animations</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-16.aspx" target="_blank">Vid&eacute;o et Audio</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-17.aspx" target="_blank">Graphiques</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-18.aspx" target="_blank">Pinceaux</a></li>
</ul>
<p><strong>Travailler avec les donn&eacute;es</strong></p>
<ul>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-19.aspx" target="_blank">Obtenir des donn&eacute;es dans vos applications Windows Phone</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-20.aspx" target="_blank">Data binding</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-21.aspx" target="_blank">Isolated storage</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-22.aspx" target="_blank">Acc&eacute;der &agrave; un service Web REST</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-23.aspx" target="_blank">Consommer des donn&eacute;es Windows Azure</a></li>
</ul>
<p><strong>Sondes et autres fonctionnalit&eacute;s sp&eacute;cifiques au t&eacute;l&eacute;phone</strong></p>
<ul>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-24.aspx" target="_blank">Lanceurs et choosers</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-25.aspx" target="_blank">D&eacute;tecter des mouvements (acc&eacute;l&eacute;rom&egrave;tres)</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-26.aspx" target="_blank">D&eacute;velopper avec le GPS Windows Phone (Services de localisation)</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-27.aspx" target="_blank">D&eacute;velopper avec l&rsquo;appareil photo du Windows Phone</a></li>
</ul>
<hr />
<h1>Les Notifications Push pour le d&eacute;veloppement Windows Phone</h1>
<p>Les applications Windows Phone 7 peuvent recevoir des messages d&rsquo;Internet qui sont envoy&eacute;s par un serveur, gr&acirc;ce &agrave; l&rsquo;utilisation des Notifications Push. Ces notifications peuvent &ecirc;tre re&ccedil;ues par l&rsquo;utilisateur m&ecirc;me si l&rsquo;application n&rsquo;est pas en marche. Les Notifications Push sont relay&eacute;es aux p&eacute;riph&eacute;riques Windows Phone 7 par le service de notification de Microsoft (MPNS: Microsoft Push Notification Service)</p>
<p>Ce tutoriel contient les sections suivantes: </p>
<ul>
<li><a href="#video">La solution en vid&eacute;o</a></li>
<li><a href="#overview">Vue d&rsquo;ensemble des Notifications Push</a></li>
<li><a href="#webservice">Cr&eacute;er un web service qui renvoie des Notifications Push</a></li>
<li><a href="#azure">Publier votre web service sur Windows Azure</a></li>
<li><a href="#phoneapp">Cr&eacute;er une application mobile qui re&ccedil;oit des Notifications Push</a></li>
<li><a href="#testing">Tester ce tutoriel</a></li>
</ul>
<p><a href="http://archive.msdn.microsoft.com/silverlightforphone/Release/ProjectReleases.aspx?ReleaseId=5522">T&eacute;l&eacute;charger les sources compl&egrave;tes de ce tutoriel </a> </p>
<h2><a name="video"></a>La solution en vid&eacute;o</h2>
<p>Pour voir un exemple de cette application en marche, et pour consulter ce tutoriel en suivant une vid&eacute;o plut&ocirc;t que de continuer sur la lecture de cet article, vous pouvez regarder la vid&eacute;o ci-dessous. <span style="text-decoration: underline;"><a href="https://channel9.msdn.com/posts/Windows-Phone-7-Push-Notification-QuickApp--Web-Service-With-Azure-Publishing-Instructions">Sur cette page de Channel9</a></span>, la vid&eacute;o poss&egrave;de plusieurs options de t&eacute;l&eacute;chargement si vous souhaitez t&eacute;l&eacute;charger une version qui peut &ecirc;tre lue sur des appareils (t&eacute;l&eacute;phones, tablettes, etc..) plut&ocirc;t que sur un ordinateur, ou si le flux de la vid&eacute;o n&rsquo;est pas optimis&eacute; pour vous. <br /> <br /><object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="636" height="358" autoupdate="true"><param name="source" value="https://channel9.msdn.com/scripts/VideoPlayer.xap?v=2.1" /><param name="minRuntimeVersion" value="2.0.31005.0" /><param name="background" value="White" /><param name="autoUpgrade" value="true" /><a href="http://go.microsoft.com/fwlink/?LinkID=149156&amp;v=2.0.31005.0" style="text-decoration: none;"> <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style: none;" /> </a> </object></p>
<h2><a name="overview"></a>Vue d&rsquo;ensemble des Notifications Push</h2>
<p>Le service de Notification de Push de Microsoft pour Windows Phone (MPNS) offre aux tiers d&eacute;veloppeurs un canal d&eacute;di&eacute; et persistant pour envoyer des informations et des mises &agrave; jour &agrave; une application mobile &agrave; partir d&rsquo;un web service. Dans le pass&eacute;, une application mobile aurait eu besoin d&rsquo;effectuer plusieurs requ&ecirc;tes au web service correspondant pour savoir s&rsquo;il y a des notifications en attente. Bien que cela soit efficace, un usage fr&eacute;quent de requ&ecirc;tes fait que l&rsquo;on utilise le p&eacute;riph&eacute;rique radio et que par cons&eacute;quent nous r&eacute;duisons la dur&eacute;e de vie de la batterie. En utilisant les Notifications Push au lieu que d&rsquo;utiliser le polling (requ&ecirc;tage intensif vers un web service), un web service peut notifier une application de mises &agrave; jour importantes sur une base as-needed.</p>
<p>Quand un web service a une information &agrave; envoyer &agrave; une application, il envoie une notification au service de Notification de Push, qui &agrave; son tour route celle-ci &agrave; l&rsquo;application. Selon le format de la Notification Push et de la charge li&eacute;e, l&rsquo;information est livr&eacute;e sous forme de donn&eacute;es brutes &agrave; l&rsquo;application, les Tiles de celle-ci sont visuellement mises &agrave; jour, ou une notification toast est affich&eacute;e. L&rsquo;application peut alors communiquer avec un web service en utilisant son propre protocole si n&eacute;cessaire.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/3438.image_1E5BAB46.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/3438.image_5F00_1E5BAB46.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/6175.image_thumb_268FD0DD.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/6175.image_5F00_thumb_5F00_268FD0DD.png" width="765" height="323" /></a></p>
<p>Voici les types de Notifications Push supports par Windows Phone 7 avec quelques grandes lignes &agrave; garder en t&ecirc;te pour chacune.</p>
<p><b>Les notifications Tile:</b></p>
<ul>
<li>Mettent &agrave; jour le Live Tile pour l&rsquo;application pr&eacute;sente sur l&rsquo;&eacute;cran de d&eacute;marrage, changement du graphique, du titre du Tile, et affichage de l&rsquo;int&eacute;gration d&rsquo;un compteur</li>
<li>Sont toujours re&ccedil;ues quand l&rsquo;application est en marche, soyez donc prudent aux anciens Live Tiles.</li>
<li>Doivent avoir un poids de 80k ou moins et &ecirc;tre t&eacute;l&eacute;charg&eacute;es en 15 secondes ou moins.</li>
</ul>
<p><b>Les notifications Raw:</b></p>
<ul>
<li>Peuvent &ecirc;tre utilis&eacute;es pour n&rsquo;importe quoi, mais avoir une limite de poids de 1K, sinon vous devrez fournir des URIs pour n&rsquo;importe quels binaires et g&eacute;rer le t&eacute;l&eacute;chargement s&eacute;par&eacute;ment.</li>
<li>Peuvent &ecirc;tre re&ccedil;ues que lorsque l&rsquo;application est en marche.</li>
<li>D&eacute;clenchent une r&eacute;action non perceptible de l&rsquo;utilisateur sur le t&eacute;l&eacute;phone, sauf si le code de l&rsquo;application permet de le faire.</li>
</ul>
<p><b>Les notifications Toast:</b></p>
<ul>
<li>Contiennent un message court avec un sujet et un corps.</li>
<li>Si l&rsquo;application n&rsquo;est pas d&eacute;marr&eacute;e, les notifications Toast se mettront en haut de l&rsquo;affichage, superposant ce qu&rsquo;il y a sur l&rsquo;&eacute;cran.</li>
<li>Si l&rsquo;application est en marche, les notifications Toast ne d&eacute;clencheront pas de r&eacute;action perceptible de l&rsquo;utilisateur sur le t&eacute;l&eacute;phone, sauf si le code permet de le faire.</li>
</ul>
<p>Il y a une limite quotidienne de 500 push par URI sauf si vous t&eacute;l&eacute;chargez un certificat TLS pour votre compte de d&eacute;veloppeur sur AppHub.com et que vous l&rsquo;utilisez pour authentifier votre WebService avec MPNS. Pour plus d&rsquo;informations, consultez la proc&eacute;dure : <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/ff941099(v=vs.92).aspx">Configurer un WebService s&eacute;curis&eacute; pour Windows Phone</a>. <br /></span></p>
<p><a id="webservice" name="webservice"></a></p>
<h2>Cr&eacute;er un web service qui envoie des Notifications Push</h2>
<p><b>Si vous envisagez de publier votre web service sur Windows Azure, suivez ces &eacute;tapes: <br /></b></p>
<ol>
<li><a href="http://go.microsoft.com/fwlink/?LinkID=206204">Installez la derni&egrave;re version du SDK de Windows Azure </a>et inscrivez-vous pour un essai gratuit ou classique &agrave; un compte Azure.</li>
<li>Apr&egrave;s installation de SDK Azure, d&eacute;marrez un nouveau projet dans Visual Studio en utilisant le mod&egrave;le de projet "Cloud", et s&eacute;lectionnez "Windows Azure Project," en lui donnant un nom de projet.</li>
<li>Ajoutez un &ldquo;WCF Service Web Role&rdquo; &agrave; la solution Windows Azure, &eacute;ditez alors le nom. Entrez un nom diff&eacute;rent pour le Role que ce qui &eacute;tait entr&eacute; pour le projet Windows Azure.Dans cet exemple, le r&ocirc;le est nomm&eacute; "PushService," qui cr&eacute;era un web service avec ce m&ecirc;me nom qui sera utilis&eacute; par d&eacute;faut pour son namespace.</li>
</ol>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/8304.image_38F82192.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/8304.image_5F00_38F82192.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/8132.image_thumb_6F1999E1.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/8132.image_5F00_thumb_5F00_6F1999E1.png" width="429" height="270" /></a></p>
<p>Saisissez le nom "PushService" ici g&eacute;n&eacute;rera un namespace avec ce m&ecirc;me nom, comme on le voit dans le code suivant.</p>
<p><b>Si vous ne planifiez pas d&rsquo;utiliser Azure, suivez ces &eacute;tapes:</b></p>
<ol>
<li>Lancez Visual Studio et s&eacute;lectionnez un projet de type "WCF" pour le langage souhait&eacute;. (C# est utilis&eacute; dans l&rsquo;exemple).</li>
<li>S&eacute;lectionnez "WCF Service Application" comme type de projet, et entrez un nom. Dans cet exemple, le projet est nomm&eacute; "PushService," lequel cr&eacute;&eacute; un a web service avec le nom de projet utilis&eacute; pour le namespace par d&eacute;faut.</li>
</ol>
<p>Une fois le projet charg&eacute; dans Visual Studio, ouvrez le fichier <b>IService1.cs</b> et effacez le contenu de la classe <b>Service1</b>.</p>
<p>Dans le fichier <b>IService1.cs</b>, entrez les signatures des quatre m&eacute;thodes, pr&eacute;c&eacute;d&eacute;es par l&rsquo;attribut<b> OperationContract</b>:</p>
<ol>
<li><b>SubscribeMyPhone</b>, recevra un GUID repr&eacute;sentant l&rsquo;ID du t&eacute;l&eacute;phone qui s&rsquo;inscrit pour recevoir les Notifications Push de ce service, et un objet URI repr&eacute;sentant l&rsquo;URL du service de Notification de Push de Microsoft &agrave; laquelle les Notifications Push seront relay&eacute;es pour &ecirc;tre re&ccedil;ues par ce t&eacute;l&eacute;phone.</li>
<li><b>PushRawData</b>, recevra un message qui sera envoy&eacute; comme notification Raw &agrave; tous les t&eacute;l&eacute;phones qui se seront inscrits au service par un pr&eacute;c&eacute;dent appel &agrave; la m&eacute;thode <b>SubscribeMyPhone</b></li>
<li><b>PushToast</b>, recevra un message qui sera envoy&eacute; comme une notification Toast &agrave; tous les t&eacute;l&eacute;phones qui se seront inscrits au service par un pr&eacute;c&eacute;dent appel &agrave; la m&eacute;thode <b>SubscribeMyPhone</b>.</li>
<li><b>PushTileUpdate</b>, recevra les param&egrave;tres d&eacute;finissant une mise &agrave; jour du Tile qui sera envoy&eacute; &agrave; tous les t&eacute;l&eacute;phones qui se seront inscrits au service par un pr&eacute;c&eacute;dent appel &agrave; la m&eacute;thode <b>SubscribeMyPhone</b>.</li>
</ol>
<p>Le contenu final du fichier <b>IService1.cs</b> apr&egrave;s la saisie de ces m&eacute;thodes sera comme suit:</p>
<p><b>C# (IService1.cs) <br /></b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:3c816b58-7640-44d3-8242-539609ffe445" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">using</span> System;</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">using</span> System.Collections.Generic;</li>
<li><span style="color: #0000ff;">using</span> System.Linq;</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">using</span> System.Runtime.Serialization;</li>
<li><span style="color: #0000ff;">using</span> System.ServiceModel;</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">using</span> System.ServiceModel.<span style="color: #ff0000;">Web</span>;</li>
<li><span style="color: #0000ff;">using</span> System.Text;</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">namespace</span> PushService</li>
<li>{</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;[<span style="color: #ff0000;">ServiceContract</span>]</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">interface</span> <span style="color: #2b91af;">IService1</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[<span style="color: #ff0000;">OperationContract</span>]</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">void</span> SubscribeMyPhone(<span style="color: #2b91af;">Guid</span> phoneID, <span style="color: #0000ff;">string</span> channelURI);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[<span style="color: #ff0000;">OperationContract</span>]</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">void</span> PushRawData(<span style="color: #0000ff;">string</span> rawMessage);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[<span style="color: #ff0000;">OperationContract</span>]</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">void</span> PushToast(<span style="color: #0000ff;">string</span> toastTitle, <span style="color: #0000ff;">string</span> toastMessage);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;[<span style="color: #ff0000;">OperationContract</span>]</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">void</span> PushTileUpdate(<span style="color: #0000ff;">string</span> tileTitle, <span style="color: #0000ff;">int</span> tileCount, <span style="color: #0000ff;">string</span> tileImageURI);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li style="background: #f3f3f3;">}</li>
</ol></div>
</div>
</div>
<p>Dans le fichier <b>Service1.svc.cs</b>, nous saisirons le code qui impl&eacute;mente ces m&eacute;thodes dans la classe par d&eacute;faut, nomm&eacute;e Service1, qui est dans namespace par d&eacute;faut &laquo; <b>PushService</b> &raquo;. La classe <b>Service1</b> contient les impl&eacute;mentations des membres suivants :</p>
<ol>
<li><b>SubcsriptionURIs</b> est un dictionnaire <b>&lt;Guid, Uri&gt;</b> qui suit les GUID des t&eacute;l&eacute;phones qui ont appel&eacute; la m&eacute;thode <b>SubsribeMyPhone</b> et ont fourni une URI par laquelle ils peuvent recevoir des Notifications Push.</li>
<li><b>BatchingIntervalValues</b> est un Enum qui d&eacute;finit diff&eacute;rents temps d&rsquo;attente qui peuvent &ecirc;tre utilis&eacute;s pour retarder une Notification Push qui sera envoy&eacute;e au t&eacute;l&eacute;phone &agrave; partir du service de notification.</li>
<li><b>SendPushToSubscribedURIs</b> est une m&eacute;thode qui re&ccedil;oit la sortie des quatres m&eacute;thodes que nous avons d&eacute;finies dans le fichier IService1.cs, les packages dans le corps d&rsquo;un paquet HTTP POST qui poss&egrave;de un en-t&ecirc;te personnalis&eacute; qui active les fonctionnalit&eacute;s Notification Push et envoie un paquet final pour toutes les URI d&eacute;finies dans le dictionnaire <b>SubscriptionURIs</b>. Ces URIs sont fournies par le service de Notification Push de Microsoft relayeront les messages aux t&eacute;l&eacute;phones destin&eacute;s.</li>
<li><b>SubscribeMyPhone</b> sera impl&eacute;ment&eacute; pour mettre &agrave; jour <b>SubscripitionURIs</b> avec les donn&eacute;es entrantes des URIs.</li>
<li><b>PushRawData</b> sera impl&eacute;ment&eacute; pour encoder les messages entrants comme un tableau de byte[] et enverra le r&eacute;sultat &agrave; <b>sendPushToSubscribedURIs</b></li>
<li><b>PushToast</b> sera impl&eacute;ment&eacute; pour encoder le message entrant dans un flux XML avec une structure sp&eacute;cifique que le service de Notification Push de Microsoft attendra, et enverra le r&eacute;sultat &agrave; <b>sendPushToSubscribedURIs</b></li>
<li><b>PushTileUpdate</b> sera impl&eacute;ment&eacute; pour encoder les donn&eacute;es entrantes de type Tile Update dans un flux XML avec une structure sp&eacute;cifique que le service de Notification Push de Microsoft attendra, et enverra le r&eacute;sultat &agrave; <b>sendPushToSubscribedURIs</b></li>
</ol>
<p>Une fois termin&eacute; le fichier ressemblera &agrave; cela :</p>
<p><b>C# (Service1.svc.cs)</b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:c2aad763-4bed-45d8-aed9-bbae85ff7b27" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 3em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">using</span> System;</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">using</span> System.Collections.Generic;</li>
<li><span style="color: #0000ff;">using</span> System.Linq;</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">using</span> System.Runtime.Serialization;</li>
<li><span style="color: #0000ff;">using</span> System.ServiceModel;</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">using</span> System.ServiceModel.<span style="color: #ff0000;">Web</span>;</li>
<li><span style="color: #0000ff;">using</span> System.Text;</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">using</span> System.Xml;</li>
<li><span style="color: #0000ff;">using</span> System.IO;</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">using</span> System.Net;</li>
<li><span style="color: #0000ff;">namespace</span> PushService</li>
<li style="background: #f3f3f3;">{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">class</span> <span style="color: #2b91af;">Service1</span> : <span style="color: #ff0000;">IService1</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//Custom constructor</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">public</span> Service1()</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//</span><span style="color: #00008b;">TODO: Load from database into SubscriptionURIs here.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//Data members.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//This tracks the devices-to-channelURI list, which gets updated by calls to</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//SubscribeMyPhone();</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">private</span> <span style="color: #0000ff;">static</span> <span style="color: #2b91af;">Dictionary</span>&lt;<span style="color: #2b91af;">Guid</span>, Uri&gt; SubscriptionURIs = <span style="color: #0000ff;">new</span> <span style="color: #2b91af;">Dictionary</span>&lt;<span style="color: #2b91af;">Guid</span>, Uri&gt;();</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//This overwrites/creates entries for each phone that wants to receive Push Notifications.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//</span><span style="color: #00008b;">Note: This list is reset whenever application restarts -- in real life, you will want</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//to store this data from the SubscriptionURIs list into a database so it persists. Hence,</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//there are </span><span style="color: #00008b;">TODO sections in this code.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span> SubscribeMyPhone(<span style="color: #2b91af;">Guid</span> phoneID, <span style="color: #0000ff;">string</span> channelURI)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Uri thisURI = <span style="color: #0000ff;">new</span> Uri(channelURI);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">if</span> (SubscriptionURIs.ContainsKey(phoneID))</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//update the existing URI entry for this phone, if need be</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SubscriptionURIs[phoneID] = thisURI;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">else</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//otherwise, add a subscription for this phone</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SubscriptionURIs.Add(phoneID, thisURI);</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">// </span><span style="color: #00008b;">TODO: Save this data in a database, otherwise it will be lost on application restart.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//Sends the received text value as a Raw notification -- which can only be received</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//while the subscribed phone app is running. Raw notifications have a size limit of 1K.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span> PushRawData(<span style="color: #0000ff;">string</span> rawMessage)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//Encode the message as a byte[] array as the Notification Service Expects.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.Text.<span style="color: #2b91af;">UTF8Encoding</span> encoding = <span style="color: #0000ff;">new</span> <span style="color: #2b91af;">UTF8Encoding</span>();</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//Send this message to all subscribed devices.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sendPushToSubscribedURIs(encoding.GetBytes(rawMessage), <span style="color: #a31515;">"raw"</span>);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//Sends a Toast notification, using the arguments to define the notification's Title and Message.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span> PushToast(<span style="color: #0000ff;">string</span> ToastTitle, <span style="color: #0000ff;">string</span> ToastMessage)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//Use XMLWriter to construct notification structure/contents.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #2b91af;">MemoryStream</span> myStream = <span style="color: #0000ff;">new</span> <span style="color: #2b91af;">MemoryStream</span>();</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XmlWriter myWriter = XmlWriter.Create(myStream);</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteStartDocument();</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteStartElement(<span style="color: #a31515;">"wp"</span>, <span style="color: #a31515;">"Notification"</span>, <span style="color: #a31515;">"WPNotification"</span>);</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteStartElement(<span style="color: #a31515;">"wp"</span>, <span style="color: #a31515;">"Toast"</span>, <span style="color: #a31515;">"WPNotification"</span>);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteStartElement(<span style="color: #a31515;">"wp"</span>, <span style="color: #a31515;">"Text1"</span>, <span style="color: #a31515;">"WPNotification"</span>);</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteValue(ToastTitle);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteEndElement();</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteStartElement(<span style="color: #a31515;">"wp"</span>, <span style="color: #a31515;">"Text2"</span>, <span style="color: #a31515;">"WPNotification"</span>);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteValue(ToastMessage);</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteEndElement();</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteEndElement();</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteEndDocument();</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//Transfer Xml Outpute from myWriter's buffer to myStream.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.Flush();</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//Send this message to all subscribed devices.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sendPushToSubscribedURIs(myStream.ToArray(), <span style="color: #a31515;">"toast"</span>);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//Sends the specified Tile Title, Tile Count, and Tile Image URL as a Tile</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//notification, which can only be received while the subscribed phone app is</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//NOT running. The maximum allowed size of the Tile image is 80kb, with a</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//maximum download time of 15 seconds. Only Tile image URLs from the domains listed in</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//Push Client's ListOfAllowedDomains will be accepted. The Tile Title will overwrite</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//the text that labels the tile on the phone's menu, and the Tile Count is</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//shown as a numeric value displayed on top of the Tile image, visually.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">void</span> PushTileUpdate(<span style="color: #0000ff;">string</span> TileTitle, <span style="color: #0000ff;">int</span> TileCount, <span style="color: #0000ff;">string</span> TileImageURL)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">// Use XmlWriter to construct notification structure/contents.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #2b91af;">MemoryStream</span> myStream = <span style="color: #0000ff;">new</span> <span style="color: #2b91af;">MemoryStream</span>();</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;XmlWriter myWriter = XmlWriter.Create(myStream);</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteStartDocument();</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteStartElement(<span style="color: #a31515;">"wp"</span>, <span style="color: #a31515;">"Notification"</span>, <span style="color: #a31515;">"WPNotification"</span>);</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteStartElement(<span style="color: #a31515;">"wp"</span>, <span style="color: #a31515;">"Tile"</span>, <span style="color: #a31515;">"WPNotification"</span>);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteStartElement(<span style="color: #a31515;">"wp"</span>, <span style="color: #a31515;">"BackgroundImage"</span>, <span style="color: #a31515;">"WPNotification"</span>);</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteValue(TileImageURL);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteEndElement();</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteStartElement(<span style="color: #a31515;">"wp"</span>, <span style="color: #a31515;">"Count"</span>, <span style="color: #a31515;">"WPNotification"</span>);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteValue(TileCount);</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteEndElement();</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteStartElement(<span style="color: #a31515;">"wp"</span>, <span style="color: #a31515;">"Title"</span>, <span style="color: #a31515;">"WPNotification"</span>);</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteValue(TileTitle);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteEndElement();</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteEndElement();</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteEndDocument();</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//Transfer Xml output from myWriter's buffer to myStream.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.Flush();</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//Send this message to all subscribed devices.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sendPushToSubscribedURIs(myStream.ToArray(), <span style="color: #a31515;">"tile"</span>);</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//This enum gives symbolic names to the numeric values used to "batch together"</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//push notifications according to the specified time intervals. You can send them</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//immediately, within 450 seconds, or within 900 seconds. Allowing the Notification</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//Service to batch notifications will let the service group messages together with</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//notifications from other apps to save phone battery life.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">enum</span> <span style="color: #2b91af;">BatchingIntervalValues</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ImmediateTile = 1,</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ImmediateToast = 2,</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ImmediateRaw = 3,</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Wait450SecondsTile = 11,</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Wait450SecondsToast = 12,</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Wait450SecondsRaw = 13,</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Wait900SecondsTile = 21,</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Wait900SecondsToast = 22,</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Wait900SecondsRaw = 23</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li style="background: #f3f3f3;">&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//Iterates through SubscriptionURIs, sending the constructed Push Notification to</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//of the notification, which is every subscribed device via the Microsoft</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//Push Notification Service. The payload passed in, is packaged into an HTTP POST</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//message that defines headers containing the notification type and batching interval.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">private</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">void</span> sendPushToSubscribedURIs(<span style="color: #0000ff;">byte</span>[] pushPayload, <span style="color: #0000ff;">string</span> notificationType)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//Iterate through SubscriptionURIs</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">foreach</span> (<span style="color: #0000ff;">var</span> thisURI <span style="color: #0000ff;">in</span> SubscriptionURIs.Values)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//Add headers to HTTP Post message.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">var</span> myRequest = (HttpWebRequest)WebRequest.Create(thisURI); <span style="color: #008000;">// Push Client's channelURI</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myRequest.Method = <span style="color: #ff0000;">WebRequestMethods</span>.Http.Post;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myRequest.ContentType = <span style="color: #a31515;">"text/xml"</span>;</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myRequest.<span style="color: #ff0000;">ContentLength</span> = pushPayload.Length;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">// gives this message a unique ID</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myRequest.Headers.<span style="color: #ff0000;">Add</span>(<span style="color: #a31515;">"X-MessageID"</span>, <span style="color: #2b91af;">Guid</span>.NewGuid().ToString());</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//Customize or exclude the X-WindowsPhone-Target header based on the notification type.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">switch</span> (notificationType)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">case</span> <span style="color: #a31515;">"toast"</span>:</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myRequest.Headers[<span style="color: #a31515;">"X-WindowsPhone-Target"</span>] = <span style="color: #a31515;">"toast"</span>;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myRequest.Headers.<span style="color: #ff0000;">Add</span>(<span style="color: #a31515;">"X-NotificationClass"</span>,</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((<span style="color: #0000ff;">int</span>)BatchingIntervalValues.ImmediateToast).ToString());</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">break</span>;</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">case</span> <span style="color: #a31515;">"tile"</span>:</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myRequest.Headers[<span style="color: #a31515;">"X-WindowsPhone-Target"</span>] = <span style="color: #a31515;">"token"</span>;</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myRequest.Headers.<span style="color: #ff0000;">Add</span>(<span style="color: #a31515;">"X-NotificationClass"</span>,</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((<span style="color: #0000ff;">int</span>)BatchingIntervalValues.ImmediateTile).ToString());</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">break</span>;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">case</span> <span style="color: #a31515;">"raw"</span>:</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myRequest.Headers.<span style="color: #ff0000;">Add</span>(<span style="color: #a31515;">"X-NotificationClass"</span>,</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;((<span style="color: #0000ff;">int</span>)BatchingIntervalValues.ImmediateRaw).ToString());</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//Raw notifications do not specify a value for the X-WindowsPhone-Target header.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">break</span>;</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//Merge headers with payload.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">using</span> (<span style="color: #0000ff;">var</span> requestStream = myRequest.<span style="color: #ff0000;">GetRequestStream</span>())</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;requestStream.<span style="color: #ff0000;">Write</span>(pushPayload, 0, pushPayload.Length);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//Send notification to this phone!</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">var</span> response = (HttpWebResponse)myRequest.<span style="color: #ff0000;">GetResponse</span>();</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>}</li>
</ol></div>
</div>
</div>
<p><b>Visual Basic (Service1.svc.vb)</b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:92781f22-ad4f-44ed-ab99-62c1ef897c2e" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 3em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">Imports</span> System.Collections.Generic</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">Imports</span> System.Linq</li>
<li><span style="color: #0000ff;">Imports</span> System.Runtime.Serialization</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">Imports</span> System.ServiceModel</li>
<li><span style="color: #0000ff;">Imports</span> System.ServiceModel.Web</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">Imports</span> System.Text</li>
<li><span style="color: #0000ff;">Imports</span> System.Xml</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">Imports</span> System.IO</li>
<li><span style="color: #0000ff;">Imports</span> System.Net</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">Namespace</span> PushService</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Public</span> <span style="color: #0000ff;">Class</span> <span style="color: #2b91af;">Service1</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Implements</span> IService1</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'Custom constructor</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'</span><span style="color: #00008b;">TODO: Load from database into SubscriptionURIs here.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Public</span> <span style="color: #0000ff;">Sub</span> <span style="color: #0000ff;">New</span>()</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'Data members.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'This tracks the devices-to-channelURI list, which gets updated by calls to</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'SubscribeMyPhone();</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Shared</span> SubscriptionURIs <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">New</span> <span style="color: #2b91af;">Dictionary</span>(<span style="color: #0000ff;">Of</span> <span style="color: #2b91af;">Guid</span>, <span style="color: #2b91af;">Uri</span>)()</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'This overwrites/creates entries for each phone that wants to receive Push Notifications.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'</span><span style="color: #00008b;">Note: This list is reset whenever application restarts -- in real life, you will want</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'to store this data from the SubscriptionURIs list into a database so it persists. Hence,</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'there are </span><span style="color: #00008b;">TODO sections in this code.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Public</span> <span style="color: #0000ff;">Sub</span> SubscribeMyPhone(phoneID <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">Guid</span>, channelURI <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Dim</span> thisURI <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">New</span> <span style="color: #2b91af;">Uri</span>(channelURI)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">If</span> SubscriptionURIs.ContainsKey(phoneID) <span style="color: #0000ff;">Then</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'update the existing URI entry for this phone, if need be</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SubscriptionURIs(phoneID) = thisURI</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Else</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'otherwise, add a subscription for this phone</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SubscriptionURIs.Add(phoneID, thisURI)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">' </span><span style="color: #00008b;">TODO: Save this data in a database, otherwise it will be lost on application restart.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'Sends the received text value as a Raw notification -- which can only be received</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'while the subscribed phone app is running. Raw notifications have a size limit of 1K.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Public</span> <span style="color: #0000ff;">Sub</span> PushRawData(rawMessage <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'Encode the message as a byte[] array as the Notification Service Expects.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Dim</span> encoding <span style="color: #0000ff;">As</span> System.Text.<span style="color: #2b91af;">UTF8Encoding</span> = <span style="color: #0000ff;">New</span> <span style="color: #2b91af;">UTF8Encoding</span>()</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'Send this message to all subscribed devices.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sendPushToSubscribedURIs(encoding.GetBytes(rawMessage), <span style="color: #a31515;">"raw"</span>)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'Sends a Toast notification, using the arguments to define the notification's Title and Message.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Public</span> <span style="color: #0000ff;">Sub</span> PushToast(ToastTitle <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>, ToastMessage <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'Use XMLWriter to construct notification structure/contents.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Dim</span> myStream <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">New</span> <span style="color: #2b91af;">MemoryStream</span>()</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Dim</span> myWriter <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">XmlWriter</span> = <span style="color: #2b91af;">XmlWriter</span>.Create(myStream)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteStartDocument()</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteStartElement(<span style="color: #a31515;">"wp"</span>, <span style="color: #a31515;">"Notification"</span>, <span style="color: #a31515;">"WPNotification"</span>)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteStartElement(<span style="color: #a31515;">"wp"</span>, <span style="color: #a31515;">"Toast"</span>, <span style="color: #a31515;">"WPNotification"</span>)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteStartElement(<span style="color: #a31515;">"wp"</span>, <span style="color: #a31515;">"Text1"</span>, <span style="color: #a31515;">"WPNotification"</span>)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteValue(ToastTitle)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteEndElement()</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteStartElement(<span style="color: #a31515;">"wp"</span>, <span style="color: #a31515;">"Text2"</span>, <span style="color: #a31515;">"WPNotification"</span>)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteValue(ToastMessage)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteEndElement()</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteEndElement()</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteEndDocument()</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'Transfer Xml Outpute from myWriter's buffer to myStream.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.Flush()</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'Send this message to all subscribed devices.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sendPushToSubscribedURIs(myStream.ToArray(), <span style="color: #a31515;">"toast"</span>)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'Sends the specified Tile Title, Tile Count, and Tile Image URL as a Tile</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'notification, which can only be received while the subscribed phone app is</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'NOT running. The maximum allowed size of the Tile image is 80kb, with a</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'maximum download time of 15 seconds. Only Tile image URLs from the domains listed in</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'Push Client's ListOfAllowedDomains will be accepted. The Tile Title will overwrite</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'the text that labels the tile on the phone's menu, and the Tile Count is</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'shown as a numeric value displayed on top of the Tile image, visually.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Public</span> <span style="color: #0000ff;">Sub</span> PushTileUpdate(TileTitle <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>, TileCount <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Integer</span>, TileImageURL <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">' Use XmlWriter to construct notification structure/contents.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Dim</span> myStream <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">New</span> <span style="color: #2b91af;">MemoryStream</span>()</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Dim</span> myWriter <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">XmlWriter</span> = <span style="color: #2b91af;">XmlWriter</span>.Create(myStream)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteStartDocument()</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteStartElement(<span style="color: #a31515;">"wp"</span>, <span style="color: #a31515;">"Notification"</span>, <span style="color: #a31515;">"WPNotification"</span>)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteStartElement(<span style="color: #a31515;">"wp"</span>, <span style="color: #a31515;">"Tile"</span>, <span style="color: #a31515;">"WPNotification"</span>)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteStartElement(<span style="color: #a31515;">"wp"</span>, <span style="color: #a31515;">"BackgroundImage"</span>, <span style="color: #a31515;">"WPNotification"</span>)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteValue(TileImageURL)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteEndElement()</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteStartElement(<span style="color: #a31515;">"wp"</span>, <span style="color: #a31515;">"Count"</span>, <span style="color: #a31515;">"WPNotification"</span>)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteValue(TileCount)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteEndElement()</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteStartElement(<span style="color: #a31515;">"wp"</span>, <span style="color: #a31515;">"Title"</span>, <span style="color: #a31515;">"WPNotification"</span>)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteValue(TileTitle)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteEndElement()</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteEndElement()</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.WriteEndDocument()</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'Transfer Xml output from myWriter's buffer to myStream.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myWriter.Flush()</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'Send this message to all subscribed devices.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sendPushToSubscribedURIs(myStream.ToArray(), <span style="color: #a31515;">"tile"</span>)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'This enum gives symbolic names to the numeric values used to "batch together"</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'push notifications according to the specified time intervals. You can send them</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'immediately, within 450 seconds, or within 900 seconds. Allowing the Notification</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'Service to batch notifications will let the service group messages together with</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'notifications from other apps to save phone battery life.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Public</span> <span style="color: #0000ff;">Enum</span> <span style="color: #2b91af;">BatchingIntervalValues</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ImmediateTile = 1</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ImmediateToast = 2</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ImmediateRaw = 3</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Wait450SecondsTile = 11</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Wait450SecondsToast = 12</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Wait450SecondsRaw = 13</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Wait900SecondsTile = 21</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Wait900SecondsToast = 22</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Wait900SecondsRaw = 23</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Enum</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'Iterates through SubscriptionURIs, sending the constructed Push Notification to</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'of the notification, which is every subscribed device via the Microsoft</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'Push Notification Service. The payload passed in, is packaged into an HTTP POST</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'message that defines headers containing the notification type and batching interval.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Shared</span> <span style="color: #0000ff;">Sub</span> sendPushToSubscribedURIs(pushPayload <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Byte</span>(), notificationType <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">String</span>)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'Iterate through SubscriptionURIs</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">For</span> <span style="color: #0000ff;">Each</span> thisURI <span style="color: #0000ff;">As</span> var <span style="color: #0000ff;">In</span> SubscriptionURIs.Values</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'Add headers to HTTP Post message.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Dim</span> myRequest = <span style="color: #0000ff;">DirectCast</span>(<span style="color: #2b91af;">WebRequest</span>.Create(thisURI), <span style="color: #2b91af;">HttpWebRequest</span>)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">' Push Client's channelURI</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myRequest.Method = <span style="color: #2b91af;">WebRequestMethods</span>.<span style="color: #2b91af;">Http</span>.Post</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myRequest.ContentType = <span style="color: #a31515;">"text/xml"</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myRequest.ContentLength = pushPayload.Length</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">' gives this message a unique ID</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myRequest.Headers.Add(<span style="color: #a31515;">"X-MessageID"</span>, <span style="color: #2b91af;">Guid</span>.NewGuid().ToString())</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'Customize or exclude the X-WindowsPhone-Target header based on the notification type.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Select</span> <span style="color: #0000ff;">Case</span> notificationType</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Case</span> <span style="color: #a31515;">"toast"</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myRequest.Headers(<span style="color: #a31515;">"X-WindowsPhone-Target"</span>) = <span style="color: #a31515;">"toast"</span></li>
<li style="background: #f3f3f3;">myRequest.Headers.Add(<span style="color: #a31515;">"X-NotificationClass"</span>,</li>
<li>CInBatchingIntervalValues.ImmediateToast).ToString())</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Exit Select</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Case</span> <span style="color: #a31515;">"tile"</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myRequest.Headers(<span style="color: #a31515;">"X-WindowsPhone-Target"</span>) = <span style="color: #a31515;">"token"</span></li>
<li>myRequest.Headers.Add(<span style="color: #a31515;">"X-NotificationClass"</span>,</li>
<li style="background: #f3f3f3;">CIntBatchingIntervalValues.ImmediateTile).ToString())</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Exit Select</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Case</span> <span style="color: #a31515;">"raw"</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myRequest.Headers.Add(<span style="color: #a31515;">"X-NotificationClass"</span>,</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(CIntBatchingIntervalValues.ImmediateRaw).ToString())</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'Raw notifications do not specify a value for the X-WindowsPhone-Target header.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Exit Select</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Select</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'Merge headers with payload.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Using</span> requestStream = myRequest.GetRequestStream()</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;requestStream.Write(pushPayload, 0, pushPayload.Length)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Using</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'Send notification to this phone!</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Dim</span> response = <span style="color: #0000ff;">DirectCast</span>(myRequest.GetResponse(), <span style="color: #2b91af;">HttpWebResponse</span>)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Next</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Class</span></li>
<li><span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Namespace</span></li>
</ol></div>
</div>
</div>
<p>Comme derni&egrave;re &eacute;tape, il faut inclure les fichiers .png qui seront utilis&eacute;s sous forme de graphiques Tile pour l&rsquo;application mobile. Vous pouvez utiliser les fichiers .png inclus dans <span style="text-decoration: underline;"><a href="http://archive.msdn.microsoft.com/silverlightforphone/Release/ProjectReleases.aspx?ReleaseId=5522">l&rsquo;exemple du code t&eacute;l&eacute;chargeable</a></span> ou cr&eacute;ez les v&ocirc;tres. Les Tiles doivent &ecirc;tre de 80KB ou plus petit en poids et avoir une r&eacute;solution de 173 x 173 pixels. Ajoutez les fichiers .png au projet WebService en faisant un clic droit sur le Web Service Role et en s&eacute;lectionnant &laquo; Add Existing Item &raquo;. Une fois visible dans le Solution Explorer, cliquez sur les fichiers .png et dans le panneau des propri&eacute;t&eacute;s d&eacute;finissez la valeur de la propri&eacute;t&eacute; &laquo; Copy to output Directory &raquo; &agrave; &laquo; Always &raquo;</p>
<p>Le web service est maintenant complet et pr&ecirc;t &agrave; &ecirc;tre publi&eacute;. Si vous n&rsquo;&ecirc;tes pas int&eacute;ress&eacute; par la publication sur Azure, vous pouvez ex&eacute;cuter ce service sur n&rsquo;importe quel serveur IIS qui poss&egrave;de une connexion &agrave; Internet (pour contacter MPNS) et peut &ecirc;tre atteint par votre &eacute;mulateur ou t&eacute;l&eacute;phone Windows Phone 7.</p>
<p><a id="azure" name="azure"></a></p>
<h2>Publier votre web service sur Windows Azure</h2>
<ol>
<li><span style="text-decoration: underline;"><a href="http://go.microsoft.com/fwlink/?LinkID=206204">Inscrivez-vous pour un essai gratuit ou classique &agrave; un compte Azure</a></span>. Une fois r&eacute;alis&eacute;, connectez-vous &agrave; <a href="http://windows.azure.com">http://windows.azure.com</a> avec le LiveID associ&eacute; &agrave; votre compte Azure et assurez-vous que vous avez acc&egrave;s aux outils de gestion.</li>
<li>En supposant que vous ayez suivi les instructions de la cr&eacute;ation du projet ci-dessus, vous serez en mesure de faire un clic droit sur le projet Azure dans le Solution Explorer (avec une ic&ocirc;ne repr&eacute;sentant un globe) et s&eacute;lectionnez &laquo; Publish &raquo; &agrave; partir du menu, comme indiqu&eacute; ici : <br /><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/4087.image_50330036.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/4087.image_5F00_50330036.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/2746.image_thumb_5F866245.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/2746.image_5F00_thumb_5F00_5F866245.png" width="418" height="214" /></a></li>
<li>La fen&ecirc;tre de d&eacute;ploiement s&rsquo;affichera. Sous la liste d&eacute;roulante &laquo; Credentials &raquo; s&eacute;lectionnez "Add," comme montr&eacute; ici: <br /><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/5657.image_138ADBCC.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/5657.image_5F00_138ADBCC.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/8780.image_thumb_4A188710.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/8780.image_5F00_thumb_5F00_4A188710.png" width="383" height="336" /></a></li>
<li>Dans la fen&ecirc;tre d&rsquo;authentification du projet Windows Azure faites d&eacute;filer vers le bas la liste des identifications, et s&eacute;lectionnez &ldquo;Create&rdquo;. Donner un nom significatif &agrave; ces informations d&rsquo;identification, elles peuvent &ecirc;tre r&eacute;utilis&eacute;es &agrave; l&rsquo;avenir pour toute activit&eacute; de publication pour n&rsquo;importe quel service h&eacute;berg&eacute; sur votre compte. Cliquez sur le lien &laquo; copy the full path &raquo; du fichier d&rsquo;identification que vous avez cr&eacute;&eacute; puis cliquez &agrave; nouveau sur le lien pour visiter le portail Windows Azure sur internet avec le chemin du fichier du certificat dans votre presse papier. <br /><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/8780.image_11C9EA2B.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/8780.image_5F00_11C9EA2B.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/6131.image_thumb_6F25ABAF.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/6131.image_5F00_thumb_5F00_6F25ABAF.png" width="416" height="284" /></a></li>
<li>Dans le portail Windows Azure, entrez le menu &laquo; Management Certificates &raquo; et dans la section &laquo; Hosted Services, Storage Accounts &amp; CDN &raquo;. Cliquez sur le bouton &laquo; Add Certificate &raquo; en haut du ruban de navigation. Cliquez sur &laquo; Browse &raquo; et quand l&rsquo;on vous demande de s&eacute;lectionner un certificat &agrave; ajouter, collez alors le chemin complet du certificat que vous avez cr&eacute;&eacute; &agrave; l&rsquo;&eacute;tape 4 et cliquez sur &laquo; OK &raquo;. Cela t&eacute;l&eacute;charge le nouveau certificat et g&eacute;n&egrave;re un Subscription ID qui est associ&eacute; au certificat. Copiez le Subscription ID dans votre presse papier et revenez &agrave; Visual Studio. <br /><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/8875.image_511777EE.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/8875.image_5F00_511777EE.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/5557.image_thumb_1B520CC7.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/5557.image_5F00_thumb_5F00_1B520CC7.png" width="550" height="423" /></a></li>
<li>Dans Visual Studio, collez le Subscription ID dans le troisi&egrave;me champ de la fen&ecirc;tre de gestion d&rsquo;authentification du projet Windows Azure, o&ugrave; un exemple d&rsquo;ID est d&eacute;j&agrave; entr&eacute;, et cliquez sur &laquo; OK &raquo; pour sauvegarder les informations authentifi&eacute;es</li>
<li>Retournez au portail Windows Azure, cliquez sur &laquo; Storage Accounts &raquo; dans le menu gauche, et cliquez sur &laquo; New Storage Account &raquo; &agrave; partir du haut du ruban. Donnez un nom significatif &agrave; votre compte de stockage. Ce compte peut &ecirc;tre r&eacute;utilis&eacute; pour d&rsquo;autres services h&eacute;berg&eacute;s sur Windows Azure. Choisissez un centre de donn&eacute;es qui est situ&eacute; dans une zone souhait&eacute;e, et cliquez sur &laquo; Create &raquo; pour cr&eacute;er le nouveau compte de stockage. <br /><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/2821.image_5D654F7D.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/2821.image_5F00_5D654F7D.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/5611.image_thumb_691A96AF.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/5611.image_5F00_thumb_5F00_691A96AF.png" width="336" height="277" /></a></li>
<li>Dans le portail Windows Azure, cliquez sur &ldquo;Hosted Services&rdquo; dans le menu gauche, puis cliquez sur &ldquo;New Hosted Service&rdquo; en haut du ruban. Entrez un nom significatif ainsi que le pr&eacute;fixe d&rsquo;URL pour ce service. <br />Ceux-ci seront uniques &agrave; ce web service. Choisissez le m&ecirc;me centre de donn&eacute;es o&ugrave; le compte de stockage a &eacute;t&eacute; cr&eacute;&eacute; (permet d&rsquo;&eacute;viter de payer des frais de trafic entrants/sortants pour le trafic croisant les centres de donn&eacute;es) et s&eacute;lectionnez l&rsquo;option &laquo; Do Not Deploy &raquo;. Cliquez sur &laquo; OK &raquo; quand cela est fait pour cr&eacute;er un nouveau service h&eacute;berg&eacute;. <br /><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/0830.image_5418EE6F.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/0830.image_5F00_5418EE6F.png"><img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/4150.image_thumb_3F46F5EF.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/4150.image_5F00_thumb_5F00_3F46F5EF.png" width="368" height="439" /></a></li>
<li>Retournez dans Visual Studio, fermez la fen&ecirc;tre de projet de d&eacute;ploiement de Windows Azure et rouvrez-la en faisant un clic droit sur le projet Azure et en s&eacute;lectionnant &agrave; nouveau &laquo; Publish &raquo;. Cette fois, s&eacute;lectionnez votre nouvelle identification &agrave; partir de la liste d&eacute;roulante de Credentials &raquo;. Visual Studio chargera le &laquo; Storage Account &raquo; et le &laquo; Hosted Service Account &raquo; qui sont associ&eacute;s avec ce certificat de Subscription ID. Changez l&rsquo;environnement de d&eacute;ploiement en &laquo; Production &raquo;. Cliquez sur &laquo; OK &raquo; pour publier votre web service sur Windows Azure. Cette &eacute;tape peut prendre plusieurs minutes. Le journal d&rsquo;activit&eacute; de Windows Azure montrera l&rsquo;&eacute;tat en cours pendant que le service est publi&eacute; et initialis&eacute;. <br /><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/3542.image_0189E866.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/3542.image_5F00_0189E866.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/5102.image_thumb_5DDD9440.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/5102.image_5F00_thumb_5F00_5DDD9440.png" width="637" height="370" /></a></li>
<li>Quand l&rsquo;op&eacute;ration est termin&eacute;e, le web service sera accessible &agrave; l&rsquo;url du site list&eacute; par le journal d&rsquo;activit&eacute; de Windows Azure. Cette URL correspond au pr&eacute;fixe URL que vous avez entr&eacute; pour le service h&eacute;berg&eacute;. Ajoutez le nom du fichier .svc &agrave; la fin de l&rsquo;url pour voir la d&eacute;claration du WDSL pour votre web service (par exemple <a href="http://my_url_prefix.cloudapp.net/Service1.svc">http://my_url_prefix.cloudapp.net/Service1.svc</a>). Votre service fonctionne sur Windows Azure et est pr&ecirc;t &agrave; &ecirc;tre consomm&eacute;. <br /><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/5102.image_5BB06FAA.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/5102.image_5F00_5BB06FAA.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/0728.image_thumb_4DFDB3A2.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/0728.image_5F00_thumb_5F00_4DFDB3A2.png" width="418" height="425" /></a></li>
</ol>
<p><a id="phoneapp" name="phoneapp"></a></p>
<h2>Cr&eacute;er une application mobile de r&eacute;ception de Push</h2>
<p>Assurez-vous que le Push Service, le web service que nous avons cr&eacute;&eacute; plus t&ocirc;t, a &eacute;t&eacute; d&eacute;ploy&eacute; et poss&egrave;de une connexion Internet afin qu&rsquo;il puisse relayer les messages au service de notification de push de Microsoft. Dans la section pr&eacute;c&eacute;dente, nous avons atteint cet objectif en publiant sur Windows Azure.</p>
<p>Lancez Visual Studio et d&eacute;marrez un projet de type &laquo; Silverlight for Windows Phone &raquo;. Puis cr&eacute;ez une interface utilisateur (UI) qui poss&egrave;dera les &eacute;l&eacute;ments suivants :</p>
<ul>
<li>Un <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.textblock(v=vs.95).aspx">TextBlock</a></span> nomm&eacute; <b>subscriptionStatus</b> dont le texte est d&eacute;fini par &laquo; Checking subscription status&hellip;. &raquo;</li>
<li>Un <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.textblock(v=vs.95).aspx">TextBlock</a></span> nomm&eacute; <b>rawmessage</b>, avec son attribut <b>TextWrapping</b> d&eacute;fini &agrave; la valeur &laquo; Wrap &raquo;. Donnez &agrave; la propri&eacute;t&eacute; <b>Text</b> la valeur &laquo; Waiting to Receive Raw Notification &raquo;</li>
<li>Un TextBlock nomm&eacute; <b>channelURITextBlock</b>, avec son attribut <b>TextWrapping</b> d&eacute;fini &agrave; la valeur &laquo; Wrap &raquo;. Donnez &agrave; la propri&eacute;t&eacute; <b>Text</b> la valeur &laquo; This App&rsquo;s ChannelUri : &raquo;</li>
</ul>
<p>Une disposition de ces &eacute;l&eacute;ments est propos&eacute;e et fournie ci-dessous. Ici, un quatri&egrave;me TextBlock est affich&eacute; avec des instructions de test et de d&eacute;ploiement qui sont en bleu clair pour utiliser cette application. Cela est pour vous aider &agrave; ex&eacute;cuter l&rsquo;exemple du code qui s&rsquo;appuie sur la connexion internet, un web service, et les Push Notifications envoy&eacute;es seulement apr&egrave;s une ex&eacute;cution initiale de l&rsquo;application sur ce t&eacute;l&eacute;phone. De plus, &agrave; cause de ses d&eacute;pendances, l&rsquo;exemple de ce projet a besoin de plusieurs modifications avant qu&rsquo;il puisse s&rsquo;ex&eacute;cuter sur votre t&eacute;l&eacute;phone. Ce TextBlock n&rsquo;est pas mentionn&eacute; ailleurs dans cet article ou dans le code lui-m&ecirc;me. <br /><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/1462.image_313418C0.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/1462.image_5F00_313418C0.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/1055.image_thumb_3D25E327.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/1055.image_5F00_thumb_5F00_3D25E327.png" width="275" height="494" /></a></p>
<p>Le document final en XAML contenant ces &eacute;l&eacute;ments ressemble &agrave; ceci:</p>
<p><b>XAML (MainPage.xaml) <br /></b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:314ff299-b1eb-4872-bbc6-d7aa83275489" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;">
<li><span style="color: #a31515;"></span><span style="color: #008000;">&lt;!--LayoutRoot is the root grid where all page content is placed--&gt;</span></li>
<li style="background: #f3f3f3;"><span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Grid</span><span style="color: #ff0000;"> x</span><span style="color: #0000ff;">:</span><span style="color: #ff0000;">Name</span><span style="color: #0000ff;">="LayoutRoot"</span><span style="color: #ff0000;"> Background</span><span style="color: #0000ff;">="Transparent"&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Grid.RowDefinitions</span><span style="color: #0000ff;">&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">RowDefinition</span><span style="color: #ff0000;"> Height</span><span style="color: #0000ff;">="Auto"/&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">RowDefinition</span><span style="color: #ff0000;"> Height</span><span style="color: #0000ff;">="*"/&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">Grid.RowDefinitions</span><span style="color: #0000ff;">&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #008000;">&lt;!--TitlePanel contains the name of the application and page title--&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">StackPanel</span><span style="color: #ff0000;"> x</span><span style="color: #0000ff;">:</span><span style="color: #ff0000;">Name</span><span style="color: #0000ff;">="TitlePanel"</span><span style="color: #ff0000;"> Grid.Row</span><span style="color: #0000ff;">="0"</span><span style="color: #ff0000;"> Margin</span><span style="color: #0000ff;">="12,17,0,28"&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">TextBlock</span><span style="color: #ff0000;"> x</span><span style="color: #0000ff;">:</span><span style="color: #ff0000;">Name</span><span style="color: #0000ff;">="PushDemo"</span><span style="color: #ff0000;"> Text</span><span style="color: #0000ff;">="JoMul Push Demo"</span><span style="color: #ff0000;"> Style</span><span style="color: #0000ff;">="{</span><span style="color: #a31515;">StaticResource</span><span style="color: #ff0000;"> PhoneTextNormalStyle}</span><span style="color: #0000ff;">"/&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">StackPanel</span><span style="color: #0000ff;">&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #008000;">&lt;!--ContentPanel - place additional content here--&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Grid</span><span style="color: #ff0000;"> x</span><span style="color: #0000ff;">:</span><span style="color: #ff0000;">Name</span><span style="color: #0000ff;">="ContentPanel"</span><span style="color: #ff0000;"> Grid.Row</span><span style="color: #0000ff;">="1"</span><span style="color: #ff0000;"> Margin</span><span style="color: #0000ff;">="12,0,12,0"&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">TextBlock</span><span style="color: #ff0000;"> Height</span><span style="color: #0000ff;">="30"</span><span style="color: #ff0000;"> HorizontalAlignment</span><span style="color: #0000ff;">="Left"</span><span style="color: #ff0000;"> Margin</span><span style="color: #0000ff;">="12,460,0,0"</span><span style="color: #ff0000;"> Name</span><span style="color: #0000ff;">="subscriptionStatus"</span><span style="color: #ff0000;"> Text</span><span style="color: #0000ff;">="Checking subscription status..."</span><span style="color: #ff0000;"> VerticalAlignment</span><span style="color: #0000ff;">="Top"</span><span style="color: #ff0000;"> Width</span><span style="color: #0000ff;">="438" /&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">TextBlock</span><span style="color: #ff0000;"> Height</span><span style="color: #0000ff;">="380"</span><span style="color: #ff0000;"> HorizontalAlignment</span><span style="color: #0000ff;">="Left"</span><span style="color: #ff0000;"> Margin</span><span style="color: #0000ff;">="12,77,0,0"</span><span style="color: #ff0000;"> Name</span><span style="color: #0000ff;">="instructions"</span><span style="color: #ff0000;"> Text</span><span style="color: #0000ff;">="To use:</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">1) Deploy Push Service to an internet-accessible host (such as Azure).</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">2) In this project (Push Client) right-click on ServiceReference1 in Solution</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Explorer, then click "</span><span style="color: #ff0000;">Configure Service Reference</span><span style="color: #0000ff;">", updating the address with Push Service's new WSDL URL.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">3) Edit ListOfAllowedDomains in MainPage.xaml.cs to include the domain that now hosts Push Service.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">4) Launch this app (Push Client) on your phone so it registers to receive notifications.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">5) On your PC, launch Visual Studio Command Prompt, and type WCFTestClient. In the client, enter Push Service's WSDL URL, then invoke</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">the methods that send notifications to your phone!"</span><span style="color: #ff0000;"> VerticalAlignment</span><span style="color: #0000ff;">="Top"</span><span style="color: #ff0000;"> Width</span><span style="color: #0000ff;">="426"</span><span style="color: #ff0000;"> TextWrapping</span><span style="color: #0000ff;">="Wrap"</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> TextAlignment</span><span style="color: #0000ff;">="Left"</span><span style="color: #ff0000;"> Foreground</span><span style="color: #0000ff;">="Cyan"</span><span style="color: #ff0000;"> Visibility</span><span style="color: #0000ff;">="Visible" /&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">TextBlock</span><span style="color: #ff0000;"> Height</span><span style="color: #0000ff;">="134"</span><span style="color: #ff0000;"> HorizontalAlignment</span><span style="color: #0000ff;">="Left"</span><span style="color: #ff0000;"> Margin</span><span style="color: #0000ff;">="12,556,0,0"</span><span style="color: #ff0000;"> Name</span><span style="color: #0000ff;">="channelURITextBlock"</span><span style="color: #ff0000;"> Text</span><span style="color: #0000ff;">="This App's ChannelURI: "</span><span style="color: #ff0000;"> VerticalAlignment</span><span style="color: #0000ff;">="Top"</span><span style="color: #ff0000;"> Width</span><span style="color: #0000ff;">="426"</span><span style="color: #ff0000;"> TextWrapping</span><span style="color: #0000ff;">="Wrap" /&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">TextBlock</span><span style="color: #ff0000;"> x</span><span style="color: #0000ff;">:</span><span style="color: #ff0000;">Name</span><span style="color: #0000ff;">="PageTitle"</span><span style="color: #ff0000;"> Text</span><span style="color: #0000ff;">="Push Client"</span><span style="color: #ff0000;"> Margin</span><span style="color: #0000ff;">="12,-7,-3,613"</span><span style="color: #ff0000;"> Style</span><span style="color: #0000ff;">="{</span><span style="color: #a31515;">StaticResource</span><span style="color: #ff0000;"> PhoneTextTitle1Style}</span><span style="color: #0000ff;">"/&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">TextBlock</span><span style="color: #ff0000;"> Height</span><span style="color: #0000ff;">="70"</span><span style="color: #ff0000;"> HorizontalAlignment</span><span style="color: #0000ff;">="Left"</span><span style="color: #ff0000;"> Margin</span><span style="color: #0000ff;">="12,493,0,0"</span><span style="color: #ff0000;"> Name</span><span style="color: #0000ff;">="rawmessage"</span><span style="color: #ff0000;"> Text</span><span style="color: #0000ff;">="Waiting to receive Raw notification."</span><span style="color: #ff0000;"> VerticalAlignment</span><span style="color: #0000ff;">="Top"</span><span style="color: #ff0000;"> Width</span><span style="color: #0000ff;">="414"</span><span style="color: #ff0000;"> TextWrapping</span><span style="color: #0000ff;">="Wrap" /&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">Grid</span><span style="color: #0000ff;">&gt;</span></li>
<li><span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">Grid</span><span style="color: #0000ff;">&gt;</span></li>
</ol></div>
</div>
</div>
<p>Dans le Solution Explorer, faites un clic droit sur &ldquo;References&rdquo; et s&eacute;lectionnez &laquo; Add Service Reference &raquo;. Entrez l&rsquo;Url pour le Push Service du fichier .svc (par exemple : <a href="http://your_url_prefix.doudapp.net/Service1.svc">http://your_url_prefix.doudapp.net/Service1.svc</a>) et cliquez sur &laquo; Go &raquo;. Une fois que Visual Studio a confirm&eacute; avoir d&eacute;couvert le Push Service, remarquez que le namespace qui est assign&eacute; pour la r&eacute;f&eacute;rence au web service, qui est &laquo; ServiceReference1 &raquo; par d&eacute;faut, enfin cliquez sur &laquo; OK &raquo;. Le Push Service peut maintenant &ecirc;tre accessible via le namespace <b>ServiceReference1</b> dans le code de l&rsquo;application.</p>
<p>Ouvrez le fichier MainPage.xaml.cs et ajoutez les r&eacute;f&eacute;rences aux namespace suivants: <b>System.IO.IsolatedStorage</b>, <b>System.IO</b>, <b>Microsoft.phone.Notification</b> ainsi que <b>System.Collections.objectModel</b>.</p>
<p>En haut de la classe MainPage, ajoutez les membres de donn&eacute;es suivants:</p>
<ol>
<li>Un <a href="http://msdn.microsoft.com/en-us/library/system.guid(v=vs.95).aspx">Guid</a> nomm&eacute; deviceID que nous utiliserons pour enregistrer un identifiant unique pour ce t&eacute;l&eacute;phone.</li>
<li>Un &laquo; ServiceReference1.Service1Client &raquo; nomm&eacute; <b>myClient</b> que nous utiliserons pour acc&eacute;der au Push Service. Si vous changez le nom par d&eacute;faut du namespace du Service Reference ou du Push Service, ce type aura un nom diff&eacute;rent. Dans cet article, les valeurs par d&eacute;faut sont suppos&eacute;es.</li>
<li>Un objet <a href="http://msdn.microsoft.com/en-us/library/microsoft.phone.notification.httpnotificationchannel(v=vs.92).aspx">HttpNotificationChannel</a> nomm&eacute; <b>myPushChannel</b>. C&rsquo;est le canal qui va &eacute;couter les Notifications Push qui sont relay&eacute;es du MPNS.</li>
</ol>
<p>Maintenant, nous allons impl&eacute;menter quelques m&eacute;thodes qui pr&eacute;parent l&rsquo;application &agrave; la r&eacute;ception des Notifications Push.</p>
<ol>
<li>Dans la m&eacute;thode MainPage(), nous v&eacute;rifions le stockage isol&eacute; du t&eacute;l&eacute;phone ( stockage interne qui est accessible seulement par cette application) pour une valeur de cl&eacute; &laquo; DeviceID &raquo; . Si une valeur est trouv&eacute;e, elle est charg&eacute;e &agrave; partir de l&rsquo;Isolated Storage et est assign&eacute;e au membre de donn&eacute;es deviceID. Autrement, une nouvelle valeur Guid est g&eacute;n&eacute;r&eacute;e, assign&eacute;e et stock&eacute;e.</li>
<li>Toujours dans la m&eacute;thode MainPage(), nous v&eacute;rifions si il existe une valeur de type HttpNotificationChannel sous la cl&eacute; &laquo; myChannel &raquo;. Si elle n&rsquo;existe pas, elle est cr&eacute;&eacute;e et stock&eacute;e ici, alors les fonctions de traitement de l&rsquo;&eacute;v&egrave;nement sont attach&eacute;es. Le canal de communication est ouvert, celui qui demandera une nouvelle attribution de canal URI du MPNS, &agrave; laquelle les Notifications Push peuvent &ecirc;tre re&ccedil;ues par ce canal. Si ce canal existait pr&eacute;c&eacute;demment, nous attacherons tout simplement les fonctions de gestion d&rsquo;&eacute;v&eacute;nements, et passerons sur le canal existant du Push Service.</li>
<li>Une m&eacute;thode nomm&eacute;e <b>attachHandlerFunctions</b>() est impl&eacute;ment&eacute;e qui sp&eacute;cifie que les fonctions d&eacute;l&eacute;gu&eacute;es recevront le callback quand certaines fonctions se seront d&eacute;clench&eacute;es. L&rsquo;&eacute;v&egrave;nement <b>ErrorOccured</b> se d&eacute;clenche que si l&rsquo;origine d&rsquo;une exception est lev&eacute;e dans la m&eacute;thode <b>myPushChannel</b>. L&rsquo;&eacute;v&eacute;nement <b>HttpNotificationReceived</b> se d&eacute;clenche que lorsque qu&rsquo;une Raw Notification est re&ccedil;ue. L&rsquo;&eacute;v&eacute;nement ChannelUriUpdated se d&eacute;clenche lorsque le MPNS assigne ou met &agrave; jour une nouvelle URI pour la m&eacute;thode myPushChannel. Et pour finir, un &eacute;v&egrave;nement sur MyClient nomm&eacute; SubscribeMyPhoneCompleted est g&eacute;r&eacute;. Cet &eacute;v&eacute;nement se d&eacute;clenche quand un appel &agrave; la m&eacute;thode SubscribeMyPhone se termine normalement. Remarquez que vous n&rsquo;avez pas eu &agrave; g&eacute;n&eacute;rer cet &eacute;v&eacute;nement. Il a &eacute;t&eacute; g&eacute;n&eacute;r&eacute; automatiquement lorsque vous avez ajout&eacute; une r&eacute;f&eacute;rence vers Push Service.</li>
</ol>
<p>Par la suite, nous devons impl&eacute;menter les fonctions d&eacute;l&eacute;gu&eacute;es que nous assignerons pour g&eacute;rer les &eacute;v&eacute;nements sp&eacute;cifi&eacute;s dans la m&eacute;thode <b>attachHandlerFunctions</b>() :</p>
<ol>
<li>La fonction <b>myPushChannel_ErrorOccured</b> sera simplement un message d&rsquo;erreur affich&eacute; sur l&rsquo;&eacute;cran en utilisant le TextBlock <b>susbcriptionStatus</b>.</li>
<li>La fonction <b>myPushChannel_HttpNotificationReceived</b> d&eacute;codera la Notification Push de type Raw en utilisant un <a href="http://msdn.microsoft.com/en-us/library/system.io.streamreader(v=vs.95).aspx">StreamReader</a> et l&rsquo;affichera &agrave; l&rsquo;&eacute;cran en utilisant le TextBlock <b>rawmessage</b>. Cependant, &agrave; cause du d&eacute;clenchement des &eacute;v&eacute;nements de Push dans le thread de notification, la mise &agrave; jour de <b>rawmessage</b> est trait&eacute;e avec la m&eacute;thode <b>BeginInvoke()</b> du Dispatcher</li>
<li>La fonction <b>myClient_SubscribeMyPhoneCompleted</b> affiche un message quand le t&eacute;l&eacute;phone a charg&eacute; normalement les valeurs de <b>deviceID</b> et de <b>ChannelURI</b> de l&rsquo;application dans le Push Service en affichant la chaine de caract&egrave;re &laquo; Subscribed ! &raquo; dans le TextBlock <b>subscriptionStatus</b>.</li>
<li><b>myPushChannel_ChannelUriUpdated</b> est la fonction la plus complexe. Ici, l&rsquo;application v&eacute;rifie et assure que <b>myPushChannel</b> peut recevoir la Notification Push m&ecirc;me quand l&rsquo;application ne fonctionne pas en v&eacute;rifiant les valeurs <b>IsShellTileBound</b> et <b>IsShellToastBound</b>. Si ces valeurs sont &laquo; False &raquo;, l&rsquo;application lie le canal de communication au shell de sorte &agrave; ce que les notifications peuvent &ecirc;tre re&ccedil;ues quand l&rsquo;application ne fonctionne pas, en passant une liste des domaines autoris&eacute;s &agrave; envoyer des mises &agrave; jour. Ici, le domaine sur lequel nous avons publi&eacute; le Push Service est sp&eacute;cifi&eacute; (e.g. <a href="http://your_url_prefix.cloudapp.net">http://your_url_prefix.cloudapp.net</a>). La r&eacute;cup&eacute;ration d&rsquo;une URI sur le canal est not&eacute;e &agrave; l&rsquo;&eacute;cran en utilisant une fois encore la m&eacute;thode <b>BeginInvoke</b>() du Dispatcher, et l&rsquo;appel &agrave; la m&eacute;thode <b>SubscribeMyPhone()</b> assure que cette URI est connue par le Push Service.</li>
</ol>
<p>Maintenant que nous avons termin&eacute;, la page MainPage.xaml.cs doit ressembler &agrave; ceci:</p>
<p><b>C# (MainPage.xaml.cs) <br /></b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:dabceae8-a0f5-4583-b6fa-6cb68cc99dac" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 3em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">using</span> System;</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">using</span> System.Collections.Generic;</li>
<li><span style="color: #0000ff;">using</span> System.Linq;</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">using</span> System.Net;</li>
<li><span style="color: #0000ff;">using</span> System.Windows;</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">using</span> System.Windows.Controls;</li>
<li><span style="color: #0000ff;">using</span> System.Windows.Documents;</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">using</span> System.Windows.Input;</li>
<li><span style="color: #0000ff;">using</span> System.Windows.Media;</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">using</span> System.Windows.Media.Animation;</li>
<li><span style="color: #0000ff;">using</span> System.Windows.Shapes;</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">using</span> Microsoft.Phone.Controls;</li>
<li><span style="color: #008000;">//added</span></li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">using</span> System.IO.IsolatedStorage;</li>
<li><span style="color: #0000ff;">using</span> System.IO;</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">using</span> Microsoft.Phone.Notification;</li>
<li><span style="color: #0000ff;">using</span> System.Collections.ObjectModel;</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">namespace</span> Push_Client_Example</li>
<li>{</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">public</span> <span style="color: #0000ff;">partial</span> <span style="color: #0000ff;">class</span> <span style="color: #2b91af;">MainPage</span> : PhoneApplicationPage</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//Data members for this class</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//A unique ID for your phone, saved to internal memory</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #2b91af;">Guid</span> deviceID;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//Add a reference to your deployed Push Service URL and name it ServiceReference1</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//and this line will compile. In Solution Explorer, Right-click References,</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//then click "Add Service Reference," then enter the URL for the SVC file</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//for the Push Service and click "Go." Verify that the</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//Push Service's four methods are indeed exposed then click "OK."</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;">ServiceReference1</span>.Service1Client myClient = <span style="color: #0000ff;">new</span> <span style="color: #ff0000;">ServiceReference1</span>.Service1Client();</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//URI for this app's notification channel.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HttpNotificationChannel myPushChannel;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">// Constructor</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">public</span> MainPage()</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;">InitializeComponent</span>();</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//First, generate a GUID on this phone and save it; reuse if it exists to</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//keep consistent with service's data.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">if</span> (IsolatedStorageSettings.ApplicationSettings.Contains(<span style="color: #a31515;">"DeviceId"</span>))</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//load existing</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;deviceID = (<span style="color: #2b91af;">Guid</span>)IsolatedStorageSettings.ApplicationSettings[<span style="color: #a31515;">"DeviceId"</span>];</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">else</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//generate new ID</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;deviceID = <span style="color: #2b91af;">Guid</span>.NewGuid();</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IsolatedStorageSettings.ApplicationSettings[<span style="color: #a31515;">"DeviceId"</span>] = deviceID;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//Next, create a notification channel which will have its own URI that the</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//web service will need to know. We're naming the channel for this</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//app "myChannel." Channels need only be created once per app;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//if the URI ever changes, the ChannelUriUpdated event will fire. This</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//event also fires when the channel is created for the first time.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myPushChannel = HttpNotificationChannel.Find(<span style="color: #a31515;">"myChannel"</span>);</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//check to see if this channel has already been created; if so, reuse</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">if</span> (myPushChannel == <span style="color: #0000ff;">null</span>)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;">rawmessage</span>.Text += <span style="color: #a31515;">" Channel was null."</span>;</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//This channel needs to be created. ChannelUriUpdated will fire upon completion.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myPushChannel = <span style="color: #0000ff;">new</span> HttpNotificationChannel(<span style="color: #a31515;">"myChannel"</span>); <span style="color: #008000;">//create, then attach delegates, then Open()</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;attachHandlerFunctions();</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myPushChannel.Open(); <span style="color: #008000;">// will not fire ChannelUriUpdated if no handler is wired up first!</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">else</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;">rawmessage</span>.Text += <span style="color: #a31515;">" Channel was found!"</span>;</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//ChannelUriUpdated is not going to fire. Call subscribing method on</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//web service. Attach delegates.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;attachHandlerFunctions();</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myClient.<span style="color: #ff0000;">SubscribeMyPhoneAsync</span>(deviceID, myPushChannel.ChannelUri.ToString());</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">void</span> attachHandlerFunctions()</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//attaches delegates to push channel events</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//if error, print onscreen</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myPushChannel.ErrorOccurred += <span style="color: #0000ff;">new</span> <span style="color: #2b91af;">EventHandler</span>&lt;NotificationChannelErrorEventArgs&gt;(myPushChannel_ErrorOccurred);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//After call to SubscribeMyPhone completes, notify of success</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myClient.<span style="color: #ff0000;">SubscribeMyPhoneCompleted</span> += <span style="color: #0000ff;">new</span> <span style="color: #2b91af;">EventHandler</span>&lt;System.ComponentModel.AsyncCompletedEventArgs&gt;(myClient_SubscribeMyPhoneCompleted);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//ChannelUriUpdated fires when channel is first created or the channel URI changes</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myPushChannel.ChannelUriUpdated += <span style="color: #0000ff;">new</span> <span style="color: #2b91af;">EventHandler</span>&lt;NotificationChannelUriEventArgs&gt;(myPushChannel_ChannelUriUpdated);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//Handle raw push notifications, which are received only while app is running.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myPushChannel.HttpNotificationReceived += <span style="color: #0000ff;">new</span> <span style="color: #2b91af;">EventHandler</span>&lt;HttpNotificationEventArgs&gt;(myPushChannel_HttpNotificationReceived);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">void</span> myPushChannel_HttpNotificationReceived(<span style="color: #0000ff;">object</span> sender, HttpNotificationEventArgs e)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//Fires from shell thread, so updates to UI have to use dispatcher's</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//BeginInvoke() method. The body of the notification is a stream,</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//per the MPNS standard, but we know it's just text per our web</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//service design, so here we just decode, and display.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Deployment.Current.Dispatcher.BeginInvoke(() =&gt;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//this will fire in UI thread</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #2b91af;">StreamReader</span> myReader = <span style="color: #0000ff;">new</span> <span style="color: #2b91af;">StreamReader</span>(e.Notification.Body);</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;">rawmessage</span>.Text = <span style="color: #a31515;">"Received Raw Notification: "</span> + myReader.ReadToEnd();</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">void</span> myPushChannel_ChannelUriUpdated(<span style="color: #0000ff;">object</span> sender, NotificationChannelUriEventArgs e)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//also fires in notification thread. There are a couple things we want to do</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//here, once we know we have a valid channel from MPNS.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">// 1) Make sure phone's shell knows this channel is authorized to receive Tile</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//updates when app is not running.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">if</span> (myPushChannel.IsShellTileBound == <span style="color: #0000ff;">false</span>)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">var</span> ListOfAllowedDomains = <span style="color: #0000ff;">new</span> <span style="color: #2b91af;">Collection</span>&lt;Uri&gt; {</li>
<li style="background: #f3f3f3;"><span style="color: #008000;">//Lists domains that can send tile updates and so forth as push notifications.</span></li>
<li><span style="color: #008000;">//Only these authorized domains will be allowed by the shell to</span></li>
<li style="background: #f3f3f3;"><span style="color: #008000;">//push new tiles to the phone</span></li>
<li><span style="color: #0000ff;">new</span> Uri(<span style="color: #a31515;">@"http://YOUR WEB SERVICE'S DOMAIN GOES HERE"</span>)</li>
<li style="background: #f3f3f3;"><span style="color: #008000;">//e.g. if you published a webservice at http://foo.com/service1.svc -- put "http://foo.com" here.</span></li>
<li>};</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//Register this channel with the shell, pass on authorized</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//domain in way method expects</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myPushChannel.BindToShellTile(ListOfAllowedDomains);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//2) Make sure phone's shell knows this channel is authorized to receive</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//Toast messages when app is not running</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">if</span> (myPushChannel.IsShellToastBound == <span style="color: #0000ff;">false</span>)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myPushChannel.BindToShellToast();</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//3) Show that this event fired onscreen.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Deployment.Current.Dispatcher.BeginInvoke(() =&gt;</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;">rawmessage</span>.Text = <span style="color: #a31515;">"uri updated"</span>;</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//4) Pass the new ChannelUri on to the subscription service.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myClient.<span style="color: #ff0000;">SubscribeMyPhoneAsync</span>(deviceID, e.ChannelUri.ToString());</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">void</span> myClient_SubscribeMyPhoneCompleted(<span style="color: #0000ff;">object</span> sender, System.ComponentModel.AsyncCompletedEventArgs e)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//Handles completion of call to SubscribeMyPhone() on web service</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">if</span> (e.Error == <span style="color: #0000ff;">null</span>)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">// no server-side error occurred</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;">subscriptionStatus</span>.Text = <span style="color: #a31515;">"Subscribed!"</span>;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">else</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//show error onscreen</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;">subscriptionStatus</span>.Text = e.Error.Message;</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//As a last step, since we know at this point that we will have</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//a valid ChannelUri, print its value onscreen. Don't do this in real</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//life, obviously. Here, it's just to show how MPNS works.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;">channelURITextBlock</span>.Text = myPushChannel.ChannelUri.ToString();</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">void</span> myPushChannel_ErrorOccurred(<span style="color: #0000ff;">object</span> sender, NotificationChannelErrorEventArgs e)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//handles channel error caused from indirect exception</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;">subscriptionStatus</span>.Text = e.Message;</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li style="background: #f3f3f3;">}</li>
</ol></div>
</div>
</div>
<p><strong>Visual Basic (MainPage.xaml.vb) <br /></strong></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:f99e174c-4f3e-4938-967c-1cd5b59db10c" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 3em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">Imports</span> System.Collections.Generic</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">Imports</span> System.Linq</li>
<li><span style="color: #0000ff;">Imports</span> System.Net</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">Imports</span> System.Windows</li>
<li><span style="color: #0000ff;">Imports</span> System.Windows.Controls</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">Imports</span> System.Windows.Documents</li>
<li><span style="color: #0000ff;">Imports</span> System.Windows.Input</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">Imports</span> System.Windows.Media</li>
<li><span style="color: #0000ff;">Imports</span> System.Windows.Media.Animation</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">Imports</span> System.Windows.Shapes</li>
<li><span style="color: #0000ff;">Imports</span> Microsoft.Phone.Controls</li>
<li style="background: #f3f3f3;"><span style="color: #008000;">'added</span></li>
<li><span style="color: #0000ff;">Imports</span> System.IO.IsolatedStorage</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">Imports</span> System.IO</li>
<li><span style="color: #0000ff;">Imports</span> Microsoft.Phone.Notification</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">Imports</span> System.Collections.ObjectModel</li>
<li><span style="color: #0000ff;">Namespace</span> Push_Client_Example</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Partial</span> <span style="color: #0000ff;">Public</span> <span style="color: #0000ff;">Class</span> <span style="color: #2b91af;">MainPage</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Inherits</span> PhoneApplicationPage</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'Data members for this class</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'A unique ID for your phone, saved to internal memory</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Private</span> deviceID <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">Guid</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'Add a reference to your deployed Push Service URL and name it ServiceReference1</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'and this line will compile. In Solution Explorer, Right-click References,</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'then click "Add Service Reference," then enter the URL for the SVC file</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'for the Push Service and click "Go." Verify that the</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'Push Service's four methods are indeed exposed then click "OK."</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Private</span> myClient <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">New</span> ServiceReference1.Service1Client()</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'URI for this app's notification channel.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Private</span> myPushChannel <span style="color: #0000ff;">As</span> HttpNotificationChannel</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">' Constructor</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Public</span> <span style="color: #0000ff;">Sub</span> <span style="color: #0000ff;">New</span>()</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InitializeComponent()</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'First, generate a GUID on this phone and save it; reuse if it exists to</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'keep consistent with service's data.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">If</span> IsolatedStorageSettings.ApplicationSettings.Contains(<span style="color: #a31515;">"DeviceId"</span>) <span style="color: #0000ff;">Then</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'load existing</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;deviceID = <span style="color: #0000ff;">CType</span>(IsolatedStorageSettings.ApplicationSettings(<span style="color: #a31515;">"DeviceId"</span>), <span style="color: #2b91af;">Guid</span>)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Else</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'generate new ID</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;deviceID = <span style="color: #2b91af;">Guid</span>.NewGuid()</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;IsolatedStorageSettings.ApplicationSettings(<span style="color: #a31515;">"DeviceId"</span>) = deviceID</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'Next, create a notification channel which will have its own URI that the</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'web service will need to know. We're naming the channel for this</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'app "myChannel." Channels need only be created once per app;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'if the URI ever changes, the ChannelUriUpdated event will fire. This</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'event also fires when the channel is created for the first time.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myPushChannel = HttpNotificationChannel.Find(<span style="color: #a31515;">"myChannel"</span>)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'check to see if this channel has already been created; if so, reuse</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">If</span> myPushChannel <span style="color: #0000ff;">Is</span> <span style="color: #0000ff;">Nothing</span> <span style="color: #0000ff;">Then</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rawmessage.Text += <span style="color: #a31515;">" Channel was null."</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'This channel needs to be created. ChannelUriUpdated will fire upon completion.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myPushChannel = <span style="color: #0000ff;">New</span> HttpNotificationChannel(<span style="color: #a31515;">"myChannel"</span>)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'create, then attach delegates, then Open()</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;attachHandlerFunctions()</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">' will not fire ChannelUriUpdated if no handler is wired up first!</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myPushChannel.Open()</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Else</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rawmessage.Text += <span style="color: #a31515;">" Channel was found!"</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'ChannelUriUpdated is not going to fire. Call subscribing method on</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'web service. Attach delegates.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;attachHandlerFunctions()</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myClient.SubscribeMyPhoneAsync(deviceID, myPushChannel.ChannelUri.ToString())</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> attachHandlerFunctions()</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'attaches delegates to push channel events</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'if error, print onscreen</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myPushChannel.ErrorOccurred += <span style="color: #0000ff;">New</span> EventHandler(<span style="color: #0000ff;">Of</span> NotificationChannelErrorEventArgs)(<span style="color: #0000ff;">AddressOf</span> myPushChannel_ErrorOccurred)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'After call to SubscribeMyPhone completes, notify of success</span></li>
<li style="background: #f3f3f3;">myClient.SubscribeMyPhoneCompleted += <span style="color: #0000ff;">New</span> <span style="color: #2b91af;">EventHandler</span>(<span style="color: #0000ff;">Of</span> System.ComponentModel.<span style="color: #2b91af;">AsyncCompletedEventArgs</span>)(<span style="color: #0000ff;">AddressOf</span></li>
<li>myClient_SubscribeMyPhoneCompleted)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'ChannelUriUpdated fires when channel is first created or the channel URI changes</span></li>
<li>myPushChannel.ChannelUriUpdated += <span style="color: #0000ff;">New</span> EventHandler(<span style="color: #0000ff;">Of</span> NotificationChannelUriEventArgs)(<span style="color: #0000ff;">AddressOf</span></li>
<li style="background: #f3f3f3;">myPushChannel_ChannelUriUpdated)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'Handle raw push notifications, which are received only while app is running.</span></li>
<li style="background: #f3f3f3;">myPushChannel.HttpNotificationReceived += <span style="color: #0000ff;">New</span> EventHandler(<span style="color: #0000ff;">Of</span> HttpNotificationEventArgs)(<span style="color: #0000ff;">AddressOf</span></li>
<li>myPushChannel_HttpNotificationReceived)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> myPushChannel_HttpNotificationReceived(sender <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Object</span>, e <span style="color: #0000ff;">As</span> HttpNotificationEventArgs)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'Fires from shell thread, so updates to UI have to use dispatcher's</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'BeginInvoke() method. The body of the notification is a stream,</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'per the MPNS standard, but we know it's just text per our web</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'service design, so here we just decode, and display.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Deployment.Current.Dispatcher.BeginInvoke(<span style="color: #0000ff;">Function</span>()</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'this will fire in UI thread</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Dim</span> myReader <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">New</span> <span style="color: #2b91af;">StreamReader</span>(e.Notification.Body)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rawmessage.Text = <span style="color: #a31515;">"Received Raw Notification: "</span> &amp; myReader.ReadToEnd()</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Function</span>)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> myPushChannel_ChannelUriUpdated(sender <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Object</span>, e <span style="color: #0000ff;">As</span> NotificationChannelUriEventArgs)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'also fires in notification thread. There are a couple things we want to do</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'here, once we know we have a valid channel from MPNS.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">' 1) Make sure phone's shell knows this channel is authorized to receive Tile</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'updates when app is not running.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">If</span> myPushChannel.IsShellTileBound = <span style="color: #0000ff;">False</span> <span style="color: #0000ff;">Then</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'Lists domains that can send tile updates and so forth as push notifications.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'Only these authorized domains will be allowed by the shell to</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'push new tiles to the phone</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'e.g. if you published a webservice at http://foo.com/service1.svc -- put "http://foo.com" here.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Dim</span> ListOfAllowedDomains = <span style="color: #0000ff;">New</span> <span style="color: #2b91af;">Collection</span>(<span style="color: #0000ff;">Of</span> <span style="color: #2b91af;">Uri</span>)() <span style="color: #0000ff;">From</span> { _</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">New</span> <span style="color: #2b91af;">Uri</span>(<span style="color: #a31515;">"http://YOUR WEB SERVICE'S DOMAIN GOES HERE"</span>) _</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'Register this channel with the shell, pass on authorized</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'domain in way method expects</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myPushChannel.BindToShellTile(ListOfAllowedDomains)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'2) Make sure phone's shell knows this channel is authorized to receive</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'Toast messages when app is not running</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">If</span> myPushChannel.IsShellToastBound = <span style="color: #0000ff;">False</span> <span style="color: #0000ff;">Then</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myPushChannel.BindToShellToast()</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'3) Show that this event fired onscreen.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Deployment.Current.Dispatcher.BeginInvoke(<span style="color: #0000ff;">Function</span>()</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rawmessage.Text = <span style="color: #a31515;">"uri updated"</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Function</span>)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'4) Pass the new ChannelUri on to the subscription service.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;myClient.SubscribeMyPhoneAsync(deviceID, e.ChannelUri.ToString())</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> myClient_SubscribeMyPhoneCompleted(sender <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Object</span>, e <span style="color: #0000ff;">As</span> System.ComponentModel.<span style="color: #2b91af;">AsyncCompletedEventArgs</span>)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'Handles completion of call to SubscribeMyPhone() on web service</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">If</span> e.[Error] <span style="color: #0000ff;">Is</span> <span style="color: #0000ff;">Nothing</span> <span style="color: #0000ff;">Then</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">' no server-side error occurred</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subscriptionStatus.Text = <span style="color: #a31515;">"Subscribed!"</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Else</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'show error onscreen</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subscriptionStatus.Text = e.[Error].Message</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'As a last step, since we know at this point that we will have</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'a valid ChannelUri, print its value onscreen. Don't do this in real</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'life, obviously. Here, it's just to show how MPNS works.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;channelURITextBlock.Text = myPushChannel.ChannelUri.ToString()</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> myPushChannel_ErrorOccurred(sender <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Object</span>, e <span style="color: #0000ff;">As</span> NotificationChannelErrorEventArgs)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'handles channel error caused from indirect exception</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subscriptionStatus.Text = e.Message</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Class</span></li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Namespace</span></li>
</ol></div>
</div>
</div>
<p><a id="testing" name="testing"></a></p>
<h2>Test</h2>
<p>Si vous testez sur l&rsquo;&eacute;mulateur de Windows Phone, suivez <a href="http://msdn.microsoft.com/en-us/library/ff754351(v=vs.92).aspx#BKMK_ConfigSocks">ces instructions</a> pour vous assurer qu&rsquo;un proxy SOCKS a bien &eacute;t&eacute; inscrit dans le panneau de contr&ocirc;le des options Internet de votre ordinateur.</p>
<p>Ex&eacute;cutez l&rsquo;application mobile. Vous devriez voir la cha&icirc;ne de caract&egrave;re &laquo; Subscribed! &raquo; sur l&rsquo;&eacute;cran. Cela signifie que le t&eacute;l&eacute;phone est pr&ecirc;t &agrave; recevoir des Push Notifications. Pour envoyer ces notifications, nous utiliserons un outil pour invoquer le Push Service.</p>
<p>Lancez la commande de Visual Studio et saisissez &ldquo;<a href="http://msdn.microsoft.com/en-us/library/bb552364.aspx">WCFTestClient</a>&rdquo;. Cet outil aussi peut &ecirc;tre acc&eacute;d&eacute; en entrant les chemins suivants ; %ProgramFiles(x86)%\Microsoft Visual Studio 10.0\Common7\IDE (sur des syst&egrave;mes 64-bit) et %ProgramFiles%\Microsoft Visual Studio 10.0\Common7\IDE (sur des syst&egrave;mes 32-bit).</p>
<p>Dans l&rsquo;outil WCF Test Client, allez dans &laquo; File &raquo; &gt; &laquo; Add Service &raquo;, et entrez l&rsquo;url du .svc pour le Push Service (<a href="http://your_url_prefix.cloudapp.net/Service1.svc">http://your_url_prefix.cloudapp.net/Service1.svc</a>).</p>
<p>En utilisant l&rsquo;outil WCF Test Client, vous invoquez la m&eacute;thode PushRawData() pendant que l&rsquo;application est en marche, elle enverra une cha&icirc;ne de caract&egrave;re &agrave; l&rsquo;application. Celle-ci devrait rapidement apparaitre &agrave; l&rsquo;&eacute;cran.</p>
<p>Quittez l&rsquo;application en appuyant sur le bouton de retour, et &eacute;pinglez l&rsquo;application sur le menu de d&eacute;marrage du t&eacute;l&eacute;phone par un appui long sur l&rsquo;ic&ocirc;ne de l&rsquo;application et s&eacute;lectionnez &laquo; Pin to Start &raquo; de la fen&ecirc;tre contextuelle. Vous pouvez maintenant aller &agrave; la page de d&eacute;marrage du t&eacute;l&eacute;phone et vous apercevoir que votre application est pr&eacute;sente</p>
<p>En utilisant le WCF Test Client, vous invoquez la m&eacute;thode PushTileUpdate(), saisissez l&rsquo;url pour l&rsquo;un des fichiers .png que vous avez inclus quand vous avez d&eacute;ploy&eacute; le Push Service (<a href="http://your_url_prefix.doudapp.net/Service1.svc">http://your_url_prefix.doudapp.net/Service1.svc</a>) comme valeur pour le param&egrave;tre TileImageURL.</p>
<p>Entrez ce que vous voulez pour les autres param&egrave;tres. Le Live Tile pour l&rsquo;application pr&eacute;sente sur le menu de d&eacute;marrage devrait momentan&eacute;ment se mettre &agrave; jour en montrant toutes ces modifications.</p>
<p>Enfin, invoquez la m&eacute;thode PuchToast(), entrez un sujet et le corps pour votre message. La notification apparaitra sur l&rsquo;&eacute;cran du t&eacute;l&eacute;phone et vous pouvez la toucher pour rentrer &agrave; nouveau dans l&rsquo;application.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/6648.image_1E3F497C.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/6648.image_5F00_1E3F497C.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/1856.image_thumb_3B64F186.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/1856.image_5F00_thumb_5F00_3B64F186.png" width="674" height="428" /></a></p>
<p><strong>Voir aussi</strong></p>
<ul>
<li><span style="text-decoration: underline;"><a href="http://code.msdn.microsoft.com/silverlightforphone/Release/ProjectReleases.aspx?ReleaseId=5313">Le code source de ce tutoriel</a> </span></li>
<li><span style="text-decoration: underline;"><a href="https://channel9.msdn.com/posts/Windows-Phone-7-Push-Notification-QuickApp--Web-Service-With-Azure-Publishing-Instructions">La solution de ce tutoriel en vid&eacute;o</a> </span></li>
<li><a href="http://msdn.microsoft.com/en-us/library/ff402537(v=VS.92).aspx">Les Notifications Push pour Windows Phone</a> (Documents de r&eacute;f&eacute;rence)</li>
<li><span style="text-decoration: underline;"><a href="http://go.microsoft.com/fwlink/?LinkID=206204">S&rsquo;enregistrer pour un essai de Windows Azure / T&eacute;l&eacute;charger le SDK Azure</a> </span></li>
</ul>]]></content:encoded>
    </item>
    <item>
      <title>Developpement Windows Phone - partie 9</title>
      <link>https://docs.microsoft.com/archive/blogs/patrick_payet/developpement-windows-phone-partie-9</link>
      <pubDate>Tue, 06 Sep 2011 13:09:00 GMT</pubDate>
      <dc:creator><![CDATA[papayet]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/patrick_payet/2011/09/06/developpement-windows-phone-partie-9/</guid>
      <description><![CDATA[Saisie tactile
Cet article fait partie d&rsquo;une s&eacute;rie d&rsquo;articles sur le...]]></description>
      <content:encoded><![CDATA[<h1>Saisie tactile</h1>
<p>Cet article fait partie d&rsquo;une s&eacute;rie d&rsquo;articles sur le d&eacute;veloppement Windows Phone. Il s&rsquo;agit d&rsquo;une traduction des articles se trouvant <a href="http://create.msdn.com/en-us/education/quickstarts" target="_blank">sur la MSDN</a>.</p>
<h2><a name="sommaire"></a>Sommaire</h2>
<p><strong>Bien d&eacute;buter et fondamentaux</strong></p>
<ul>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-1.aspx" target="_blank">Bien d&eacute;marrer (Hello World)</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-2.aspx" target="_blank">Cr&eacute;er une interface utilisateur pour Windows Phone en XAML</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-3.aspx" target="_blank">Utiliser des contr&ocirc;les</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-4.aspx" target="_blank">Types de contr&ocirc;les</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-5.aspx" target="_blank">Contr&ocirc;les Panorama et Pivot</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-6.aspx" target="_blank">Travailler avec du texte sur le Windows Phone</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-7.aspx" target="_blank">Mise en page sur l&rsquo;&eacute;cran</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-8.aspx" target="_blank">Orientations de l&rsquo;&eacute;cran</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-9.aspx" target="_blank">Saisie tactile</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-10.aspx" target="_blank">Navigation</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-11.aspx" target="_blank">Ex&eacute;cuter votre application en arri&egrave;re-plan (tombstoning)</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-12.aspx" target="_blank">Notifications Push pour le d&eacute;veloppement Windows Phone</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-13.aspx" target="_blank">Publier votre application sur le Marketplace</a></li>
</ul>
<p><strong>Visuels et m&eacute;dia</strong></p>
<ul>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-14.aspx" target="_blank">Images</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-15.aspx" target="_blank">Animations</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-16.aspx" target="_blank">Vid&eacute;o et Audio</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-17.aspx" target="_blank">Graphiques</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-18.aspx" target="_blank">Pinceaux</a></li>
</ul>
<p><strong>Travailler avec les donn&eacute;es</strong></p>
<ul>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-19.aspx" target="_blank">Obtenir des donn&eacute;es dans vos applications Windows Phone</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-20.aspx" target="_blank">Data binding</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-21.aspx" target="_blank">Isolated storage</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-22.aspx" target="_blank">Acc&eacute;der &agrave; un service Web REST</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-23.aspx" target="_blank">Consommer des donn&eacute;es Windows Azure</a></li>
</ul>
<p><strong>Sondes et autres fonctionnalit&eacute;s sp&eacute;cifiques au t&eacute;l&eacute;phone</strong></p>
<ul>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-24.aspx" target="_blank">Lanceurs et choosers</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-25.aspx" target="_blank">D&eacute;tecter des mouvements (acc&eacute;l&eacute;rom&egrave;tres)</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-26.aspx" target="_blank">D&eacute;velopper avec le GPS Windows Phone (Services de localisation)</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-27.aspx" target="_blank">D&eacute;velopper avec l&rsquo;appareil photo du Windows Phone</a></li>
</ul>
<hr />
<h1>Saisie tactile</h1>
<p>Les appareils Windows Phone 7 ont des &eacute;crans multi-touch qui permet aux utilisateurs d&rsquo;utiliser plusieurs doigts simultan&eacute;ment pour produire diff&eacute;rents mouvements d&rsquo;entr&eacute;s, tels que taper, la pichenette ou m&ecirc;me pincer. Silverlight pour Windows Phone a un nombre de m&eacute;canismes diff&eacute;rents pour g&eacute;rer la saisie tactile. Ce tutoriel couvre les bases de l&rsquo;utilisation de la saisie tactile dans vos applications Silverlight.</p>
<p>Ce tutoriel contient les sections suivantes:</p>
<ul>
<li><a href="#introduction">Introduction &agrave; la saisie tactile (Touch Input</a><span style="text-decoration: underline;">)</span></li>
<li><a href="#gestures">Les Gestures</a></li>
<li><a href="#using_mouse_events">Utiliser les &eacute;v&egrave;nements de la souris</a></li>
<li><a href="#using_manipulation_events">Utiliser les &eacute;v&egrave;nements de manipulation</a></li>
<li><a href="#using_toolkit_gestures">Silverlight Toolkit pour Windows Phone</a></li>
<li><a href="#ui_design">Interface graphique et saisie tactile</a></li>
</ul>
<p><strong>Remarque</strong></p>
<p>Les exemples de ce tutoriel utilisent Silverlight du navigateur pour simuler le comportement de Silverlight pour Windows Phone. Le comportement actuel peut &ecirc;tre l&eacute;g&egrave;rement diff&eacute;rent dans un &eacute;mulateur Windows Phone ou sur un appareil Windows Phone.<a name="introduction"></a></p>
<p><a name="introduction"></a></p>
<h2><br />Introduction &agrave; la saisie tactile</h2>
<p>Les appareils Windows Phone utilisent le toucher pour la majorit&eacute; des entr&eacute;es de l&rsquo;utilisateur. Windows Phone supporte les &eacute;crans multi-touch qui permettent aux utilisateurs d&rsquo;utiliser les gestes naturels pour interagir avec l&rsquo;appareil. L&rsquo;ajout du support du toucher et du mouvement pour vos applications peut grandement am&eacute;liorer l&rsquo;exp&eacute;rience utilisateur. Il y a un plusieurs fa&ccedil;ons diff&eacute;rentes qui permettent de g&eacute;rer les saisies tactiles dans vos applications Windows Phone.</p>
<p>Les &eacute;v&egrave;nements de souris avec Silverlight peuvent &ecirc;tre utilis&eacute;s pour d&eacute;tecter un simple mouvement avec un doigt comme une tape ou une double tape. Les gestionnaires d&rsquo;&eacute;v&egrave;nements de la souris peuvent &ecirc;tre rapidement rajout&eacute;s &agrave; votre application et sont un moyen facile d&rsquo;obtenir un soutien tactile.</p>
<p>Les &eacute;v&egrave;nements de manipulation comme <a href="http://msdn.microsoft.com/en-us/library/system.windows.uielement.manipulationstarted(v=VS.95).aspx">ManipulationStarted</a> et <a href="http://msdn.microsoft.com/en-us/library/system.windows.uielement.manipulationdelta(v=VS.95).aspx">ManipulationDelta</a><span style="text-decoration: underline;"> </span>sont utilis&eacute;s pour g&eacute;rer des gestes plus complexes comme des mouvements multi-touch et des mouvements qui utilisent l&rsquo;inertie et les donn&eacute;es de vitesse.</p>
<p>La classe <a href="http://msdn.microsoft.com/en-us/library/system.windows.input.touchpoint(v=VS.95).aspx">TouchPoint</a> est une autre fa&ccedil;on de g&eacute;rer la saisie tactile en Silverlight pour Windows Phone. Cette classe est un syst&egrave;me d&rsquo;entr&eacute;e de bas niveau qui n&rsquo;est pas couvert dans ce tutoriel.</p>
<p>Vous pouvez g&eacute;rer le touch&eacute; et les mouvements avec les classes GestureService et GestureListener contenus dans le <a href="http://silverlight.codeplex.com/">Silverlight Toolkit pour Windows Phone</a>. Le Toolkit est un projet Open Source et non une partie du c&oelig;ur de Silverlight pour Windows Phone, mais un nombre de classes qui sont apparues en premier dans le Toolkit &eacute;tait &eacute;ventuellement incluses dans les pr&eacute;c&eacute;dentes versions de Silverlight.<a name="gestures"></a> </p>
<p><a name="gestures"></a></p>
<h2>Les Gestures</h2>
<p>Les gestes ou mouvements appel&eacute;s ici les Gestures, sont un moyen de haut niveau d&rsquo;interpr&eacute;ter les donn&eacute;es de saisie tactile en un ensemble de mouvements communs tels que taper, la pichenette ou pincer. Les mouvements communs utilis&eacute;s dans Windows Phone sont :</p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<p>Gesture</p>
</td>
<td>
<p>Description</p>
</td>
</tr>
<tr>
<td valign="top">
<p>Tap</p>
</td>
<td valign="top">
<p>Un doigt touche l&rsquo;&eacute;cran et le rel&egrave;ve</p>
</td>
</tr>
<tr>
<td valign="top">
<p>Double Tap</p>
</td>
<td valign="top">
<p>Un doigt qui tape l&rsquo;&eacute;cran deux fois d&rsquo;affil&eacute;</p>
</td>
</tr>
<tr>
<td valign="top">
<p>Hold</p>
</td>
<td valign="top">
<p>Un doigt touche l&rsquo;&eacute;cran et le tient bri&egrave;vement en place</p>
</td>
</tr>
<tr>
<td valign="top">
<p>Drag</p>
</td>
<td valign="top">
<p>Un doigt touche l&rsquo;&eacute;cran et se d&eacute;place dans n&rsquo;importe quelle direction</p>
</td>
</tr>
<tr>
<td valign="top">
<p>Flick</p>
</td>
<td valign="top">
<p>Un doigt glisse au travers l&rsquo;&eacute;cran et se rel&egrave;ve sans arr&ecirc;t.</p>
</td>
</tr>
<tr>
<td valign="top">
<p>Pinch</p>
</td>
<td valign="top">
<p>Deux doigts pressent sur l&rsquo;&eacute;cran et se d&eacute;placent</p>
</td>
</tr>
</tbody>
</table>
<p>Les &eacute;v&egrave;nements de la souris avec Silverlight comme <a href="http://msdn.microsoft.com/en-us/library/system.windows.uielement.mouseleftbuttonup(v=VS.95).aspx">MouseLeftButtonUp</a> et <a href="http://msdn.microsoft.com/en-us/library/system.windows.uielement.mousemove(v=VS.95).aspx">MouseMove</a> peuvent &ecirc;tre utilis&eacute;s pour simple support pour les mouvements d&rsquo;un doigt tels que le tapotement.</p>
<p>Pour les mouvements multi-touch comme le pincement et les mouvements qui utilisent l&rsquo;inertie et les donn&eacute;es de vitesses telles que les pichenettes, les &eacute;v&egrave;nements de manipulation sont utilis&eacute;s. L&rsquo;information fournie par les &eacute;v&egrave;nements de manipulation n&rsquo;est pas dans la forme du geste qui a &eacute;t&eacute; effectu&eacute;, mais repr&eacute;sente les donn&eacute;es telles que la position, l&rsquo;&eacute;cart de translation, et la v&eacute;locit&eacute;. Ces saisies de donn&eacute;es peuvent &ecirc;tre utilis&eacute;es pour d&eacute;terminer le type de mouvement qui a &eacute;t&eacute; effectu&eacute;. C&rsquo;est de la responsabilit&eacute; du d&eacute;veloppeur Silverlight de convertir ces informations dans un mouvement &eacute;quivalent. Ceci dit, le <a href="http://silverlight.codeplex.com/">Silverlight Toolkit</a> fournit du support aux mouvements au travers les classes GestureService et GestureListener.</p>
<p><a name="using_mouse_events"></a></p>
<h2>Utiliser les &eacute;v&egrave;nements de la souris</h2>
<p>La fa&ccedil;on la plus simple de permettre la saisie tactile dans votre application mobile Silverlight pour Windows Phone est par l&rsquo;utilisation des &eacute;v&egrave;nements de la souris. Ceux-ci sont limit&eacute;s aux mouvements d&rsquo;un simple doigt comme l&rsquo;action de taper une fois ou deux sur l&rsquo;&eacute;cran (on parlera ici de &laquo; tap &raquo; et de &laquo; double tap &raquo;), et ils ne supporteront pas les donn&eacute;es bas&eacute;es sur la vitesse du doigt. Un simple doigt qui touche l&rsquo;&eacute;cran est converti en un &eacute;v&egrave;nement de souris, comme par exemple l&rsquo;&eacute;v&egrave;nement <a href="http://msdn.microsoft.com/en-us/library/system.windows.uielement.mouseleftbuttondown(v=VS.95).aspx">MouseLeftButtonDown</a> lorsque vous placez votre doigt sur l&rsquo;&eacute;cran, ou l&rsquo;&eacute;v&egrave;nement <a href="http://msdn.microsoft.com/en-us/library/system.windows.uielement.mouseleftbuttonup(v=VS.95).aspx">MouseLeftButtonUp</a> lorsque vous levez votre doigt de l&rsquo;&eacute;cran et l&rsquo;&eacute;v&egrave;nement <a href="http://msdn.microsoft.com/en-us/library/system.windows.uielement.mousemove(v=VS.95).aspx">MouseMove</a> lorsque vous faites glisser votre doigt sur l&rsquo;&eacute;cran. Les autres &eacute;v&egrave;nements de la souris qui sont utilis&eacute;s en Silverlight pour Windows Phone sont les suivants : <a href="http://msdn.microsoft.com/en-us/library/system.windows.uielement.mouseleave(VS.95).aspx">MouseLeave</a> et <a href="http://msdn.microsoft.com/en-us/library/system.windows.uielement.mouseenter(v=VS.95).aspx">MouseEnter</a>. Les arguments de ces &eacute;v&egrave;nements pour tous les &eacute;v&egrave;nements de souris sont repr&eacute;sent&eacute;s par <a href="http://msdn.microsoft.com/en-us/library/system.windows.input.mousebuttoneventargs(VS.95).aspx">MouseButtonEventArgs</a>.</p>
<p>L&rsquo;&eacute;v&egrave;nement <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.buttonbase.click(v=VS.95).aspx">Click</a> sur la classe <a href="http://msdn.microsoft.com/en-us/library/ms611651(v=VS.95).aspx">Button</a> est un autre moyen d&rsquo;ajouter un support pour les mouvements de tape sur les boutons.</p>
<p>L&rsquo;exemple suivant montre comment utiliser les &eacute;v&egrave;nements <a href="http://msdn.microsoft.com/en-us/library/system.windows.uielement.mouseleftbuttondown(v=VS.95).aspx">MouseLeftButtonDown</a>, <a href="http://msdn.microsoft.com/en-us/library/system.windows.uielement.mouseleftbuttonup(v=VS.95).aspx">MouseLeftButtonUp</a>, et <a href="http://msdn.microsoft.com/en-us/library/system.windows.uielement.mouseleave(VS.95).aspx">MouseLeave</a> pour g&eacute;rer le mouvement de tape sur un objet <a href="http://msdn.microsoft.com/en-us/library/system.windows.shapes.rectangle(VS.95).aspx">Rectangle</a> .</p>
<p>En premier, un <a href="http://msdn.microsoft.com/en-us/library/system.windows.shapes.rectangle(VS.95).aspx">Rectangle</a> nomm&eacute; <b>TestRectangle</b>&nbsp; est cr&eacute;&eacute; en XAML et les gestionnaires d&rsquo;&eacute;v&egrave;nements sont ajout&eacute;s pour les &eacute;v&egrave;nements <a href="http://msdn.microsoft.com/en-us/library/system.windows.uielement.mouseleftbuttondown(v=VS.95).aspx">MouseLeftButtonDown</a>, <a href="http://msdn.microsoft.com/en-us/library/system.windows.uielement.mouseleftbuttonup(v=VS.95).aspx">MouseLeftButtonUp</a>, et <a href="http://msdn.microsoft.com/en-us/library/system.windows.uielement.mouseleave(VS.95).aspx">MouseLeave</a> .</p>
<p><b>XAML</b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:d7d99c6d-353a-45e2-8714-057b784bdf0f" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;">
<li><span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Rectangle</span><span style="color: #ff0000;"> Name</span><span style="color: #0000ff;">="TestRectangle"</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> Height</span><span style="color: #0000ff;">="100"</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> Width</span><span style="color: #0000ff;">="200"</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> Fill</span><span style="color: #0000ff;">="Blue"</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> MouseLeftButtonDown</span><span style="color: #0000ff;">="</span><span style="color: #ff0000;">Tap_LeftButtonDown</span><span style="color: #0000ff;">"</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> MouseLeftButtonUp</span><span style="color: #0000ff;">="</span><span style="color: #ff0000;">Tap_LeftButtonUp</span><span style="color: #0000ff;">"</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> MouseLeave</span><span style="color: #0000ff;">="</span><span style="color: #ff0000;">Tap_MouseLeave</span><span style="color: #0000ff;">" /&gt;</span></li>
</ol></div>
</div>
</div>
<p>Par la suite, les gestionnaires d&rsquo;&eacute;v&egrave;nements pour les &eacute;v&egrave;nements de la souris sont cr&eacute;&eacute;s. L&rsquo;Event Handler <a href="http://msdn.microsoft.com/en-us/library/system.windows.uielement.mouseleftbuttondown(v=VS.95).aspx">MouseLeftButtonDown</a> augmentera la hauteur (<a href="http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.height(v=VS.95).aspx">Height</a> ) et la largeur (<a href="http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.width(v=VS.95).aspx">Width</a> ) du Rectangle. L&rsquo;Event Handler <a href="http://msdn.microsoft.com/en-us/library/system.windows.uielement.mouseleftbuttonup(v=VS.95).aspx">MouseLeftButtonUp</a> d&eacute;finit la hauteur (<a href="http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.height(v=VS.95).aspx">Height</a> ) et la largeur (<a href="http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.width(v=VS.95).aspx">Width</a> ) de retour &agrave; leurs valeurs initiales. Enfin, l&rsquo;Event Handler <a href="http://msdn.microsoft.com/en-us/library/system.windows.uielement.mouseleave(VS.95).aspx">MouseLeave</a><span style="text-decoration: underline;"> </span>d&eacute;finit aussi la hauteur (<a href="http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.height(v=VS.95).aspx">Height</a> ) et la largeur (<a href="http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.width(v=VS.95).aspx">Width</a> ) de retour &agrave; leurs valeurs initiales.</p>
<p><b>C#</b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:8a472346-fb47-4cc3-9ec1-b450e2237902" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">private</span> <span style="color: #0000ff;">void</span> Tap_LeftButtonDown(<span style="color: #0000ff;">object</span> sender, <span style="color: #2b91af;">MouseButtonEventArgs</span> e)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #2b91af;">Rectangle</span> rect = sender <span style="color: #0000ff;">as</span> <span style="color: #2b91af;">Rectangle</span>;</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">// Change the size of the Rectangle.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">if</span> (<span style="color: #0000ff;">null</span> != rect)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rect.Width = 250;</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rect.Height = 150;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">private</span> <span style="color: #0000ff;">void</span> Tap_LeftButtonUp(<span style="color: #0000ff;">object</span> sender, <span style="color: #2b91af;">MouseButtonEventArgs</span> e)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #2b91af;">Rectangle</span> rect = sender <span style="color: #0000ff;">as</span> <span style="color: #2b91af;">Rectangle</span>;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">// Reset the dimensions on the Rectangle.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">if</span> (<span style="color: #0000ff;">null</span> != rect)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rect.Width = 200;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rect.Height = 100;</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li style="background: #f3f3f3;">&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">private</span> <span style="color: #0000ff;">void</span> Tap_MouseLeave(<span style="color: #0000ff;">object</span> sender, <span style="color: #2b91af;">MouseEventArgs</span> e)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #2b91af;">Rectangle</span> rect = sender <span style="color: #0000ff;">as</span> <span style="color: #2b91af;">Rectangle</span>;</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">// Finger moved out of Rectangle before the mouse up event.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">// Reset the dimensions on the Rectangle.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">if</span> (<span style="color: #0000ff;">null</span> != rect)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rect.Width = 200;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rect.Height = 100;</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
</ol></div>
</div>
</div>
<p><b>Visual Basic</b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:2ac219e5-9b2c-4190-b5b9-8044a227e3b0" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> Tap_LeftButtonDown(<span style="color: #0000ff;">ByVal</span> sender <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Object</span>, <span style="color: #0000ff;">ByVal</span> e <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">MouseButtonEventArgs</span>)</li>
<li style="background: #f3f3f3;">&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Dim</span> rect <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">Rectangle</span> = <span style="color: #0000ff;">CType</span>(sender, <span style="color: #2b91af;">Rectangle</span>)</li>
<li style="background: #f3f3f3;">&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">' Change the size of the Rectangle.</span></li>
<li style="background: #f3f3f3;">&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">If</span> (<span style="color: #0000ff;">Not</span> (rect) <span style="color: #0000ff;">Is</span> <span style="color: #0000ff;">Nothing</span>) <span style="color: #0000ff;">Then</span></li>
<li style="background: #f3f3f3;">&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rect.Width = 250</li>
<li style="background: #f3f3f3;">&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rect.Height = 150</li>
<li style="background: #f3f3f3;">&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span></li>
<li style="background: #f3f3f3;">&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></li>
<li style="background: #f3f3f3;">&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> Tap_LeftButtonUp(<span style="color: #0000ff;">ByVal</span> sender <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Object</span>, <span style="color: #0000ff;">ByVal</span> e <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">MouseButtonEventArgs</span>)</li>
<li style="background: #f3f3f3;">&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Dim</span> rect <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">Rectangle</span> = <span style="color: #0000ff;">CType</span>(sender, <span style="color: #2b91af;">Rectangle</span>)</li>
<li style="background: #f3f3f3;">&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">' Reset the dimensions on the Rectangle.</span></li>
<li style="background: #f3f3f3;">&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">If</span> (<span style="color: #0000ff;">Not</span> (rect) <span style="color: #0000ff;">Is</span> <span style="color: #0000ff;">Nothing</span>) <span style="color: #0000ff;">Then</span></li>
<li style="background: #f3f3f3;">&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rect.Width = 200</li>
<li style="background: #f3f3f3;">&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rect.Height = 100</li>
<li style="background: #f3f3f3;">&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span></li>
<li style="background: #f3f3f3;">&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></li>
<li style="background: #f3f3f3;">&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> Tap_MouseLeave(<span style="color: #0000ff;">ByVal</span> sender <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Object</span>, <span style="color: #0000ff;">ByVal</span> e <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">MouseEventArgs</span>)</li>
<li style="background: #f3f3f3;">&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Dim</span> rect <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">Rectangle</span> = <span style="color: #0000ff;">CType</span>(sender, <span style="color: #2b91af;">Rectangle</span>)</li>
<li style="background: #f3f3f3;">&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">' Finger moved out of Rectangle before the mouse up event.</span></li>
<li style="background: #f3f3f3;">&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">' Reset the dimensions on the Rectangle.</span></li>
<li style="background: #f3f3f3;">&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">If</span> (<span style="color: #0000ff;">Not</span> (rect) <span style="color: #0000ff;">Is</span> <span style="color: #0000ff;">Nothing</span>) <span style="color: #0000ff;">Then</span></li>
<li style="background: #f3f3f3;">&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rect.Width = 200</li>
<li style="background: #f3f3f3;">&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rect.Height = 100</li>
<li style="background: #f3f3f3;">&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span></li>
<li style="background: #f3f3f3;">&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></li>
</ol></div>
</div>
</div>
<p>L&rsquo;exemple suivant d&eacute;montre les &eacute;v&egrave;nements de tapotement de la souris. Pour essayer cet exemple, cliquez sur le Rectangle.</p>
<p><object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="600" height="520" autoupdate="true"><param name="source" value="http://create.msdn.com/assets/cms/docs/QuickstartsXAP/QuickStartsPhone_Input1.xap" /><param name="minRuntimeVersion" value="2.0.31005.0" /><param name="background" value="White" /><param name="autoUpgrade" value="true" /><a href="http://go.microsoft.com/fwlink/?LinkID=149156&amp;v=2.0.31005.0" style="text-decoration: none;"> <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style: none;" /> </a> </object></p>
<p>L&rsquo;exemple suivant montre comment utiliser l&rsquo;&eacute;v&egrave;nement <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.buttonbase.click(v=VS.95).aspx">Click</a> sur un <a href="http://msdn.microsoft.com/en-us/library/ms611651(v=VS.95).aspx">Button</a> pour g&eacute;rer le mouvement de tape.</p>
<p>Un <a href="http://msdn.microsoft.com/en-us/library/ms611651(v=VS.95).aspx">Button</a> est cr&eacute;&eacute; en XAML et un Event Handler est ajout&eacute; pour l&rsquo;&eacute;v&egrave;nement <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.buttonbase.click(v=VS.95).aspx">Click</a> .</p>
<p><b>XAML</b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:dc7369b2-34f5-4a33-9376-dbb93ef49496" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Button</span><span style="color: #ff0000;"> Name</span><span style="color: #0000ff;">="TestButton"</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> Content</span><span style="color: #0000ff;">="Tap"</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> Height</span><span style="color: #0000ff;">="100"</span><span style="color: #ff0000;"> Width</span><span style="color: #0000ff;">="200"</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> Click</span><span style="color: #0000ff;">="</span><span style="color: #ff0000;">TestButton_Click</span><span style="color: #0000ff;">" /&gt;</span></li>
</ol></div>
</div>
</div>
<p>Dans l&rsquo;Event Handler <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.buttonbase.click(v=VS.95).aspx">Click</a> , le contenu du bouton est permut&eacute; entre &laquo; Tap &raquo; et &laquo; Tap Again &raquo;. Le texte change &agrave; chaque fois que le bouton est tap&eacute;.</p>
<p><b>C#</b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:bbc2a821-fb1c-4973-bad6-3d001f5aa899" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">private</span> <span style="color: #0000ff;">void</span> TestButton_Click(<span style="color: #0000ff;">object</span> sender, <span style="color: #2b91af;">RoutedEventArgs</span> e)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #2b91af;">Button</span> button = sender <span style="color: #0000ff;">as</span> <span style="color: #2b91af;">Button</span>;</li>
<li style="background: #f3f3f3;">&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">if</span> (<span style="color: #0000ff;">null</span> != button)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">// Toggle Button.Conten between "Tap" and "Tap Again!"</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">if</span> (button.Content <span style="color: #0000ff;">as</span> <span style="color: #0000ff;">string</span> == <span style="color: #a31515;">"Tap"</span>)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;button.Content = <span style="color: #a31515;">"Tap Again!"</span>;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">else</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;button.Content = <span style="color: #a31515;">"Tap"</span>;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
</ol></div>
</div>
</div>
<p><b>Visual Basic</b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:226d73b1-0df4-4d46-9a1f-296fac585ccc" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> TestButton_Click(<span style="color: #0000ff;">ByVal</span> sender <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Object</span>, <span style="color: #0000ff;">ByVal</span> e <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">RoutedEventArgs</span>)</li>
<li style="background: #f3f3f3;">&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Dim</span> button <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">Button</span> = <span style="color: #0000ff;">CType</span>(sender, <span style="color: #2b91af;">Button</span>)</li>
<li style="background: #f3f3f3;">&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">If</span> (<span style="color: #0000ff;">Not</span> (button) <span style="color: #0000ff;">Is</span> <span style="color: #0000ff;">Nothing</span>) <span style="color: #0000ff;">Then</span></li>
<li style="background: #f3f3f3;">&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">' Toggle Button.Conten between "Tap" and "Tap Again!"</span></li>
<li style="background: #f3f3f3;">&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">If</span> (<span style="color: #0000ff;">CType</span>(button.Content, <span style="color: #0000ff;">String</span>) = <span style="color: #a31515;">"Tap"</span>) <span style="color: #0000ff;">Then</span></li>
<li style="background: #f3f3f3;">&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;button.Content = <span style="color: #a31515;">"Tap Again!"</span></li>
<li style="background: #f3f3f3;">&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Else</span></li>
<li style="background: #f3f3f3;">&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;button.Content = <span style="color: #a31515;">"Tap"</span></li>
<li style="background: #f3f3f3;">&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span></li>
<li style="background: #f3f3f3;">&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span></li>
<li style="background: #f3f3f3;">&nbsp;</li>
<li><span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></li>
</ol></div>
</div>
</div>
<p>L&rsquo;exemple suivant d&eacute;montre un simple clic d&rsquo;un Button. Pour essayer cet exemple, cliquez sur le bouton <br /> <br /><object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="600" height="520" autoupdate="true"><param name="source" value="http://create.msdn.com/assets/cms/docs/QuickstartsXAP/QuickStartsPhone_Input3.xap" /><param name="minRuntimeVersion" value="2.0.31005.0" /><param name="background" value="White" /><param name="autoUpgrade" value="true" /><a href="http://go.microsoft.com/fwlink/?LinkID=149156&amp;v=2.0.31005.0" style="text-decoration: none;"> <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style: none;" /> </a> </object> </p>
<p><a name="using_manipulation_events"></a></p>
<h2>Utiliser des &eacute;v&egrave;nements de manipulation</h2>
<p>Si vous avez besoin de supporter plusieurs mouvements de doigts dans votre application Silverlight, ou des mouvements qui utilisent des donn&eacute;es de vitesse, alors vous aurez besoin d&rsquo;utiliser les &eacute;v&egrave;nements de manipulation. Vous pouvez utiliser les &eacute;v&egrave;nements de manipulation pour d&eacute;tecter des mouvements comme le Flick, glisser, pincer et le maintien. Le tableau suivant liste les classes d&rsquo;&eacute;v&egrave;nements de manipulation dans Silverlight pour Windows Phone.</p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top">
<p><a href="http://msdn.microsoft.com/en-us/library/system.windows.uielement.manipulationstarted(v=VS.95).aspx">ManipulationStarted Event</a></p>
</td>
<td valign="top">
<p>Survient quand une manipulation commence sur un contr&ocirc;le <a href="http://msdn.microsoft.com/en-us/library/system.windows.uielement(v=VS.95).aspx">UIElement</a>.</p>
</td>
</tr>
<tr>
<td valign="top">
<p><a href="http://msdn.microsoft.com/en-us/library/system.windows.uielement.manipulationdelta(v=VS.95).aspx">ManipulationDelta Event</a></p>
</td>
<td valign="top">
<p>Survient quand une position change pendant une manipulation.</p>
</td>
</tr>
<tr>
<td valign="top">
<p><a href="http://msdn.microsoft.com/en-us/library/system.windows.uielement.manipulationcompleted(v=VS.95).aspx">ManipulationCompleted Event</a></p>
</td>
<td valign="top">
<p>Se produit quand une manipulation et que l&rsquo;inertie sur un contr&ocirc;le <a href="http://msdn.microsoft.com/en-us/library/system.windows.uielement(v=VS.95).aspx">UIElement</a> sont termin&eacute;s.</p>
</td>
</tr>
<tr>
<td valign="top">
<p><a href="http://msdn.microsoft.com/en-us/library/system.windows.input.manipulationstartedeventargs(v=VS.95).aspx">ManipulationStartedEventArgs</a></p>
</td>
<td valign="top">
<p>Fournit des donn&eacute;es pour l'&eacute;v&eacute;nement <a href="http://msdn.microsoft.com/en-us/library/system.windows.uielement.manipulationstarted(v=VS.95).aspx">ManipulationStarted</a> .</p>
</td>
</tr>
<tr>
<td valign="top">
<p><a href="http://msdn.microsoft.com/en-us/library/system.windows.input.manipulationdeltaeventargs(v=VS.95).aspx">ManipulationDeltaEventArgs</a></p>
</td>
<td valign="top">
<p>Fournit des donn&eacute;es pour l'&eacute;v&eacute;nement <a href="http://msdn.microsoft.com/en-us/library/system.windows.uielement.manipulationdelta(v=VS.95).aspx">ManipulationDelta</a></p>
</td>
</tr>
<tr>
<td valign="top">
<p><a href="http://msdn.microsoft.com/en-us/library/system.windows.input.manipulationvelocities(v=VS.95).aspx">ManipulationVelocities</a></p>
</td>
<td valign="top">
<p>D&eacute;crit la vitesse &agrave; laquelle les manipulations se produisent</p>
</td>
</tr>
<tr>
<td valign="top">
<p><a href="http://msdn.microsoft.com/en-us/library/system.windows.input.manipulationcompletedeventargs(v=VS.95).aspx">ManipulationCompletedEventArgs</a></p>
</td>
<td valign="top">
<p>Fournit des donn&eacute;es pour l'&eacute;v&eacute;nement <a href="http://msdn.microsoft.com/en-us/library/system.windows.uielement.manipulationcompleted(v=VS.95).aspx">ManipulationCompleted</a> .</p>
</td>
</tr>
</tbody>
</table>
<p>Un &eacute;v&egrave;nement de mouvement dans Silverlight pour Windows Phone consiste en une s&eacute;rie d'&eacute;v&egrave;nements de manipulation. Chaque geste commence avec l'&eacute;v&eacute;nement <a href="http://msdn.microsoft.com/en-us/library/system.windows.uielement.manipulationstarted(v=VS.95).aspx">ManipulationStarted</a>, comme quand un utilisateur touche l'&eacute;cran. Ensuite, un ou plusieurs &eacute;v&egrave;nements <a href="http://msdn.microsoft.com/en-us/library/system.windows.uielement.manipulationdelta(v=VS.95).aspx">ManipulationDelta</a> sont lev&eacute;s. Par exemple, si vous touchez l'&eacute;cran et faites glisser votre doigt sur celui-ci, un certain nombre d'&eacute;v&egrave;nements <a href="http://msdn.microsoft.com/en-us/library/system.windows.uielement.manipulationdelta(v=VS.95).aspx">ManipulationDelta</a> sont lev&eacute;s. Enfin, un &eacute;v&egrave;nement <a href="http://msdn.microsoft.com/en-us/library/system.windows.uielement.manipulationcompleted(v=VS.95).aspx">ManipulationCompleted</a> est d&eacute;clench&eacute; lorsque le geste est termin&eacute;.</p>
<p>Si vous utilisez l'&eacute;mulateur Windows Phone pour tester votre code l'&eacute;v&egrave;nement de manipulation et que vous n'avez pas un moniteur &agrave; &eacute;cran tactile, vous serez limit&eacute; dans ce que vous pourrez tester. L'&eacute;mulateur ne supporte pas le multi-touch avec la souris. Vous pouvez tester les translations, comme le montre l'exemple suivant.</p>
<p>L'exemple suivant montre comment utiliser les &eacute;v&egrave;nements <a href="http://msdn.microsoft.com/en-us/library/system.windows.uielement.manipulationdelta(v=VS.95).aspx">ManipulationDelta</a> pour g&eacute;rer une op&eacute;ration de mouvement de glisse. L'exemple cr&eacute;&eacute; un <a href="http://msdn.microsoft.com/en-us/library/system.windows.shapes.rectangle(VS.95).aspx">Rectangle</a> qui peut &ecirc;tre gliss&eacute; au travers de l&rsquo;&eacute;cran.</p>
<p>D'abord, un <a href="http://msdn.microsoft.com/en-us/library/system.windows.shapes.rectangle(VS.95).aspx">Rectangle</a> nomm&eacute; <b>TestRectangle</b>&nbsp; est cr&eacute;&eacute; en XAML avec une hauteur (<a href="http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.height(v=VS.95).aspx">Height</a> ) et une largeur (<a href="http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.width(v=VS.95).aspx">Width</a> ) de 200.</p>
<p><b>XAML</b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:2c880299-9032-4dc6-9034-c93d2cd3564b" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Rectangle</span> <span style="color: #ff0000;"> Name</span><span style="color: #0000ff;">="TestRectangle"</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> Width</span><span style="color: #0000ff;">="200"</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> Height</span><span style="color: #0000ff;">="200"</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> Fill</span><span style="color: #0000ff;">="Blue" /&gt;</span></li>
</ol></div>
</div>
</div>
<p>Ensuite, un <a href="http://msdn.microsoft.com/en-us/library/system.windows.media.translatetransform(VS.95).aspx">TranslateTransform</a> nomm&eacute; <b>dragTranslation</b>&nbsp; est cr&eacute;&eacute; pour la translation du <a href="http://msdn.microsoft.com/en-us/library/system.windows.shapes.rectangle(VS.95).aspx">Rectangle</a>. Un Event Handler est ajout&eacute; au rectangle pour g&eacute;rer l'&eacute;v&eacute;nement <a href="http://msdn.microsoft.com/en-us/library/system.windows.uielement.manipulationdelta(v=VS.95).aspx">ManipulationDelta</a> et dragTranslation est ajout&eacute; &agrave; la <a href="http://msdn.microsoft.com/en-us/library/system.windows.uielement.rendertransform(v=VS.95).aspx">RenderTransform</a> du <a href="http://msdn.microsoft.com/en-us/library/system.windows.shapes.rectangle(VS.95).aspx">Rectangle</a>. Enfin, dans l&rsquo;Event Handler de <a href="http://msdn.microsoft.com/en-us/library/system.windows.uielement.manipulationdelta(v=VS.95).aspx">ManipulationDelta</a> , la position du <a href="http://msdn.microsoft.com/en-us/library/system.windows.shapes.rectangle(VS.95).aspx">Rectangle</a><span style="text-decoration: underline;"> </span>est mise &agrave; jour en utilisant le <a href="http://msdn.microsoft.com/en-us/library/system.windows.media.translatetransform(VS.95).aspx">TranslateTransform</a> sur la propri&eacute;t&eacute; <a href="http://msdn.microsoft.com/en-us/library/system.windows.input.manipulationdeltaeventargs.deltamanipulation.aspx">DeltaManipulation</a>.</p>
<p><b>C#</b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:b4566560-a8c2-42a3-b8e2-f783e7fdfc44" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">public</span> MainPage()</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InitializeComponent();</li>
<li>&nbsp;</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">// Add handler for the ManipulationDelta event</span></li>
<li>&nbsp;</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TestRectangle.ManipulationDelta += <span style="color: #0000ff;">new</span> <span style="color: #2b91af;">EventHandler</span>&lt;<span style="color: #2b91af;">ManipulationDeltaEventArgs</span>&gt;(Drag_ManipulationDelta);</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dragTranslation = <span style="color: #0000ff;">new</span> <span style="color: #2b91af;">TranslateTransform</span>();</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TestRectangle.RenderTransform = <span style="color: #0000ff;">this</span>.dragTranslation;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li style="background: #f3f3f3;">&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">void</span> Drag_ManipulationDelta(<span style="color: #0000ff;">object</span> sender, <span style="color: #2b91af;">ManipulationDeltaEventArgs</span> e)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">// Move the rectangle.</span></li>
<li style="background: #f3f3f3;">&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dragTranslation.X += e.DeltaManipulation.Translation.X;</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dragTranslation.Y += e.DeltaManipulation.Translation.Y;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
</ol></div>
</div>
</div>
<p><b>Visual Basic</b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:fa52d7ad-bbfe-4a78-a2af-c2de8dcabad5" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;">
<li>&nbsp;</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">public</span> MainPage {</li>
<li>&nbsp;</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;InitializeComponent</li>
<li>&nbsp;</li>
<li style="background: #f3f3f3;"><span style="color: #008000;">' Add handler for the ManipulationDelta event</span></li>
<li>&nbsp;</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">AddHandler</span> TestRectangle.ManipulationDelta, <span style="color: #0000ff;">AddressOf</span> <span style="color: #0000ff;">Me</span>.Drag_ManipulationDelta</li>
<li>&nbsp;</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;dragTranslation = <span style="color: #0000ff;">New</span> TranslateTransform</li>
<li>&nbsp;</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;TestRectangle.RenderTransform = <span style="color: #0000ff;">Me</span>.dragTranslation</li>
<li>&nbsp;</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></li>
<li>&nbsp;</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> Drag_ManipulationDelta(<span style="color: #0000ff;">ByVal</span> sender <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Object</span>, <span style="color: #0000ff;">ByVal</span> e <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">ManipulationDeltaEventArgs</span>)</li>
<li>&nbsp;</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">' Move the rectangle.</span></li>
<li>&nbsp;</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;dragTranslation.X = (dragTranslation.X + e.DeltaManipulation.Translation.X)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;dragTranslation.Y = (dragTranslation.Y + e.DeltaManipulation.Translation.Y)</li>
<li style="background: #f3f3f3;">&nbsp;</li>
<li><span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></li>
</ol></div>
</div>
</div>
<p>l'exemple fonctionnant dans l'&eacute;mulateur Windows Phone. Ceci n&rsquo;est pas un exemple interactif.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/2577.image_1757AD23.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/2577.image_5F00_1757AD23.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/7345.image_thumb_2F2E6E7C.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/7345.image_5F00_thumb_5F00_2F2E6E7C.png" width="319" height="576" /></a></p>
<p><a name="using_toolkit_gestures"></a></p>
<h2>Silverlight Toolkit pour Windows Phone</h2>
<p>Le <a href="http://silverlight.codeplex.com/">Silverlight Toolkit pour Windows Phone</a> est un projet open source o&ugrave; l&rsquo;&eacute;quipe Microsoft Silverlight partage de nouveaux composants et fonctionnalit&eacute;s qui ne sont pas dans le noyau de Silverlight pour Windows Phone. Le toolkit comprend un framework de mouvements qui utilise les classes GestureService et GestureListener pour d&eacute;tecter des gestes pr&eacute;cis. Ces classes peuvent consid&eacute;rablement simplifier l'utilisation des mouvements dans votre application Silverlight. <br />Pour utiliser l'API du <a href="http://silverlight.codeplex.com/">Silverlight Toolkit pour Windows Phone</a> vous aurez besoin de le t&eacute;l&eacute;charger et de l&rsquo;installer. <a href="http://silverlight.codeplex.com/releases">La page de parution du Silverlight Toolkit</a> contient des instructions pour le t&eacute;l&eacute;chargement de la version actuelle.<a name="ui_design"></a></p>
<p>&nbsp;</p>
<h2>Interface graphique et saisie tactile</h2>
<p>Comment la conception de votre interface utilisateur peut influencer avec quelle facilit&eacute; votre application est utilis&eacute;e avec la saisie tactile. <a href="http://msdn.microsoft.com/en-us/library/hh202915(VS.92).aspx">Les lignes directrices sur la conception de l&rsquo;exp&eacute;rience</a> utilisateur pour Windows Phone dispose d&rsquo;un certain nombre de Best Practices pour l&rsquo;utilisation des saisies tactiles dans vos applications. Cela vaut la peine de le lire, mais voici quelques points traitant du toucher et de la conception d&rsquo;interface graphique:</p>
<ol>
<li>Toutes les commandes simples dans votre application doivent &ecirc;tre r&eacute;alis&eacute;es avec un seul doigt</li>
<li>Les contr&ocirc;les tactiles doivent r&eacute;agir imm&eacute;diatement. M&ecirc;me un l&eacute;ger d&eacute;calage entre le moment o&ugrave; l&rsquo;utilisateur touche l&rsquo;&eacute;cran et quand le contr&ocirc;le r&eacute;pond peut &ecirc;tre perceptible et affecter l&rsquo;exp&eacute;rience utilisateur.</li>
<li>Fournit imm&eacute;diatement des retours visuels ou auditifs</li>
<li>Si une op&eacute;ration prend beaucoup de temps, envisagez de fournir des retours suppl&eacute;mentaires</li>
<li>Les composants tactiles qui sont cibl&eacute;s ne doivent pas &ecirc;tre plus petits que 9mm ou 34 pixels</li>
<li>2mm ou 8 pixels doivent &ecirc;tre disponibles entre chaque contr&ocirc;le tactile</li>
<li>Dans de rares cas, les contr&ocirc;les peuvent &ecirc;tre petits, mais vous ne devez jamais cr&eacute;er un contr&ocirc;le plus petit que 7mm ou 26 pixels.</li>
<li>Pour les contr&ocirc;les qui seront fr&eacute;quemment touch&eacute;s, envisager de rendre les contr&ocirc;les plus grands que 9 mm.</li>
<li>Les composants tactiles qui sont cibl&eacute;s peuvent &ecirc;tre plus grands que l&rsquo;&eacute;l&eacute;ment tactile, mais en aucun cas plus petit.</li>
<li>L&rsquo;&eacute;l&eacute;ment tactile ne doit pas &ecirc;tre plus petit de 60% que la cible touch&eacute;e.</li>
<li>Les contr&ocirc;les contraints verticalement sont plus faciles &agrave; toucher</li>
</ol>
<p>Voir aussi</p>
<ul>
<li><a href="http://msdn.microsoft.com/en-us/library/ff967546%28VS.92%29.aspx">Le support des Gestures pour Windows Phone</a></li>
<li><a href="http://msdn.microsoft.com/en-us/library/hh202915(VS.92).aspx">Les lignes directrices sur la conception de l&rsquo;exp&eacute;rience utilisateur pour Windows Phone</a></li>
<li><a href="http://msdn.microsoft.com/en-us/library/ff426933(VS.95).aspx">Comment g&eacute;rer les &eacute;v&egrave;nements de manipulation </a></li>
<li><a href="http://msdn.microsoft.com/en-us/library/ff607287(VS.95).aspx">Les entr&eacute;es dans Silverlight pour Windows Phone</a></li>
<li><a href="http://msdn.microsoft.com/en-us/library/ff434208.aspx">Travailler avec les saisies tactiles (Windows Phone)</a></li>
<li><a href="http://msdn.microsoft.com/en-us/library/ff827740.aspx">La d&eacute;tection des Gestures sur un &eacute;cran multi-touch (Windows Phone)</a></li>
<li><a href="http://silverlight.codeplex.com/">Le toolkit Silverlight pour Windows Phone </a></li>
</ul>]]></content:encoded>
    </item>
    <item>
      <title>Developpement Windows Phone - partie 6</title>
      <link>https://docs.microsoft.com/archive/blogs/patrick_payet/developpement-windows-phone-partie-6</link>
      <pubDate>Tue, 06 Sep 2011 13:06:00 GMT</pubDate>
      <dc:creator><![CDATA[papayet]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/patrick_payet/2011/09/06/developpement-windows-phone-partie-6/</guid>
      <description><![CDATA[Travailler avec du texte sur Windows Phone
Cet article fait partie d&rsquo;une s&eacute;rie...]]></description>
      <content:encoded><![CDATA[<h1>Travailler avec du texte sur Windows Phone</h1>
<p>Cet article fait partie d&rsquo;une s&eacute;rie d&rsquo;articles sur le d&eacute;veloppement Windows Phone. Il s&rsquo;agit d&rsquo;une traduction des articles se trouvant <a href="http://create.msdn.com/en-us/education/quickstarts" target="_blank">sur la MSDN</a>.</p>
<h2><a name="sommaire"></a>Sommaire</h2>
<p><strong>Bien d&eacute;buter et fondamentaux</strong></p>
<ul>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-1.aspx" target="_blank">Bien d&eacute;marrer (Hello World)</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-2.aspx" target="_blank">Cr&eacute;er une interface utilisateur pour Windows Phone en XAML</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-3.aspx" target="_blank">Utiliser des contr&ocirc;les</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-4.aspx" target="_blank">Types de contr&ocirc;les</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-5.aspx" target="_blank">Contr&ocirc;les Panorama et Pivot</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-6.aspx" target="_blank">Travailler avec du texte sur le Windows Phone</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-7.aspx" target="_blank">Mise en page sur l&rsquo;&eacute;cran</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-8.aspx" target="_blank">Orientations de l&rsquo;&eacute;cran</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-9.aspx" target="_blank">Saisie tactile</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-10.aspx" target="_blank">Navigation</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-11.aspx" target="_blank">Ex&eacute;cuter votre application en arri&egrave;re-plan (tombstoning)</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-12.aspx" target="_blank">Notifications Push pour le d&eacute;veloppement Windows Phone</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-13.aspx" target="_blank">Publier votre application sur le Marketplace</a></li>
</ul>
<p><strong>Visuels et m&eacute;dia</strong></p>
<ul>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-14.aspx" target="_blank">Images</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-15.aspx" target="_blank">Animations</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-16.aspx" target="_blank">Vid&eacute;o et Audio</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-17.aspx" target="_blank">Graphiques</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-18.aspx" target="_blank">Pinceaux</a></li>
</ul>
<p><strong>Travailler avec les donn&eacute;es</strong></p>
<ul>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-19.aspx" target="_blank">Obtenir des donn&eacute;es dans vos applications Windows Phone</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-20.aspx" target="_blank">Data binding</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-21.aspx" target="_blank">Isolated storage</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-22.aspx" target="_blank">Acc&eacute;der &agrave; un service Web REST</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-23.aspx" target="_blank">Consommer des donn&eacute;es Windows Azure</a></li>
</ul>
<p><strong>Sondes et autres fonctionnalit&eacute;s sp&eacute;cifiques au t&eacute;l&eacute;phone</strong></p>
<ul>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-24.aspx" target="_blank">Lanceurs et choosers</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-25.aspx" target="_blank">D&eacute;tecter des mouvements (acc&eacute;l&eacute;rom&egrave;tres)</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-26.aspx" target="_blank">D&eacute;velopper avec le GPS Windows Phone (Services de localisation)</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-27.aspx" target="_blank">D&eacute;velopper avec l&rsquo;appareil photo du Windows Phone</a></li>
</ul>
<hr />
<h1>Travailler avec du texte sur Windows Phone</h1>
<p>Silverlight pour Windows Phone fournit plusieurs contr&ocirc;les permettant le rendu de texte, avec un ensemble de propri&eacute;t&eacute;s pour le formatage du texte. Les contr&ocirc;les qui sont &agrave; base de texte&nbsp; disponibles dans Silverlight sont les <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.textblock(VS.95).aspx">TextBlock</a>, les <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.textbox(VS.95).aspx">TextBox</a><span style="text-decoration: underline;"> </span>et <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.passwordbox(VS.95).aspx">PasswordBox</a>. Ce tutoriel vous montre comment vous pouvez utiliser ces contr&ocirc;les pour afficher et de saisir du texte.</p>
<p>Ce tutoriel contient les sections suivantes:</p>
<ul>
<li><a href="#TextBlock">TextBlock</a></li>
<li><a href="#TextBox">TextBox</a></li>
<li><a href="#SIP Layout in a TextBox">Disposition SIP dans un TextBox</a></li>
<li><a href="#PasswordBox">PasswordBox</a></li>
</ul>
<p><a name="TextBlock"></a></p>
<h2>Textblock</h2>
<p>Le <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.textblock(VS.95).aspx">TextBlock</a> est le principal contr&ocirc;le pour l'affichage de texte en lecture seule dans les applications Windows Phone. Vous pouvez afficher du texte dans un contr&ocirc;le <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.textblock(VS.95).aspx">TextBlock</a> en utilisant sa propri&eacute;t&eacute; <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.textblock.text(VS.95).aspx">Text</a> .</p>
<p>Le XAML suivant montre comment d&eacute;finir un contr&ocirc;le <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.textblock(VS.95).aspx">TextBlock</a> et d&eacute;finir sa propri&eacute;t&eacute; <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.textblock.text(VS.95).aspx">Text</a> en une chaine de caract&egrave;res.</p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:9584622b-f33d-42f8-9a16-c3c096a6bfa5" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">TextBlock</span><span style="color: #ff0000;"> Text</span><span style="color: #0000ff;">="Hello, world!" /&gt;</span></li>
</ol></div>
</div>
</div>
<p>L'illustration suivante affiche le r&eacute;sultat du XAML pr&eacute;c&eacute;dent.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/4137.image_15EBE7A4.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/4137.image_5F00_15EBE7A4.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/7750.image_thumb_2AADBA57.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/7750.image_5F00_thumb_5F00_2AADBA57.png" width="285" height="515" /></a></p>
<p>Vous pouvez &eacute;galement afficher une s&eacute;rie de chaines de caract&egrave;res dans un <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.textblock(VS.95).aspx">TextBlock</a>, o&ugrave; chaque chaine a une forme diff&eacute;rente. Vous pouvez faire cela en utilisant l'&eacute;l&eacute;ment <a href="http://msdn.microsoft.com/en-us/library/system.windows.documents.run(VS.95).aspx">Run</a> pour afficher chaque chaine avec sa mise en forme et en s&eacute;parant chaque &eacute;l&eacute;ment <a href="http://msdn.microsoft.com/en-us/library/system.windows.documents.run(VS.95).aspx">Run</a> avec un &eacute;l&eacute;ment <a href="http://msdn.microsoft.com/en-us/library/system.windows.documents.linebreak(VS.95).aspx">LineBreak</a> .</p>
<p>Le XAML suivant montre comment d&eacute;finir plusieurs chaines de texte format&eacute;es diff&eacute;remment dans un <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.textblock(VS.95).aspx">TextBlock</a> en utilisant des objets <a href="http://msdn.microsoft.com/en-us/library/system.windows.documents.run(VS.95).aspx">Run</a> s&eacute;par&eacute;s par un <a href="http://msdn.microsoft.com/en-us/library/system.windows.documents.linebreak(VS.95).aspx">LineBreak</a>.</p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:0ca23d4e-f432-409c-9d57-64a53cacdf52" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Grid</span><span style="color: #0000ff;">&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">TextBlock</span><span style="color: #ff0000;"> FontFamily</span><span style="color: #0000ff;">="Arial"</span><span style="color: #ff0000;"> Width</span><span style="color: #0000ff;">="400" &gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">LineBreak</span><span style="color: #0000ff;">/&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Run</span><span style="color: #ff0000;"> Foreground</span><span style="color: #0000ff;">="Maroon"</span><span style="color: #ff0000;"> FontFamily</span><span style="color: #0000ff;">="Courier New"</span><span style="color: #ff0000;"> FontSize</span><span style="color: #0000ff;">="40"&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;">Courier New 24</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">Run</span><span style="color: #0000ff;">&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">LineBreak</span><span style="color: #0000ff;">/&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Run</span><span style="color: #ff0000;"> Foreground</span><span style="color: #0000ff;">="Teal"</span><span style="color: #ff0000;"> FontFamily</span><span style="color: #0000ff;">="Times New Roman"</span><span style="color: #ff0000;"> FontSize</span><span style="color: #0000ff;">="30"</span><span style="color: #ff0000;"> FontStyle</span><span style="color: #0000ff;">="Italic"&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;">Times New Roman Italic 18</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">Run</span><span style="color: #0000ff;">&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">LineBreak</span><span style="color: #0000ff;">/&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">Run</span><span style="color: #ff0000;"> Foreground</span><span style="color: #0000ff;">="SteelBlue"</span><span style="color: #ff0000;"> FontFamily</span><span style="color: #0000ff;">="Verdana"</span><span style="color: #ff0000;"> FontSize</span><span style="color: #0000ff;">="20"</span><span style="color: #ff0000;"> FontWeight</span><span style="color: #0000ff;">="Bold"&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;">Verdana Bold 14</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">Run</span><span style="color: #0000ff;">&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">TextBlock</span><span style="color: #0000ff;">&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">Grid</span><span style="color: #0000ff;">&gt;</span></li>
</ol></div>
</div>
</div>
<p>L'illustration suivante montre le r&eacute;sultat du XAML pr&eacute;c&eacute;dent.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/3034.image_15035BED.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/3034.image_5F00_15035BED.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/7317.image_thumb_581EB44D.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/7317.image_5F00_thumb_5F00_581EB44D.png" width="333" height="603" /></a></p>
<p>Pour plus d'informations sur le <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.textblock(VS.95).aspx">TextBlock</a>, consultez la section <a href="http://msdn.microsoft.com/en-us/library/cc189010(VS.95).aspx">Text et Fonts </a>et <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.textblock(VS.95).aspx">TextBlock</a>.<a name="TextBox"></a></p>
<p><a name="TextBox"></a></p>
<h2><br />Textbox</h2>
<p>Vous pouvez utiliser un contr&ocirc;le <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.textbox(VS.95).aspx">TextBox</a> pour entrer et modifier du texte avec un seul format et multi-ligne. Vous pouvez utiliser la propri&eacute;t&eacute; <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.textbox.text(VS.95).aspx">TextBox.Text</a><span style="text-decoration: underline;"> </span>pour d&eacute;finir le texte dans un <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.textbox(VS.95).aspx">TextBox</a>. Dans l'exemple suivant, il y a trois zones de texte. Lorsque vous entrez du texte dans le premier <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.textbox(VS.95).aspx">TextBox</a>, le m&ecirc;me texte est affich&eacute; dans la&nbsp; seconde <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.textbox(VS.95).aspx">TextBox</a>. Ceci est r&eacute;alis&eacute; en utilisant l'&eacute;v&egrave;nement <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.textbox.textchanged(VS.95).aspx">TextChanged</a>. Le troisi&egrave;me <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.textbox(VS.95).aspx">TextBox</a><span style="text-decoration: underline;"> </span>affiche du texte en filigrane. Pour mettre en &oelig;uvre du texte en filigrane, vous pouvez utiliser les propri&eacute;t&eacute;s de polices diff&eacute;rentes, telles que <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.control.foreground(VS.95).aspx">Foreground</a> et <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.control.fontsize(VS.95).aspx">FontSize</a>, et des &eacute;v&egrave;nements, tels que <a href="http://msdn.microsoft.com/en-us/library/system.windows.uielement.gotfocus(VS.95).aspx">GotFocus</a><span style="text-decoration: underline;"> </span>et <a href="http://msdn.microsoft.com/en-us/library/system.windows.uielement.lostfocus(VS.95).aspx">LostFocus</a>.</p>
<p>Pour essayer cet exemple, cliquez et tapez dans la premi&egrave;re et la troisi&egrave;me TextBox.</p>
<p><strong>Remarque</strong></p>
<p>Les exemples de ce tutoriel utilisent Silverlight ex&eacute;cut&eacute; dans le navigateur pour simuler le comportement de Silverlight pour Windows Phone. Le comportement r&eacute;el peut &ecirc;tre l&eacute;g&egrave;rement diff&eacute;rent dans l'&eacute;mulateur Windows Phone ou sur un appareil Windows Mobile.</p>
<p><b><object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="400" height="530" autoupdate="true"><param name="source" value="http://create.msdn.com/assets/cms/docs/QuickstartsXAP/TextBoxDesktop.xap" /><param name="minRuntimeVersion" value="2.0.31005.0" /><param name="background" value="White" /><param name="autoUpgrade" value="true" /><a href="http://go.microsoft.com/fwlink/?LinkID=149156&amp;v=2.0.31005.0" style="text-decoration: none;"> <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style: none;" /> </a> </object></b></p>
<p><b>XAML</b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:234dcdbc-1a28-4c90-b2d4-3fd01add6629" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 500px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;">
<li><span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">StackPanel</span><span style="color: #ff0000;"> Background</span><span style="color: #0000ff;">="Transparent"&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">TextBlock</span><span style="color: #ff0000;"> Text</span><span style="color: #0000ff;">="Type Text Here" /&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">TextBox</span><span style="color: #ff0000;"> x</span><span style="color: #0000ff;">:</span><span style="color: #ff0000;">Name</span><span style="color: #0000ff;">="ReadWriteTB"</span><span style="color: #ff0000;"> TextChanged</span><span style="color: #0000ff;">="</span><span style="color: #ff0000;">ReadWriteTB_TextChanged</span><span style="color: #0000ff;">"</span><span style="color: #ff0000;"> IsReadOnly</span><span style="color: #0000ff;">="False" /&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">TextBlock</span><span style="color: #ff0000;"> Text</span><span style="color: #0000ff;">="Read Only TextBox" /&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">TextBox</span><span style="color: #ff0000;"> x</span><span style="color: #0000ff;">:</span><span style="color: #ff0000;">Name</span><span style="color: #0000ff;">="ReadOnlyTB"</span><span style="color: #ff0000;"> IsReadOnly</span><span style="color: #0000ff;">="True" /&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">TextBlock</span><span style="color: #ff0000;"> Text</span><span style="color: #0000ff;">="Search Type TextBox" /&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">TextBlock</span><span style="color: #ff0000;"> FontSize</span><span style="color: #0000ff;">="17"</span><span style="color: #ff0000;"> TextWrapping</span><span style="color: #0000ff;">="Wrap"&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;">When you click inside the text box the watermark text is removed and the</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;">cursor appears ready for input.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">TextBlock</span><span style="color: #0000ff;">&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">TextBox</span><span style="color: #ff0000;"> x</span><span style="color: #0000ff;">:</span><span style="color: #ff0000;">Name</span><span style="color: #0000ff;">="WatermarkTB"</span><span style="color: #ff0000;"> Text</span><span style="color: #0000ff;">="Search"</span><span style="color: #ff0000;"> Foreground</span><span style="color: #0000ff;">="Gray"</span><span style="color: #ff0000;"> GotFocus</span><span style="color: #0000ff;">="</span><span style="color: #ff0000;">WatermarkTB_GotFocus</span><span style="color: #0000ff;">"</span><span style="color: #ff0000;"> LostFocus</span><span style="color: #0000ff;">="</span><span style="color: #ff0000;">WatermarkTB_LostFocus</span><span style="color: #0000ff;">" /&gt;</span></li>
<li style="background: #f3f3f3;"><span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">StackPanel</span><span style="color: #0000ff;">&gt;</span></li>
</ol></div>
</div>
</div>
<p><b>C#</b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:3bfebdd1-6a5f-4cd9-9d30-0daf439d3c8c" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;">
<li><span style="color: #008000;">//The following method displays the text entered in ReadWriteTB in ReadOnlyTB.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">private</span> <span style="color: #0000ff;">void</span> ReadWriteTB_TextChanged(<span style="color: #0000ff;">object</span> sender, <span style="color: #2b91af;">RoutedEventArgs</span> e)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReadOnlyTB.Text = ReadWriteTB.Text;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//The foreground color of the text in WatermarkTB is set to Magenta when WatermarkTB</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//gets focus.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">private</span> <span style="color: #0000ff;">void</span> WatermarkTB _GotFocus(<span style="color: #0000ff;">object</span> sender, <span style="color: #2b91af;">RoutedEventArgs</span> e)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">if</span> (WatermarkTB.Text == <span style="color: #a31515;">"Search"</span>)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WatermarkTB.Text = <span style="color: #a31515;">""</span>;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #2b91af;">SolidColorBrush</span> Brush1 = <span style="color: #0000ff;">new</span> <span style="color: #2b91af;">SolidColorBrush</span>();</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Brush1.Color = <span style="color: #2b91af;">Colors</span>.Magenta;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WatermarkTB.Foreground = Brush1;</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li style="background: #f3f3f3;">&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//The foreground color of the text in WatermarkTB is set to Blue when WatermarkTB</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//loses focus. Also, if SearchTB loses focus and no text is entered, the</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">//text "Search" is displayed.</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">private</span> <span style="color: #0000ff;">void</span> WatermarkTB _LostFocus(<span style="color: #0000ff;">object</span> sender, <span style="color: #2b91af;">RoutedEventArgs</span> e)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">if</span> (WatermarkTB .Text == <span style="color: #2b91af;">String</span>.Empty)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WatermarkTB.Text = <span style="color: #a31515;">"Search"</span>;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #2b91af;">SolidColorBrush</span> Brush2 = <span style="color: #0000ff;">new</span> <span style="color: #2b91af;">SolidColorBrush</span>();</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Brush2.Color = <span style="color: #2b91af;">Colors</span>.Blue;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WatermarkTB.Foreground = Brush2;</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</li>
</ol></div>
</div>
</div>
<p><b>Visual Basic</b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:1a2fb1bd-511c-4b84-a5b9-ba6295ced64b" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2.5em; padding: 0 0 0 5px;">
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'The foreground color of the text in WatermarkTB is set to Magenta when WatermarkTB</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'gets focus.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Private</span> WatermarkTB <span style="color: #0000ff;">As</span> System.<span style="color: #2b91af;">Void</span> GotFocus(object, sender, RoutedEventArgs, e)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">If</span> (WatermarkTB.Text = "Search") <span style="color: #0000ff;">Then</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WatermarkTB.Text = ""&nbsp;&nbsp;&nbsp;</li>
<li style="background: #f3f3f3;">&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Dim</span> Brush1 <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">SolidColorBrush</span> = <span style="color: #0000ff;">New</span> <span style="color: #2b91af;">SolidColorBrush</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Brush1.Color = Colors.Magenta</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WatermarkTB.Foreground = Brush1</li>
<li style="background: #f3f3f3;">&nbsp;</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'The foreground color of the text in WatermarkTB is set to Blue when WatermarkTB</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'loses focus. Also, if SearchTB loses focus and no text is entered, the</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'text "Search" is displayed.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Private</span> WatermarkTB <span style="color: #0000ff;">As</span> System.<span style="color: #2b91af;">Void</span></li>
<li style="background: #f3f3f3;">_&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LostFocus(object, sender, RoutedEventArgs, e)</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">If</span> (WatermarkTB.Text = <span style="color: #0000ff;">String</span>.Empty) <span style="color: #0000ff;">Then</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WatermarkTB.Text = "Search"</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Dim</span> Brush2 <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">SolidColorBrush</span> = <span style="color: #0000ff;">New</span> <span style="color: #2b91af;">SolidColorBrush</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;Brush2.Color = Colors.Blue</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;WatermarkTB.Foreground = Brush2</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">If</span></li>
<li>&nbsp;</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #008000;">'The following method displays the text entered in ReadWriteTB in ReadOnlyTB.</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> ReadWriteTB_TextChanged(<span style="color: #0000ff;">ByVal</span> sender <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Object</span>, <span style="color: #0000ff;">ByVal</span> e <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">RoutedEventArgs</span>)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ReadOnlyTB.Text = ReadWriteTB.Text</li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></li>
</ol></div>
</div>
</div>
<h2>&nbsp;</h2>
<p><a name="SIP Layout in a TextBox"></a></p>
<h2>La disposition sip dans un textbox</h2>
<p>Le principal moyen par lequel vous entrez du texte dans une application Windows Phone est d'utiliser un petit clavier &agrave; l'&eacute;cran, lequel est appel&eacute; &laquo; panneau de saisie logiciel &raquo; ou SIP. Le clavier SIP s&rsquo;ouvre en glissant automatiquement du bas de l'&eacute;cran quand un contr&ocirc;le modifiable tel que le TextBox devient actif. Lorsqu'un utilisateur tape en dehors du contr&ocirc;le d'&eacute;dition, fait d&eacute;filer une liste, ou appuie sur le bouton Back, il se ferme en glissant vers le bas de l'&eacute;cran.</p>
<p>Si un t&eacute;l&eacute;phone est dot&eacute; d'un clavier physique (ce qui est une option du fabricant du t&eacute;l&eacute;phone) et qu&rsquo;il est actif, le clavier SIP se fermera automatiquement. Vous pouvez sp&eacute;cifier la configuration du clavier SIP, ce qui vous permet d'acc&eacute;der facilement aux caract&egrave;res d'entr&eacute;es pr&eacute;vus en fonction du contexte de l&rsquo;application. Par exemple, lorsque vous utilisez le clavier SIP pour entrer un code postal, vous ne voulez voir que les touches num&eacute;riques. Vous pouvez sp&eacute;cifier la configuration du clavier pour cette saisie en utilisant la propri&eacute;t&eacute; <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.textbox.inputscope(VS.95).aspx">InputScope</a>.</p>
<p>Le tableau suivant liste plusieurs dispositions SIP couramment utilis&eacute;es et les <a href="http://msdn.microsoft.com/en-us/library/system.windows.input.inputscopenamevalue(VS.95).aspx">InputScopeNameValue</a> associ&eacute;s que vous pouvez sp&eacute;cifier en XAML ou dans le code</p>
<p>&nbsp;</p>
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td>
<p><strong>input scope</strong></p>
</td>
<td>
<p><strong>Description</strong></p>
</td>
<td>
<p><strong>illustration</strong></p>
</td>
</tr>
<tr>
<td valign="top">
<p align="left">Default</p>
</td>
<td valign="top">
<p>Ceci est la configuration par d&eacute;faut quand aucun champ d&rsquo;entr&eacute;e n&rsquo;est sp&eacute;cifi&eacute;. Cela affiche la disposition standard QWERTY et automatise la premi&egrave;re lettre en majuscule d'une phrase.</p>
</td>
<td valign="top"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/8865.image_73939083.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/8865.image_5F00_73939083.png"><img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/4657.image_thumb_710A5EC5.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/4657.image_5F00_thumb_5F00_710A5EC5.png" width="225" height="160" /></a></td>
</tr>
<tr>
<td valign="top">
<p>Text</p>
</td>
<td valign="top">
<p>L'utilisateur aura la plupart du temps du texte en type standard. Cette disposition offre des suggestions de texte, correction automatique, auto-apostrophe, l'auto-accentuation, et l'auto-capitalisation. Cette disposition a &eacute;galement acc&egrave;s &agrave; des lettres, chiffres, symboles, et &eacute;motic&ocirc;nes bas&eacute;s sur de l&rsquo;ASCII. Vous pouvez utiliser ce mod&egrave;le dans des domaines tels que la messagerie &eacute;lectronique et des documents.</p>
</td>
<td valign="top"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/2063.image_75A0697F.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/2063.image_5F00_75A0697F.png"><img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/1007.image_thumb_250ED84C.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/1007.image_5F00_thumb_5F00_250ED84C.png" width="226" height="191" /></a></td>
</tr>
<tr>
<td valign="top">
<p>Chat</p>
</td>
<td valign="top">
<p>Utilisez ce mod&egrave;le lorsque l'utilisateur utilise cette technique pour taper des mots standards, de l'argot et des abr&eacute;viations. Cette disposition offre des suggestions de texte tout en &eacute;crivant et en tapant sur un mot, la correction automatique, l&rsquo;auto-apostrophe, l'auto-accentuation, et l'auto-majuscule de la premi&egrave;re lettre d'une phrase.</p>
<p>Ce mod&egrave;le a &eacute;galement acc&egrave;s &agrave; des lettres, chiffres, symboles et &agrave; des &eacute;motic&ocirc;nes. Vous pouvez utiliser ce mod&egrave;le dans des domaines tels que les SMS, la messagerie instantan&eacute;e, les applications Twitter. Utilisez cette disposition lorsque l'utilisateur utilise essentiellement des mots de type standard, de l'argot et des abr&eacute;viations.</p>
</td>
<td valign="top"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/4621.image_103CDFCC.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/4621.image_5F00_103CDFCC.png"><img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/8816.image_thumb_3FAB4E98.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/8816.image_5F00_thumb_5F00_3FAB4E98.png" width="226" height="189" /></a></td>
</tr>
<tr>
<td valign="top">
<p>URL</p>
</td>
<td valign="top">
<p>Utilisez ce mod&egrave;le lorsque l'utilisateur doit taper une URL. Ce mod&egrave;le d&eacute;sactive toutes les fonctions de correction automatique et offre une mise en page Web avec des touches &laquo; .com &raquo; et&nbsp; &laquo; Go &raquo;.</p>
</td>
<td valign="top"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/1050.image_23BA19A0.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/1050.image_5F00_23BA19A0.png"><img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/5758.image_thumb_07C8E4A8.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/5758.image_5F00_thumb_5F00_07C8E4A8.png" width="225" height="161" /></a></td>
</tr>
<tr>
<td valign="top">
<p>TelephoneNumber</p>
</td>
<td valign="top">
<p>Utilisez cette configuration &agrave; 12 touches pour les num&eacute;ros de t&eacute;l&eacute;phone</p>
</td>
<td valign="top"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/0068.image_301816FC.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/0068.image_5F00_301816FC.png"><img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/0243.image_thumb_428067B1.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/0243.image_5F00_thumb_5F00_428067B1.png" width="222" height="161" /></a></td>
</tr>
<tr>
<td valign="top">
<p>EmailSmtpAddress</p>
</td>
<td valign="top">
<p>Utilisez cette configuration pour les adresses email. Cette disposition inclut les touches @ et com., et un acc&egrave;s facile &agrave; la disposition le num&eacute;ro de t&eacute;l&eacute;phone.</p>
</td>
<td valign="top"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/5822.image_725B0972.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/5822.image_5F00_725B0972.png"><img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/3833.image_thumb_04C35A28.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/3833.image_5F00_thumb_5F00_04C35A28.png" width="225" height="160" /></a></td>
</tr>
<tr>
<td valign="top">
<p>CurrencyAmount</p>
</td>
<td valign="top">
<p>Utilisez cette configuration pour l'entr&eacute;e de devises.</p>
</td>
<td valign="top"><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/6064.image_265F82F9.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/6064.image_5F00_265F82F9.png"><img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/7041.image_thumb_58E2E06B.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/7041.image_5F00_thumb_5F00_58E2E06B.png" width="226" height="160" /></a></td>
</tr>
</tbody>
</table>
<p>ll existe plus de 60 champs d'entr&eacute;es diff&eacute;rentes. Pour une liste compl&egrave;te des valeurs InputScope prises en charge dans Windows Mobile 7, consultez la rubrique <a href="http://msdn.microsoft.com/en-us/library/system.windows.input.inputscopenamevalue(VS.95).aspx">InputScopeNameValue</a>.</p>
<p>L'exemple suivant montre comment vous pouvez d&eacute;finir le champ d'entr&eacute;e pour un contr&ocirc;le <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.textbox(VS.95).aspx">TextBox</a> en utilisant le XAML et le C#.</p>
<p><b>XAML</b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:a631be29-5926-4728-a0f0-15c6ff3b907b" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">TextBox</span><span style="color: #ff0000;"> Text</span><span style="color: #0000ff;">="HelloWorld"&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">TextBox.InputScope</span><span style="color: #0000ff;">&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">InputScope</span><span style="color: #0000ff;">&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">InputScopeName</span><span style="color: #ff0000;"> NameValue</span><span style="color: #0000ff;">="Chat" /&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">InputScope</span><span style="color: #0000ff;">&gt;</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">TextBox.InputScope</span><span style="color: #0000ff;">&gt;</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;/</span><span style="color: #a31515;">TextBox</span><span style="color: #0000ff;">&gt;</span></li>
</ol></div>
</div>
</div>
<p><b>C#</b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:8d0d3363-20aa-4cf9-a9ca-b79b0723d1ad" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;">
<li>&nbsp;</li>
<li style="background: #f3f3f3;"><span style="color: #2b91af;">InputScope</span> IPChat = <span style="color: #0000ff;">new</span> <span style="color: #2b91af;">InputScope</span>();</li>
<li><span style="color: #2b91af;">InputScopeName</span> IPNChat = <span style="color: #0000ff;">new</span> <span style="color: #2b91af;">InputScopeName</span>();</li>
<li style="background: #f3f3f3;">IPNChat .NameValue= <span style="color: #2b91af;">InputScopeNameValue</span>.Chat;</li>
<li>IPChat.Names.Add(IPNChat);</li>
<li style="background: #f3f3f3;"><span style="color: #ff0000;">TBChatWindow</span>.InputScope = IPChat;</li>
</ol></div>
</div>
</div>
<p><b>Visual Basic</b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:540e466d-6e1d-4fa2-8126-ecb95bc5722b" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">Dim</span> IPChat <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">InputScope</span> = <span style="color: #0000ff;">New</span> <span style="color: #2b91af;">InputScope</span></li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">Dim</span> IPNChat <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">InputScopeName</span> = <span style="color: #0000ff;">New</span> <span style="color: #2b91af;">InputScopeName</span></li>
<li>IPNChat.NameValue = InputScopeNameValue.Chat</li>
<li style="background: #f3f3f3;">IPChat.Names.Add(IPNChat)</li>
<li>TBChatWindow.InputScope = IPChat</li>
</ol></div>
</div>
</div>
<h2>&nbsp;</h2>
<p><a name="PasswordBox"></a></p>
<h2>Passwordbox</h2>
<p>Vous pouvez utiliser le contr&ocirc;le <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.passwordbox(VS.95).aspx">PasswordBox</a> pour entrer des mots de passe. L'utilisateur ne peut pas voir le texte saisi, uniquement les caract&egrave;res qui repr&eacute;sentent le mot de passe sont affich&eacute;s. Vous pouvez utiliser la propri&eacute;t&eacute; <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.passwordbox.password(VS.95).aspx">Password</a> pour obtenir ou d&eacute;finir un mot de passe et utiliser la propri&eacute;t&eacute;&nbsp; <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.passwordbox.passwordchar(VS.95).aspx">PasswordChar</a> pour pr&eacute;ciser le caract&egrave;re du password.</p>
<p>Pour plus d'informations sur le contr&ocirc;le <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.passwordbox(VS.95).aspx">PasswordBox</a> voir la rubrique <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.passwordbox(VS.95).aspx">PasswordBox</a> .</p>
<p>&nbsp;</p>
<h3>Voir aussi</h3>
<ul>
<li><a href="http://msdn.microsoft.com/en-us/library/cc189010(VS.95).aspx">Text et Fonts</a></li>
</ul>
<p><a name="whats_next"></a></p>
<h3>Et apr&egrave;s</h3>
<p>Maintenant que vous &ecirc;tes familier avec les composants d'interface utilisateur de base de contr&ocirc;les et de texte, il est temps de les positionner o&ugrave; vous voulez dans votre application: <a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-7.aspx">Tutoriel sur la mise en page.</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Developpement Windows Phone - partie 3</title>
      <link>https://docs.microsoft.com/archive/blogs/patrick_payet/developpement-windows-phone-partie-3</link>
      <pubDate>Tue, 06 Sep 2011 13:03:00 GMT</pubDate>
      <dc:creator><![CDATA[papayet]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/patrick_payet/2011/09/06/developpement-windows-phone-partie-3/</guid>
      <description><![CDATA[Utiliser des contr&ocirc;les
Cet article fait partie d&rsquo;une s&eacute;rie d&rsquo;articles sur...]]></description>
      <content:encoded><![CDATA[<h1>Utiliser des contr&ocirc;les</h1>
<p>Cet article fait partie d&rsquo;une s&eacute;rie d&rsquo;articles sur le d&eacute;veloppement Windows Phone. Il s&rsquo;agit d&rsquo;une traduction des articles se trouvant <a href="http://create.msdn.com/en-us/education/quickstarts" target="_blank">sur la MSDN</a>.</p>
<h2><a name="sommaire"></a>Sommaire</h2>
<p><strong>Bien d&eacute;buter et fondamentaux</strong></p>
<ul>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-1.aspx" target="_blank">Bien d&eacute;marrer (Hello World)</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-2.aspx" target="_blank">Cr&eacute;er une interface utilisateur pour Windows Phone en XAML</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-3.aspx" target="_blank">Utiliser des contr&ocirc;les</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-4.aspx" target="_blank">Types de contr&ocirc;les</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-5.aspx" target="_blank">Contr&ocirc;les Panorama et Pivot</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-6.aspx" target="_blank">Travailler avec du texte sur le Windows Phone</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-7.aspx" target="_blank">Mise en page sur l&rsquo;&eacute;cran</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-8.aspx" target="_blank">Orientations de l&rsquo;&eacute;cran</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-9.aspx" target="_blank">Saisie tactile</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-10.aspx" target="_blank">Navigation</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-11.aspx" target="_blank">Ex&eacute;cuter votre application en arri&egrave;re-plan (tombstoning)</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-12.aspx" target="_blank">Notifications Push pour le d&eacute;veloppement Windows Phone</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-13.aspx" target="_blank">Publier votre application sur le Marketplace</a></li>
</ul>
<p><strong>Visuels et m&eacute;dia</strong></p>
<ul>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-14.aspx" target="_blank">Images</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-15.aspx" target="_blank">Animations</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-16.aspx" target="_blank">Vid&eacute;o et Audio</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-17.aspx" target="_blank">Graphiques</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-18.aspx" target="_blank">Pinceaux</a></li>
</ul>
<p><strong>Travailler avec les donn&eacute;es</strong></p>
<ul>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-19.aspx" target="_blank">Obtenir des donn&eacute;es dans vos applications Windows Phone</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-20.aspx" target="_blank">Data binding</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-21.aspx" target="_blank">Isolated storage</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-22.aspx" target="_blank">Acc&eacute;der &agrave; un service Web REST</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-23.aspx" target="_blank">Consommer des donn&eacute;es Windows Azure</a></li>
</ul>
<p><strong>Sondes et autres fonctionnalit&eacute;s sp&eacute;cifiques au t&eacute;l&eacute;phone</strong></p>
<ul>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-24.aspx" target="_blank">Lanceurs et choosers</a></li>
<li><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-25.aspx" target="_blank">D&eacute;tecter des mouvements (acc&eacute;l&eacute;rom&egrave;tres)</a></li>
<li><a href="http://blogs.msdn.com/b/lgmorand/archive/2011/09/06/developpement-windows-phone-partie-26.aspx" target="_blank">D&eacute;velopper avec le GPS Windows Phone (Services de localisation)</a></li>
<li><a href="http://blogs.msdn.com/b/patrick_payet/archive/2011/09/06/developpement-windows-phone-partie-27.aspx" target="_blank">D&eacute;velopper avec l&rsquo;appareil photo du Windows Phone</a></li>
</ul>
<hr />
<h1>Utiliser des contr&ocirc;les</h1>
<p>Vous cr&eacute;ez une interface utilisateur (UI) pour des applications Silverlight pour Windows Phone 7 en utilisant des contr&ocirc;les tels que des boutons, des zones de texte et des listes d&eacute;roulantes. Les contr&ocirc;les Windows Phone sont con&ccedil;us pour partager de nombreuses fonctionnalit&eacute;s. G&eacute;n&eacute;ralement, vous suivez le sch&eacute;ma suivant quand vous travaillez avec des contr&ocirc;les :</p>
<ul>
<li>Vous ajoutez un contr&ocirc;le &agrave; l&rsquo;interface graphique de votre application</li>
<li>Vous d&eacute;finissez les propri&eacute;t&eacute;s sur le contr&ocirc;le, telles que la largeur, la hauteur, ou la couleur de fond.</li>
<li>Vous connectez le code &agrave; votre contr&ocirc;le afin qu&rsquo;il fasse quelque chose.</li>
</ul>
<p>Ce tutoriel d&eacute;crit le sch&eacute;ma d&rsquo;utilisation des contr&ocirc;les et contient les sections suivantes:</p>
<ul>
<li><a href="#ControlExample">Exemple de Control</a></li>
<li><a href="#AddingControl">Ajouter un Control</a></li>
<li><a href="#SettingTheName">D&eacute;finir le nom d&rsquo;un Control</a></li>
<li><span style="text-decoration: underline;"><a href="#SettingControlProperties">D&eacute;finir les propri&eacute;t&eacute;s d&rsquo;un Control</a> </span></li>
<li><a href="#CreatingEventHandler">Cr&eacute;er un Event Handler</a></li>
<li><a href="#whats_next">Et apr&egrave;s ?</a></li>
</ul>
<h2><a name="ControlExample"></a>Exemple de Control</h2>
<p>L&rsquo;exemple suivant montre un contr&ocirc;le <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.textbox%28VS.95%29.aspx">TextBox</a> et un Event Handler associ&eacute; &agrave; son &eacute;v&egrave;nement <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.textbox.textchanged%28VS.95%29.aspx">TextChanged</a>. Pour essayer cet exemple, tapez du texte dans le <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.textbox%28VS.95%29.aspx">TextBox</a> et un message apparaitra en dessous de la <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.textbox%28VS.95%29.aspx">TextBox</a> :<a name="AddingControl"></a></p>
<p>&nbsp; <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="400" height="550" autoupdate="true"><param name="source" value="http://create.msdn.com/assets/cms/docs/QuickstartsXAP/UsingControls.xap" /><param name="minRuntimeVersion" value="2.0.31005.0" /><param name="background" value="White" /><param name="autoUpgrade" value="true" /><a href="http://go.microsoft.com/fwlink/?LinkID=149156&amp;v=2.0.31005.0" style="text-decoration: none;"> <img src="http://go.microsoft.com/fwlink/?LinkId=161376" alt="Get Microsoft Silverlight" style="border-style: none;" /> </a> </object></p>
<h2>Ajouter un Control</h2>
<p>Vous pouvez ajouter un contr&ocirc;le &agrave; une application Windows Phone de plusieurs mani&egrave;res:</p>
<ul>
<li>Ajouter un contr&ocirc;le &agrave; partir de la ToolBox de Visual Studio.</li>
<li>Ajouter un contr&ocirc;le dans la vue XAML.</li>
<li>
<div align="left">Ajouter le contr&ocirc;le dans le code.</div>
</li>
</ul>
<p>L&rsquo;illustration suivante montre Visual Studio utilis&eacute; pour cr&eacute;er des applications Silverlight pour Windows Phone. Dans Visual Studio, quand vous ajoutez et manipulez des contr&ocirc;les dans votre application, vous pouvez utiliser plusieurs fonctionnalit&eacute;s de Visual Studio, incluant la Toolbox, Design View, la vue Xaml, et la fen&ecirc;tre de propri&eacute;t&eacute;s. Pour plus d&rsquo;informations sur la vue de conception (Design View) de Visual Studio, consultez la section <span style="text-decoration: underline;"><a href="http://msdn.microsoft.com/en-us/library/ff356887(VS.95).aspx">Silverlight Designer pour Visual Studio.</a></span></p>
<p><img alt="Designer for Windows Phone" src="http://create.msdn.com/assets/cms/images/quickstarts/UsingControls_Designer.png" /></p>
<p>La Toolbox de Visual Studio affiche plusieurs contr&ocirc;les que vous pouvez utiliser dans votre application. L&rsquo;illustration suivante montre plusieurs contr&ocirc;les Windows Phone dans la Toolbox.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/5367.image_228AEA78.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/5367.image_5F00_228AEA78.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/5342.image_thumb_4F702786.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/5342.image_5F00_thumb_5F00_4F702786.png" width="195" height="452" /></a></p>
<p><strong>astuce</strong></p>
<p>Le Toolkit Silverlight pour Windows Phone contient des contr&ocirc;les pour le d&eacute;veloppement mobile. Le Toolkit contient des contr&ocirc;les qui sont &agrave; diff&eacute;rentes &eacute;tapes de d&eacute;veloppement. Comme ils deviennent stables, plusieurs contr&ocirc;les dans le Toolkit sont d&eacute;plac&eacute;s dans le runtime. Plusieurs contr&ocirc;les dans le Toolkit sont compl&egrave;tement supprim&eacute;s. Pour plus d&rsquo;informations et pour t&eacute;l&eacute;charger ces contr&ocirc;les additionnels, voir la section <span style="text-decoration: underline;">Toolkit <a href="http://silverlight.codeplex.com/">Silverlight pour Windows Phone.</a></span></p>
<p>Pour ajouter un contr&ocirc;le &agrave; votre application, double-cliquez-le dans la Toolbox. Vous pouvez aussi glisser le contr&ocirc;le dans la vue Design.</p>
<p><b>XAML<br /></b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:3debe7e3-fda1-49a7-976d-66cd45ea8b14" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">TextBox</span><span style="color: #ff0000;"> Height</span><span style="color: #0000ff;">="72"</span><span style="color: #ff0000;"> HorizontalAlignment</span><span style="color: #0000ff;">="Left"</span><span style="color: #ff0000;"> Margin</span><span style="color: #0000ff;">="10,10,0,0"</span><span style="color: #ff0000;"> Name</span><span style="color: #0000ff;">="textBox1"</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> Text</span><span style="color: #0000ff;">="TextBox"</span><span style="color: #ff0000;"> VerticalAlignment</span><span style="color: #0000ff;">="Top"</span><span style="color: #ff0000;"> Width</span><span style="color: #0000ff;">="460" /&gt;</span></li>
</ol></div>
</div>
</div>
<p><a name="SettingTheName"></a></p>
<h2><br />D&eacute;finir le nom d&rsquo;un Control</h2>
<p>Chaque contr&ocirc;le a un nom. Pour travailler avec un contr&ocirc;le &agrave; partir du code, vous utilisez son nom. Vous pouvez changer le nom d&rsquo;un contr&ocirc;le en d&eacute;finissant sa propri&eacute;t&eacute; <a href="http://msdn.microsoft.com/en-us/library/ms600895(v=VS.95).aspx">Name</a>. Vous pouvez d&eacute;finir le nom dans la fen&ecirc;tre de propri&eacute;t&eacute;s de Visual Studio ou dans le Xaml. L&rsquo;illustration suivante montre comment changer le nom du contr&ocirc;le actuellement s&eacute;lectionn&eacute; en utilisant le nom de la <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.textbox%28VS.95%29.aspx">TextBox</a>en haut de la fen&ecirc;tre des propri&eacute;t&eacute;s.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/0243.image_044D06F7.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/0243.image_5F00_044D06F7.png"><img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/6011.image_thumb_1E40C719.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/6011.image_5F00_thumb_5F00_1E40C719.png" width="244" height="150" /></a></p>
<p>L&rsquo;illustration suivante montre comment vous pouvez changer le nom d&rsquo;un contr&ocirc;le dans la vue Xaml en modifiant l&rsquo;attribut <a href="http://msdn.microsoft.com/en-us/library/ms600895(v=VS.95).aspx">Name</a></p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/8154.image_4DAF35E5.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/8154.image_5F00_4DAF35E5.png"><img style="background-image: none; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/8551.image_thumb_336ECCC1.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/8551.image_5F00_thumb_5F00_336ECCC1.png" width="244" height="37" /></a></p>
<p><a name="SettingControlProperties"></a></p>
<h2>D&eacute;finir les propri&eacute;t&eacute;s d&rsquo;un Control</h2>
<p>Vous utilisez les propri&eacute;t&eacute;s pour d&eacute;finir l&rsquo;apparence, le contenu, ou d&rsquo;autres attributs du contr&ocirc;le. Vous pouvez d&eacute;finir les propri&eacute;t&eacute;s d&rsquo;un contr&ocirc;le dans la fen&ecirc;tre propri&eacute;t&eacute;, en XAML, ou dans le code. Pour changer la couleur de fond d&rsquo;un Textbox, vous d&eacute;finissez la propri&eacute;t&eacute; Foreground du contr&ocirc;le. L&rsquo;illustration suivante montre comment d&eacute;finir la propri&eacute;t&eacute; Foreground en utilisant la fen&ecirc;tre Propri&eacute;t&eacute;s.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/6472.image_38710A70.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/6472.image_5F00_38710A70.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/6471.image_thumb_357BA5BD.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/6471.image_5F00_thumb_5F00_357BA5BD.png" width="305" height="392" /></a></p>
<p>L&rsquo;illustration suivante montre comment d&eacute;fini la propri&eacute;t&eacute; Foreground dans la vue XAML. Notez que la fen&ecirc;tre IntelliSense de Visual Studio s&rsquo;ouvre pour vous aider avec la syntaxe.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/7127.image_3CD7656A.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/7127.image_5F00_3CD7656A.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/6052.image_thumb_4FABE914.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/6052.image_5F00_thumb_5F00_4FABE914.png" width="322" height="221" /></a></p>
<p>L&rsquo;illustration suivante montre le r&eacute;sultat XAML apr&egrave;s avoir d&eacute;finit la propri&eacute;t&eacute; <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.control.foreground(VS.95).aspx">Foreground</a></p>
<p><b>XAML<br /></b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:ee3bc79b-239f-4623-b002-7e67ba66dd78" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;">
<li><span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">TextBox</span><span style="color: #ff0000;"> Height</span><span style="color: #0000ff;">="72"</span><span style="color: #ff0000;"> HorizontalAlignment</span><span style="color: #0000ff;">="Left"</span><span style="color: #ff0000;"> Margin</span><span style="color: #0000ff;">="10,10,0,0"</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> Name</span><span style="color: #0000ff;">="MyTB"</span><span style="color: #ff0000;"> Text</span><span style="color: #0000ff;">="TextBox"</span><span style="color: #ff0000;"> VerticalAlignment</span><span style="color: #0000ff;">="Top"</span><span style="color: #ff0000;"> Width</span><span style="color: #0000ff;">="460"</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> Foreground</span><span style="color: #0000ff;">="Red" /&gt;</span></li>
</ol></div>
</div>
</div>
<p>L&rsquo;exemple suivant montre comment d&eacute;finir la propri&eacute;t&eacute; <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.control.foreground(VS.95).aspx">Foreground</a>par le code</p>
<p><b>C#</b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:7b56d7a9-caa6-4e03-bba3-cc5ddce6e03f" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;">
<li>SolidColorBrush scb = <span style="color: #0000ff;">new</span> SolidColorBrush(Colors.Red);</li>
<li style="background: #f3f3f3;">MyTB.Foreground = scb;</li>
</ol></div>
</div>
</div>
<pre></pre>
<p><b>Visual Basic</b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:b0e943af-a3a0-414e-b65a-01b66dfdad93" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;">
<li>&nbsp;</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">Dim</span> scb <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">SolidColorBrush</span> = <span style="color: #0000ff;">New</span> <span style="color: #2b91af;">SolidColorBrush</span>(<span style="color: #2b91af;">Colors</span>.Red)</li>
<li>MyTB.Foreground = scb</li>
</ol></div>
</div>
</div>
<p>Plusieurs propri&eacute;t&eacute;s, comme <a href="http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.width%28VS.95%29.aspx">Width</a>, <a href="http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.height%28VS.95%29.aspx">Height</a> ou <a href="http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.margin(VS.95).aspx">Margin</a><span style="text-decoration: underline;"> </span>peuvent &ecirc;tre chang&eacute;es, simplement en s&eacute;lectionnant et manipulant le contr&ocirc;le dans la vue Design. L&rsquo;illustration suivante montre plusieurs outils de redimensionnement disponible en vue Design.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/7028.image_05CD6164.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/7028.image_5F00_05CD6164.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/0675.image_thumb_11EEDB8B.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/0675.image_5F00_thumb_5F00_11EEDB8B.png" width="348" height="160" /></a><br /><a name="CreatingEventHandler"></a></p>
<h2>Cr&eacute;ation d&rsquo;un Event Handler</h2>
<p>Chaque contr&ocirc;le poss&egrave;de un &eacute;v&egrave;nement qui vous permet de r&eacute;pondre aux actions de l&rsquo;utilisateur. Par exemple, un contr&ocirc;le <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.button(VS.95).aspx">Button</a> contient un &eacute;v&egrave;nement Click qui est lev&eacute; quand le <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.button(VS.95).aspx">Button</a> est cliqu&eacute;. Vous cr&eacute;ez une m&eacute;thode, appel&eacute;e sur un gestionnaire d&rsquo;&eacute;v&egrave;nement (Event Handler), pour g&eacute;rer cet &eacute;v&egrave;nement. Vous pouvez cr&eacute;er un Event Handler dans la fen&ecirc;tre Properties ou dans le XAML. Vous pouvez aussi cr&eacute;er un gestionnaire d&rsquo;&eacute;v&egrave;nement manuellement dans le code. Pour plus d&rsquo;informations sur les &eacute;v&egrave;nements, consultez la section <span style="text-decoration: underline;">Vue d&rsquo;ensemble des Events pour Silverlight.</span></p>
<p>Vous pouvez cr&eacute;er un gestionnaire d&rsquo;&eacute;v&egrave;nements en utilisant l&rsquo;onglet <b>Events</b> de la fen&ecirc;tre Properties. Pour cr&eacute;er un Event Handler, vous s&eacute;lectionnez le contr&ocirc;le et cliquez alors sur l&rsquo;onglet Events en haut de la fen&ecirc;tre Properties. La fen&ecirc;tre Properties liste tous les &eacute;v&egrave;nements disponibles pour ce contr&ocirc;le. L&rsquo;illustration suivante liste plusieurs &eacute;v&egrave;nements pour un <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.textbox(VS.95).aspx">TextBox</a>.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/0753.image_61E48A09.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/0753.image_5F00_61E48A09.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/6102.image_thumb_1872354E.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/6102.image_5F00_thumb_5F00_1872354E.png" width="320" height="412" /></a></p>
<p>Pour cr&eacute;er un Event Handler avec un nom par d&eacute;faut, vous double-cliquez sur le nom de l&rsquo;&eacute;v&egrave;nement dans la fen&ecirc;tre Properties. L&rsquo;Event Handler est cr&eacute;&eacute; et le fichier du code-behind est ouvert dans l&rsquo;&eacute;diteur de code. Le code suivant montre l&rsquo;Event Handler sur l&rsquo;&eacute;v&egrave;nement TextChanged d&rsquo;un TextBox nomm&eacute; MyTB. Quand le texte dans le contr&ocirc;le TextBox est chang&eacute;, la propri&eacute;t&eacute; Text du TextBlock appel&eacute;e MyBlock est chang&eacute;e en &laquo; <b>You entered text</b>&raquo;</p>
<p><b>C#<br /></b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:b6d408fa-0354-48bd-969f-992a06f3d43f" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;">
<li>&nbsp;</li>
<li style="background: #f3f3f3;"><span style="color: #0000ff;">private</span> <span style="color: #0000ff;">void</span> MyTB_TextChanged(<span style="color: #0000ff;">object</span> sender, TextChangedEventArgs e)</li>
<li>{</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;MyBlock.Text = <span style="color: #a31515;">"You entered text!"</span>;</li>
<li>}</li>
</ol></div>
</div>
</div>
<p><strong>Visula Basic<br /></strong></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:07a044ad-5295-4eea-a07e-e879731f98ac" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">Private</span> <span style="color: #0000ff;">Sub</span> MyTB_TextChanged(<span style="color: #0000ff;">ByVal</span> sender <span style="color: #0000ff;">As</span> <span style="color: #0000ff;">Object</span>, <span style="color: #0000ff;">ByVal</span> e <span style="color: #0000ff;">As</span> <span style="color: #2b91af;">TextChangedEventArgs</span>)</li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;MyBlock.Text = <span style="color: #a31515;">"You entered text!"</span></li>
<li><span style="color: #0000ff;">End</span> <span style="color: #0000ff;">Sub</span></li>
</ol></div>
</div>
</div>
<p>Vous pouvez aussi cr&eacute;er un Event Handler dans le XAML. Dans la vue XAML, tapez le nom d&rsquo;un &eacute;v&egrave;nement que vous voulez g&eacute;rer. La vue XAML affiche une fen&ecirc;tre InelliSense quand vous commencez &agrave; saisir. L&rsquo;illustration suivante montre comment sp&eacute;cifier l&rsquo;&eacute;v&egrave;nement <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.textbox.textchanged(VS.95).aspx">TextChanged</a>en XAML</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/2783.image_7C14CD60.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/2783.image_5F00_7C14CD60.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/0726.image_thumb_4C0A7BDF.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/0726.image_5F00_thumb_5F00_4C0A7BDF.png" width="327" height="237" /></a></p>
<p>Une fois que vous avez sp&eacute;cifi&eacute; l&rsquo;&eacute;v&egrave;nement, vous pouvez double-cliquer <b>&lt;New Event Handler&gt;</b>dans la fen&ecirc;tre IntelliSense qui appara&icirc;t pour cr&eacute;er un nouveau Event Handler avec un nom par d&eacute;faut. L&rsquo;illustration suivante montre la fen&ecirc;tre IntelliSense qui appara&icirc;t pour vous aider &agrave; cr&eacute;er un nouveau gestionnaire d&rsquo;&eacute;v&egrave;nement.</p>
<p><a href="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/3441.image_3E57BFD7.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/3441.image_5F00_3E57BFD7.png"><img style="background-image: none; padding-left: 0px; padding-right: 0px; display: inline; padding-top: 0px; border-width: 0px;" title="image" border="0" alt="image" src="https://msdnshared.blob.core.windows.net/media/MSDNBlogsFS/prod.evol.blogs.msdn.com/CommunityServer.Blogs.Components.WeblogFiles/00/00/01/44/95/metablogapi/5001.image_thumb_080697C8.png" original-url="http://blogs.msdn.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-01-44-95-metablogapi/5001.image_5F00_thumb_5F00_080697C8.png" width="484" height="60" /></a></p>
<p>Le XAML suivant montre que l&rsquo;&eacute;v&egrave;nement <a href="http://msdn.microsoft.com/en-us/library/system.windows.controls.textbox.textchanged(VS.95).aspx">TextChanged</a>est associ&eacute; avec un gestionnaire d&rsquo;&eacute;v&egrave;nement nomm&eacute; MyTB_TextChanged</p>
<p><b>XAML<br /></b></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:038edc01-742f-477a-a68e-837ad1b5bdf3" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;">
<li><span style="color: #a31515;"></span><span style="color: #0000ff;">&lt;</span><span style="color: #a31515;">TextBox</span><span style="color: #ff0000;"> Height</span><span style="color: #0000ff;">="72"</span><span style="color: #ff0000;"> HorizontalAlignment</span><span style="color: #0000ff;">="Left"</span><span style="color: #ff0000;"> Margin</span><span style="color: #0000ff;">="10,10,0,0"</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> Name</span><span style="color: #0000ff;">="MyTB"</span><span style="color: #ff0000;"> Text</span><span style="color: #0000ff;">="TextBox"</span><span style="color: #ff0000;"> VerticalAlignment</span><span style="color: #0000ff;">="Top"</span><span style="color: #ff0000;"> Width</span><span style="color: #0000ff;">="260"</span></li>
<li>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> Foreground</span><span style="color: #0000ff;">"Red"</span></li>
<li style="background: #f3f3f3;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color: #ff0000;"> TextChanged</span><span style="color: #0000ff;">="</span><span style="color: #ff0000;">MyTB_TextChanged</span><span style="color: #0000ff;">" /&gt;</span></li>
</ol></div>
</div>
</div>
<p><strong>C#<br /></strong></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:e4cb7709-7d44-4b51-9be7-bcf0acaba341" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;">
<li>MyTB.TextChanged +=<span style="color: #0000ff;">new</span> TextChangedEventHandler(MyTB_TextChanged);</li>
</ol></div>
</div>
</div>
<p><strong>Visual Basic<br /></strong></p>
<div style="margin: 0px; display: inline; float: none; padding: 0px;" id="scid:9ce6104f-a9aa-4a17-a79f-3a39532ebf7c:b0f32df3-b69e-4166-9a8c-3f4773acfe9a" class="wlWriterEditableSmartContent">
<div style="border: #000080 1px solid; color: #000; font-family: 'Courier New', Courier, Monospace; font-size: 10pt;">
<div style="background: #000080; color: #fff; font-family: Verdana, Tahoma, Arial, sans-serif; font-weight: bold; padding: 2px 5px;">Code Snippet</div>
<div style="background: #ddd; max-height: 300px; overflow: auto;"><ol start="1" style="background: #ffffff; margin: 0 0 0 2em; padding: 0 0 0 5px;">
<li><span style="color: #0000ff;">AddHandler</span> MyTB.TextChanged, <span style="color: #0000ff;">AddressOf</span> <span style="color: #0000ff;">Me</span>.MyTB_TextChanged</li>
</ol></div>
</div>
</div>
<p><a name="whats_next"></a></p>
<h2>Et apr&egrave;s</h2>
<p>Vous connaissez maintenant les bases pour ajouter un contr&ocirc;le &agrave; votre application, d&eacute;finir les propri&eacute;t&eacute;s d&rsquo;un contr&ocirc;le, ainsi que la cr&eacute;ation des Event Handlers. Au prochain chapitre, vous en apprendrez plus sur les contr&ocirc;les qui peuvent &ecirc;tre utilis&eacute;s pour un but donn&eacute; : <span style="text-decoration: underline;"><a href="http://blogs.msdn.com/b/jflavidalle/archive/2011/09/06/developpement-windows-phone-partie-4.aspx">Control 2 : Choisir les contr&ocirc;les et ajouter du contenu</a></span></p>
<p><strong>Voir aussi<br /></strong></p>
<ul>
<li><a href="http://msdn.microsoft.com/en-us/library/ff402561(v=VS.92).aspx">Les contr&ocirc;les pour Windows Phone</a></li>
</ul>]]></content:encoded>
    </item>
    <item>
      <title>WPF – Tip – AllowsTransparency + Popup = brain cast exception</title>
      <link>https://docs.microsoft.com/archive/blogs/patrick_payet/wpf-tip-allowstransparency-popup-brain-cast-exception</link>
      <pubDate>Fri, 29 Apr 2011 14:57:00 GMT</pubDate>
      <dc:creator><![CDATA[papayet]]></dc:creator>
      <guid
        isPermaLink="false">https://blogs.msdn.microsoft.com/patrick_payet/2011/04/29/wpf-tip-allowstransparency-popup-brain-cast-exception/</guid>
      <description><![CDATA[Hi there! 
Today I would like to share with you a tip that I encountered on my current project in...]]></description>
      <content:encoded><![CDATA[<p>Hi there! </p>
<p>Today I would like to share with you a tip that I encountered on my current project in .Net 3.5. </p>
<p><em><strong>Problem</strong></em> <br />I was seeing why my WebBrowser component didn't want to work in a custom popup. And I didn't know why, I had the same effect on my ComboBox component... I mean that the combo box stopped showing its items ... After spent a lot of time with debbuger tools (snoop, vs output ans so on) I was tired and the last thing that I didn't see was resource dictionary file. <br /><br /><em><strong>Solution <br /></strong></em>And it was exactly the problem! Indeed, the popup style enabled the AllowsTransparency property (AllowsTransparency=true) I've reproduced the problem with a webBrowser in a popup control as you can see: </p>
<p><a href="http://www.braincastexception.com/wordpress/wp-content/uploads/2011/04/tip-allowtransprency-2.png"><img height="325" width="933" src="http://www.braincastexception.com/wordpress/wp-content/uploads/2011/04/tip-allowtransprency-2.png" title="tip-allowtransprency-2" class="size-full wp-image-775 aligncenter" /></a> </p>
<p>And if you set AllowsTransparency = true, the popup will not show it in the WebBrowser component... <br />So, if you want to see your popup correctly in your project, you have to isolate your code (WebBrowser, ComboBox) that you want to display inside your popup and set AllowsTransparency = false on it. <br /><br />Hope this help ! <br /><br />PS: Thanks to <a target="_blank" href="http://blogs.developpeur.org/thadeus/default.aspx" title="Arnaud Auroux">Arnaud Auroux</a> for having investigated this problem with me :D</p>]]></content:encoded>
    </item>
  </channel>
</rss>