<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:georss="http://www.georss.org/georss" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" version="2.0">
  <channel>
    <title>Ucaya Blog</title>
    <link>http://www.ucaya.com/blog/</link>
    <description />
    <language>en-fr</language>
    <copyright>Ucaya team</copyright>
    <lastBuildDate>Tue, 01 Sep 2009 10:47:46 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.3.9074.18820</generator>
    <managingEditor>ucaya@ucaya.com</managingEditor>
    <webMaster>ucaya@ucaya.com</webMaster>
    <item>
      <trackback:ping>http://www.ucaya.com/blog/Trackback.aspx?guid=88d17f87-7a6e-49f7-929e-1c28b340ab37</trackback:ping>
      <pingback:server>http://www.ucaya.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.ucaya.com/blog/PermaLink,guid,88d17f87-7a6e-49f7-929e-1c28b340ab37.aspx</pingback:target>
      <dc:creator>Thierry Bouquain</dc:creator>
      <georss:point>47.2108230807441 -1.62322998046875</georss:point>
      <wfw:comment>http://www.ucaya.com/blog/CommentView,guid,88d17f87-7a6e-49f7-929e-1c28b340ab37.aspx</wfw:comment>
      <wfw:commentRss>http://www.ucaya.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=88d17f87-7a6e-49f7-929e-1c28b340ab37</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Un de mes amis m’a conseiller de jeter un oeil à la sérialisation Proto Buffer. Elle
est rapide et légère. Idéale donc pour la consommer par webservice. Il existe plusieurs
implémentation pour c#, je me suis intéressé à <a href="http://code.google.com/p/protobuf-net" target="_blank">protobuf-net</a>.
Pour une comparaison des <a href="http://code.google.com/p/protobuf-net/wiki/Performance" target="_blank">performances</a> par
rapport à du BinaryFormatter du Soap ou du Json, vous pouvez vous rendre sur cette <a href="http://code.google.com/p/protobuf-net/wiki/Performance" target="_blank">page</a>.
</p>
        <h1>Utilisation avec WCF
</h1>
        <p>
Dans mes premiers tests, je voulais remplacer le DataContractSerializer de mes ServiceContract
par le serializer <a href="http://code.google.com/p/protobuf-net" target="_blank">protobuf-net</a>,
malheureusement le support de WCF de silverlight est assez léger et il n’est actuellement
pas possible de le faire. Dans ses exemples <a href="http://code.google.com/p/protobuf-net" target="_blank">protobuf-net</a> contient
un serveur et client RPC. J’ai donc configuré WCF avec une adaptation de ce serveur
RPC et remplacé le client généré par le wizard de visual studio par le client <a href="http://code.google.com/p/protobuf-net" target="_blank">protobuf-net</a>.
</p>
        <h1>
        </h1>
        <h1>Côté serveur
</h1>
        <p>
Pour avoir un serveur RPC compatible avec l’exemple fourni par <a href="http://code.google.com/p/protobuf-net" target="_blank">protobuf-net</a>,
il faut rajouter à WCF un OperationSelector routant les urls entrantes vers le bon
service contract. J’ai réalisé un EndPointBehavior paramettrant tout ça. La configuration
ressemble à ceci:
</p>
        <div style="font-family: consolas; background: black; color: #e0e0e0; font-size: 8pt">
          <p style="margin: 0px">
            <span style="color: #40c4ff">    &lt;system.serviceModel&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #40c4ff">        &lt;extensions&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #40c4ff">           
&lt;behaviorExtensions&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #40c4ff">               
&lt;add </span>
            <span style="color: #eee8aa">name</span>
            <span style="color: #40c4ff">=</span>
            <span style="color: #60ff60">"protoRPC"</span>
            <span style="color: #40c4ff">
            </span>
            <span style="color: #eee8aa">type</span>
            <span style="color: #40c4ff">=</span>
            <span style="color: #60ff60">"ProtoBuf.RPC.ProtoRpcEndpointBehaviorSection,
protobuf-wcf, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"</span>
            <span style="color: #40c4ff">/&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #40c4ff">           
&lt;/behaviorExtensions&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #40c4ff">        &lt;/extensions&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #40c4ff">        &lt;behaviors&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #40c4ff">           
&lt;endpointBehaviors&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #40c4ff">               
&lt;behavior </span>
            <span style="color: #eee8aa">name</span>
            <span style="color: #40c4ff">=</span>
            <span style="color: #60ff60">"rpcBehavior"</span>
            <span style="color: #40c4ff">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #40c4ff">                   
&lt;protoRPC/&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #40c4ff">               
&lt;/behavior&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #40c4ff">           
&lt;/endpointBehaviors&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #40c4ff">        &lt;/behaviors&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #40c4ff">        &lt;services&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #40c4ff">           
&lt;service </span>
            <span style="color: #eee8aa">name</span>
            <span style="color: #40c4ff">=</span>
            <span style="color: #60ff60">"SilverlightApplication4.Web.TestService"</span>
            <span style="color: #40c4ff">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #40c4ff">               
&lt;endpoint </span>
            <span style="color: #eee8aa">address</span>
            <span style="color: #40c4ff">=</span>
            <span style="color: #60ff60">""</span>
            <span style="color: #40c4ff">
            </span>
            <span style="color: #eee8aa">binding</span>
            <span style="color: #40c4ff">=</span>
            <span style="color: #60ff60">"webHttpBinding"</span>
            <span style="color: #40c4ff">
            </span>
            <span style="color: #eee8aa">contract</span>
            <span style="color: #40c4ff">=</span>
            <span style="color: #60ff60">"TestServices.ITestService"</span>
            <span style="color: #40c4ff">
            </span>
            <span style="color: #eee8aa">behaviorConfiguration</span>
            <span style="color: #40c4ff">=</span>
            <span style="color: #60ff60">"rpcBehavior"</span>
            <span style="color: #40c4ff">/&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #40c4ff">           
&lt;/service&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #40c4ff">        &lt;/services&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #40c4ff">    &lt;/system.serviceModel&gt;</span>
          </p>
        </div>
        <p>
La classe implémentant le ServiceContract doit également autoriser toutes les urls:
</p>
        <div style="font-family: consolas; background: black; color: #e0e0e0; font-size: 8pt">
          <p style="margin: 0px">
    [<span style="color: #66cdaa">ServiceBehavior</span>(<span style="color: #eee8aa">AddressFilterMode</span><span style="color: silver">=</span><span style="color: #2b91af">AddressFilterMode</span><span style="color: silver">.</span><span style="color: #eee8aa">Any</span>)]
</p>
          <p style="margin: 0px">
    <span style="color: #40c4ff">public</span><span style="color: #40c4ff">class</span><span style="color: #66cdaa">TestService</span> : <span style="color: #2b91af">ITestService</span></p>
          <p style="margin: 0px">
    {
</p>
          <p style="margin: 0px">
            <span style="color: #8080ff">        #region</span> ITestService
Members
</p>
          <p style="margin: 0px">
 
</p>
          <p style="margin: 0px">
        <span style="color: #40c4ff">public</span><span style="color: #eee8aa">TestServices</span><span style="color: silver">.</span><span style="color: #66cdaa">Customer</span><span style="color: #eee8aa">DoWork</span>(<span style="color: #40c4ff">string</span><span style="color: #eee8aa">a</span>, <span style="color: #eee8aa">TestServices</span><span style="color: silver">.</span><span style="color: #66cdaa">Customer</span><span style="color: #eee8aa">c</span>)
</p>
          <p style="margin: 0px">
        {
</p>
          <p style="margin: 0px">
            <span style="color: #40c4ff">return</span><span style="color: #eee8aa">TestServices</span><span style="color: silver">.</span><span style="color: #66cdaa">Customer</span><span style="color: silver">.</span><span style="color: #eee8aa">Invent</span>();
</p>
          <p style="margin: 0px">
        }
</p>
          <p style="margin: 0px">
 
</p>
          <p style="margin: 0px">
            <span style="color: #8080ff">        #endregion</span>
          </p>
          <p style="margin: 0px">
    }
</p>
        </div>
        <p>
J’ai choisi d’externaliser le ServiceContract dans une interface pour pouvoir générer
simplement un client dans la partie Silverlight. Voici à quoi il ressemble:
</p>
        <div style="font-family: consolas; background: black; color: #e0e0e0; font-size: 8pt">
          <p style="margin: 0px">
    [<span style="color: #66cdaa">ServiceContract</span>]
</p>
          <p style="margin: 0px">
    <span style="color: #40c4ff">public</span><span style="color: #40c4ff">interface</span><span style="color: #2b91af">ITestService</span></p>
          <p style="margin: 0px">
    {
</p>
          <p style="margin: 0px">
        [<span style="color: #66cdaa">OperationContract</span>(<span style="color: #eee8aa">Action</span><span style="color: silver">=</span><span style="color: #60ff60">"dowork"</span>)]
</p>
          <p style="margin: 0px">
        <span style="color: #66cdaa">Customer</span><span style="color: #eee8aa">DoWork</span>(<span style="color: #40c4ff">string</span><span style="color: #eee8aa">a</span>, <span style="color: #66cdaa">Customer</span><span style="color: #eee8aa">c</span>);
</p>
          <p style="margin: 0px">
    }
</p>
        </div>
        <h1>Côté Silverlight
</h1>
        <p>
Pour fonctionner avec Silverlight, il a fallu que je corrige un bug dans les sources
de <a href="http://code.google.com/p/protobuf-net" target="_blank">protobuf-net</a>.
Les classes temporaires de sérialization générées par <a href="http://code.google.com/p/protobuf-net" target="_blank">protobuf-net</a> sont
privées et Silverlight ne permet pas de faire de réflection sur celles-ci. Il faut
les mettres en internal.
</p>
        <h2>DataContracts
</h2>
        <p>
          <a href="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/ProtobufferwebserviceserializationandSil_D8BC/image_2.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="image" border="0" alt="image" align="right" src="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/ProtobufferwebserviceserializationandSil_D8BC/image_thumb.png" width="158" height="205" />
          </a>Dans
l’implémentation de mon exemple, j’ai isolé mes datacontracts dans une assembly séparée.
J’ai créé la même assembly pour Silverlight en référençant simplement les fichiers
par liens, ce qui me permet de n’avoir qu’une seule version de ces fichiers. Pour
ceux qui ne saurait pas comment faire et pour éviter de perdre 2 heures à chercher,
il suffit lorsque vous ajouter un élément à la solution de cliquer sur la petite flêche
à côté du boutton Add et de choisie Add as link. <a href="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/ProtobufferwebserviceserializationandSil_D8BC/image_4.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/ProtobufferwebserviceserializationandSil_D8BC/image_thumb_1.png" width="198" height="87" /></a></p>
        <h2>Génération du client
</h2>
        <p>
Nous voici donc avec la même assembly que côté serveur, mais compilée au format Silverlight.
Cette assembly contenant notre interface de ServiceContract, nous allons rajouter
dans la version Silverlight la génération du client. J’ai fais cette génération par
l’utilisation des fichiers t4. Il suffit de copier coller le fichier .tt qui se trouve
dans la solution et de le nommer du nom du fichier qui contient l’interface de ServiceContract
pour que la génération s’effectue (ici ITestService.tt). La génération utilise le
FileCodeModel pour déterminer les Méthodes de l’interface à implémenter dans le client.
Le client généré contient des fonctions d’appels asynchrones et les événements completed
qui correspondent.
</p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <h2>Utilisation
</h2>
        <p>
L’utilisation de notre client reste aussi simple que l’utilisation d’un client WCF
silverlight standard. 
</p>
        <div style="font-family: consolas; background: black; color: #e0e0e0; font-size: 8pt">
          <p style="margin: 0px">
        <span style="color: #40c4ff">private</span><span style="color: #40c4ff">void</span><span style="color: #eee8aa">Button_Click</span>(<span style="color: #40c4ff">object</span><span style="color: #eee8aa">sender</span>, <span style="color: #66cdaa">RoutedEventArgs</span><span style="color: #eee8aa">e</span>)
</p>
          <p style="margin: 0px">
        {
</p>
          <div style="font-family: consolas; background: black; color: #e0e0e0; font-size: 8pt">
            <p style="margin: 0px">
            <span style="color: #66cdaa">ITestServiceClient</span><span style="color: #eee8aa">client</span><span style="color: silver">=</span><span style="color: #40c4ff">new</span><span style="color: #66cdaa">ITestServiceClient</span>(<span style="color: #40c4ff">new</span><span style="color: #66cdaa">Uri</span>(<span style="color: #60ff60">"../"</span>, <span style="color: #2b91af">UriKind</span><span style="color: silver">.</span><span style="color: #eee8aa">Relative</span>));
</p>
          </div>
          <p style="margin: 0px">
            <span style="color: #eee8aa">client</span><span style="color: silver">.</span><span style="color: #eee8aa">DoWorkCompleted</span><span style="color: silver">+=</span><span style="color: #40c4ff">new</span><span style="color: #2b91af">EventHandler</span><span style="color: silver">&lt;</span><span style="color: #66cdaa">ITestServiceClient</span><span style="color: silver">.</span><span style="color: #66cdaa">DoWorkResultEventArgs</span><span style="color: silver">&gt;</span>(<span style="color: #eee8aa">client_DoWorkCompleted</span>);
</p>
          <p style="margin: 0px">
            <span style="color: #eee8aa">client</span><span style="color: silver">.</span><span style="color: #eee8aa">DoWorkAsync</span>(<span style="color: #60ff60">"aazer"</span>, <span style="color: #66cdaa">Customer</span><span style="color: silver">.</span><span style="color: #eee8aa">Invent</span>());
</p>
          <p style="margin: 0px">
        }
</p>
          <p style="margin: 0px">
 
</p>
          <p style="margin: 0px">
        <span style="color: #40c4ff">void</span><span style="color: #eee8aa">client_DoWorkCompleted</span>(<span style="color: #40c4ff">object</span><span style="color: #eee8aa">sender</span>, <span style="color: #66cdaa">ITestServiceClient</span><span style="color: silver">.</span><span style="color: #66cdaa">DoWorkResultEventArgs</span><span style="color: #eee8aa">e</span>)
</p>
          <p style="margin: 0px">
        {
</p>
          <p style="margin: 0px">
            <span style="color: #40c4ff">var</span><span style="color: #eee8aa">r</span><span style="color: silver">=</span><span style="color: #eee8aa">e</span><span style="color: silver">.</span><span style="color: #eee8aa">Result</span>;
</p>
          <p style="margin: 0px">
        }
</p>
        </div>
        <p>
        </p>
        <p>
Il y a plusieurs façons d’instancier le client. Tout dépend d’où vos webservices se
trouvent. 
<br />
Le constructeur par défaut va chercher un webservice se nommant du même nom que l’interface
de service contract sans le I se trouvant de le même dossier que votre .xap. Sur une
surcharge du constructeur, vous pouvez spécifier soit une Url donnant le dossier dans
lequel va se trouver le webservice ou alors un url d’appel direct vers le fichier
svc.
</p>
        <p>
          <a href="http://cid-b7145a2861d183da.skydrive.live.com/self.aspx/Code/proto-buffer.7z" target="_blank">Les
sources</a>
        </p>
        <img width="0" height="0" src="http://www.ucaya.com/blog/aggbug.ashx?id=88d17f87-7a6e-49f7-929e-1c28b340ab37" />
      </body>
      <title>Serialisation webservices Proto Buffer et client Silverlight</title>
      <guid isPermaLink="false">http://www.ucaya.com/blog/PermaLink,guid,88d17f87-7a6e-49f7-929e-1c28b340ab37.aspx</guid>
      <link>http://www.ucaya.com/blog/2009/09/01/SerialisationWebservicesProtoBufferEtClientSilverlight.aspx</link>
      <pubDate>Tue, 01 Sep 2009 10:47:46 GMT</pubDate>
      <description>&lt;p&gt;
Un de mes amis m’a conseiller de jeter un oeil à la sérialisation Proto Buffer. Elle
est rapide et légère. Idéale donc pour la consommer par webservice. Il existe plusieurs
implémentation pour c#, je me suis intéressé à &lt;a href="http://code.google.com/p/protobuf-net" target="_blank"&gt;protobuf-net&lt;/a&gt;.
Pour une comparaison des &lt;a href="http://code.google.com/p/protobuf-net/wiki/Performance" target="_blank"&gt;performances&lt;/a&gt; par
rapport à du BinaryFormatter du Soap ou du Json, vous pouvez vous rendre sur cette &lt;a href="http://code.google.com/p/protobuf-net/wiki/Performance" target="_blank"&gt;page&lt;/a&gt;.
&lt;/p&gt;
&lt;h1&gt;Utilisation avec WCF
&lt;/h1&gt;
&lt;p&gt;
Dans mes premiers tests, je voulais remplacer le DataContractSerializer de mes ServiceContract
par le serializer &lt;a href="http://code.google.com/p/protobuf-net" target="_blank"&gt;protobuf-net&lt;/a&gt;,
malheureusement le support de WCF de silverlight est assez léger et il n’est actuellement
pas possible de le faire. Dans ses exemples &lt;a href="http://code.google.com/p/protobuf-net" target="_blank"&gt;protobuf-net&lt;/a&gt; contient
un serveur et client RPC. J’ai donc configuré WCF avec une adaptation de ce serveur
RPC et remplacé le client généré par le wizard de visual studio par le client &lt;a href="http://code.google.com/p/protobuf-net" target="_blank"&gt;protobuf-net&lt;/a&gt;.
&lt;/p&gt;
&lt;h1&gt;
&lt;/h1&gt;
&lt;h1&gt;Côté serveur
&lt;/h1&gt;
&lt;p&gt;
Pour avoir un serveur RPC compatible avec l’exemple fourni par &lt;a href="http://code.google.com/p/protobuf-net" target="_blank"&gt;protobuf-net&lt;/a&gt;,
il faut rajouter à WCF un OperationSelector routant les urls entrantes vers le bon
service contract. J’ai réalisé un EndPointBehavior paramettrant tout ça. La configuration
ressemble à ceci:
&lt;/p&gt;
&lt;div style="font-family: consolas; background: black; color: #e0e0e0; font-size: 8pt"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #40c4ff"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;system.serviceModel&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #40c4ff"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;extensions&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #40c4ff"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
&amp;lt;behaviorExtensions&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #40c4ff"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
&amp;lt;add &lt;/span&gt;&lt;span style="color: #eee8aa"&gt;name&lt;/span&gt;&lt;span style="color: #40c4ff"&gt;=&lt;/span&gt;&lt;span style="color: #60ff60"&gt;&amp;quot;protoRPC&amp;quot;&lt;/span&gt;&lt;span style="color: #40c4ff"&gt; &lt;/span&gt;&lt;span style="color: #eee8aa"&gt;type&lt;/span&gt;&lt;span style="color: #40c4ff"&gt;=&lt;/span&gt;&lt;span style="color: #60ff60"&gt;&amp;quot;ProtoBuf.RPC.ProtoRpcEndpointBehaviorSection,
protobuf-wcf, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null&amp;quot;&lt;/span&gt;&lt;span style="color: #40c4ff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #40c4ff"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
&amp;lt;/behaviorExtensions&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #40c4ff"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/extensions&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #40c4ff"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;behaviors&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #40c4ff"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
&amp;lt;endpointBehaviors&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #40c4ff"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
&amp;lt;behavior &lt;/span&gt;&lt;span style="color: #eee8aa"&gt;name&lt;/span&gt;&lt;span style="color: #40c4ff"&gt;=&lt;/span&gt;&lt;span style="color: #60ff60"&gt;&amp;quot;rpcBehavior&amp;quot;&lt;/span&gt;&lt;span style="color: #40c4ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #40c4ff"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
&amp;lt;protoRPC/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #40c4ff"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
&amp;lt;/behavior&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #40c4ff"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
&amp;lt;/endpointBehaviors&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #40c4ff"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/behaviors&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #40c4ff"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;services&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #40c4ff"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
&amp;lt;service &lt;/span&gt;&lt;span style="color: #eee8aa"&gt;name&lt;/span&gt;&lt;span style="color: #40c4ff"&gt;=&lt;/span&gt;&lt;span style="color: #60ff60"&gt;&amp;quot;SilverlightApplication4.Web.TestService&amp;quot;&lt;/span&gt;&lt;span style="color: #40c4ff"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #40c4ff"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
&amp;lt;endpoint &lt;/span&gt;&lt;span style="color: #eee8aa"&gt;address&lt;/span&gt;&lt;span style="color: #40c4ff"&gt;=&lt;/span&gt;&lt;span style="color: #60ff60"&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span style="color: #40c4ff"&gt; &lt;/span&gt;&lt;span style="color: #eee8aa"&gt;binding&lt;/span&gt;&lt;span style="color: #40c4ff"&gt;=&lt;/span&gt;&lt;span style="color: #60ff60"&gt;&amp;quot;webHttpBinding&amp;quot;&lt;/span&gt;&lt;span style="color: #40c4ff"&gt; &lt;/span&gt;&lt;span style="color: #eee8aa"&gt;contract&lt;/span&gt;&lt;span style="color: #40c4ff"&gt;=&lt;/span&gt;&lt;span style="color: #60ff60"&gt;&amp;quot;TestServices.ITestService&amp;quot;&lt;/span&gt;&lt;span style="color: #40c4ff"&gt; &lt;/span&gt;&lt;span style="color: #eee8aa"&gt;behaviorConfiguration&lt;/span&gt;&lt;span style="color: #40c4ff"&gt;=&lt;/span&gt;&lt;span style="color: #60ff60"&gt;&amp;quot;rpcBehavior&amp;quot;&lt;/span&gt;&lt;span style="color: #40c4ff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #40c4ff"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
&amp;lt;/service&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #40c4ff"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/services&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #40c4ff"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/system.serviceModel&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
La classe implémentant le ServiceContract doit également autoriser toutes les urls:
&lt;/p&gt;
&lt;div style="font-family: consolas; background: black; color: #e0e0e0; font-size: 8pt"&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #66cdaa"&gt;ServiceBehavior&lt;/span&gt;(&lt;span style="color: #eee8aa"&gt;AddressFilterMode&lt;/span&gt; &lt;span style="color: silver"&gt;=&lt;/span&gt; &lt;span style="color: #2b91af"&gt;AddressFilterMode&lt;/span&gt;&lt;span style="color: silver"&gt;.&lt;/span&gt;&lt;span style="color: #eee8aa"&gt;Any&lt;/span&gt;)]
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #40c4ff"&gt;public&lt;/span&gt; &lt;span style="color: #40c4ff"&gt;class&lt;/span&gt; &lt;span style="color: #66cdaa"&gt;TestService&lt;/span&gt; : &lt;span style="color: #2b91af"&gt;ITestService&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #8080ff"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; #region&lt;/span&gt; ITestService
Members
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #40c4ff"&gt;public&lt;/span&gt; &lt;span style="color: #eee8aa"&gt;TestServices&lt;/span&gt;&lt;span style="color: silver"&gt;.&lt;/span&gt;&lt;span style="color: #66cdaa"&gt;Customer&lt;/span&gt; &lt;span style="color: #eee8aa"&gt;DoWork&lt;/span&gt;(&lt;span style="color: #40c4ff"&gt;string&lt;/span&gt; &lt;span style="color: #eee8aa"&gt;a&lt;/span&gt;, &lt;span style="color: #eee8aa"&gt;TestServices&lt;/span&gt;&lt;span style="color: silver"&gt;.&lt;/span&gt;&lt;span style="color: #66cdaa"&gt;Customer&lt;/span&gt; &lt;span style="color: #eee8aa"&gt;c&lt;/span&gt;)
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #40c4ff"&gt;return&lt;/span&gt; &lt;span style="color: #eee8aa"&gt;TestServices&lt;/span&gt;&lt;span style="color: silver"&gt;.&lt;/span&gt;&lt;span style="color: #66cdaa"&gt;Customer&lt;/span&gt;&lt;span style="color: silver"&gt;.&lt;/span&gt;&lt;span style="color: #eee8aa"&gt;Invent&lt;/span&gt;();
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #8080ff"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; #endregion&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160; }
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
J’ai choisi d’externaliser le ServiceContract dans une interface pour pouvoir générer
simplement un client dans la partie Silverlight. Voici à quoi il ressemble:
&lt;/p&gt;
&lt;div style="font-family: consolas; background: black; color: #e0e0e0; font-size: 8pt"&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #66cdaa"&gt;ServiceContract&lt;/span&gt;]
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #40c4ff"&gt;public&lt;/span&gt; &lt;span style="color: #40c4ff"&gt;interface&lt;/span&gt; &lt;span style="color: #2b91af"&gt;ITestService&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; [&lt;span style="color: #66cdaa"&gt;OperationContract&lt;/span&gt;(&lt;span style="color: #eee8aa"&gt;Action&lt;/span&gt; &lt;span style="color: silver"&gt;=&lt;/span&gt; &lt;span style="color: #60ff60"&gt;&amp;quot;dowork&amp;quot;&lt;/span&gt;)]
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #66cdaa"&gt;Customer&lt;/span&gt; &lt;span style="color: #eee8aa"&gt;DoWork&lt;/span&gt;(&lt;span style="color: #40c4ff"&gt;string&lt;/span&gt; &lt;span style="color: #eee8aa"&gt;a&lt;/span&gt;, &lt;span style="color: #66cdaa"&gt;Customer&lt;/span&gt; &lt;span style="color: #eee8aa"&gt;c&lt;/span&gt;);
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160; }
&lt;/p&gt;
&lt;/div&gt;
&lt;h1&gt;Côté Silverlight
&lt;/h1&gt;
&lt;p&gt;
Pour fonctionner avec Silverlight, il a fallu que je corrige un bug dans les sources
de &lt;a href="http://code.google.com/p/protobuf-net" target="_blank"&gt;protobuf-net&lt;/a&gt;.
Les classes temporaires de sérialization générées par &lt;a href="http://code.google.com/p/protobuf-net" target="_blank"&gt;protobuf-net&lt;/a&gt; sont
privées et Silverlight ne permet pas de faire de réflection sur celles-ci. Il faut
les mettres en internal.
&lt;/p&gt;
&lt;h2&gt;DataContracts
&lt;/h2&gt;
&lt;p&gt;
&lt;a href="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/ProtobufferwebserviceserializationandSil_D8BC/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="image" border="0" alt="image" align="right" src="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/ProtobufferwebserviceserializationandSil_D8BC/image_thumb.png" width="158" height="205" /&gt;&lt;/a&gt;Dans
l’implémentation de mon exemple, j’ai isolé mes datacontracts dans une assembly séparée.
J’ai créé la même assembly pour Silverlight en référençant simplement les fichiers
par liens, ce qui me permet de n’avoir qu’une seule version de ces fichiers. Pour
ceux qui ne saurait pas comment faire et pour éviter de perdre 2 heures à chercher,
il suffit lorsque vous ajouter un élément à la solution de cliquer sur la petite flêche
à côté du boutton Add et de choisie Add as link. &lt;a href="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/ProtobufferwebserviceserializationandSil_D8BC/image_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/ProtobufferwebserviceserializationandSil_D8BC/image_thumb_1.png" width="198" height="87" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;h2&gt;Génération du client
&lt;/h2&gt;
&lt;p&gt;
Nous voici donc avec la même assembly que côté serveur, mais compilée au format Silverlight.
Cette assembly contenant notre interface de ServiceContract, nous allons rajouter
dans la version Silverlight la génération du client. J’ai fais cette génération par
l’utilisation des fichiers t4. Il suffit de copier coller le fichier .tt qui se trouve
dans la solution et de le nommer du nom du fichier qui contient l’interface de ServiceContract
pour que la génération s’effectue (ici ITestService.tt). La génération utilise le
FileCodeModel pour déterminer les Méthodes de l’interface à implémenter dans le client.
Le client généré contient des fonctions d’appels asynchrones et les événements completed
qui correspondent.
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;h2&gt;Utilisation
&lt;/h2&gt;
&lt;p&gt;
L’utilisation de notre client reste aussi simple que l’utilisation d’un client WCF
silverlight standard. 
&lt;/p&gt;
&lt;div style="font-family: consolas; background: black; color: #e0e0e0; font-size: 8pt"&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #40c4ff"&gt;private&lt;/span&gt; &lt;span style="color: #40c4ff"&gt;void&lt;/span&gt; &lt;span style="color: #eee8aa"&gt;Button_Click&lt;/span&gt;(&lt;span style="color: #40c4ff"&gt;object&lt;/span&gt; &lt;span style="color: #eee8aa"&gt;sender&lt;/span&gt;, &lt;span style="color: #66cdaa"&gt;RoutedEventArgs&lt;/span&gt; &lt;span style="color: #eee8aa"&gt;e&lt;/span&gt;)
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {
&lt;/p&gt;
&lt;div style="font-family: consolas; background: black; color: #e0e0e0; font-size: 8pt"&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #66cdaa"&gt;ITestServiceClient&lt;/span&gt; &lt;span style="color: #eee8aa"&gt;client&lt;/span&gt; &lt;span style="color: silver"&gt;=&lt;/span&gt; &lt;span style="color: #40c4ff"&gt;new&lt;/span&gt; &lt;span style="color: #66cdaa"&gt;ITestServiceClient&lt;/span&gt;(&lt;span style="color: #40c4ff"&gt;new&lt;/span&gt; &lt;span style="color: #66cdaa"&gt;Uri&lt;/span&gt;(&lt;span style="color: #60ff60"&gt;&amp;quot;../&amp;quot;&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;UriKind&lt;/span&gt;&lt;span style="color: silver"&gt;.&lt;/span&gt;&lt;span style="color: #eee8aa"&gt;Relative&lt;/span&gt;));
&lt;/p&gt;
&lt;/div&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #eee8aa"&gt;client&lt;/span&gt;&lt;span style="color: silver"&gt;.&lt;/span&gt;&lt;span style="color: #eee8aa"&gt;DoWorkCompleted&lt;/span&gt; &lt;span style="color: silver"&gt;+=&lt;/span&gt; &lt;span style="color: #40c4ff"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;EventHandler&lt;/span&gt;&lt;span style="color: silver"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #66cdaa"&gt;ITestServiceClient&lt;/span&gt;&lt;span style="color: silver"&gt;.&lt;/span&gt;&lt;span style="color: #66cdaa"&gt;DoWorkResultEventArgs&lt;/span&gt;&lt;span style="color: silver"&gt;&amp;gt;&lt;/span&gt;(&lt;span style="color: #eee8aa"&gt;client_DoWorkCompleted&lt;/span&gt;);
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #eee8aa"&gt;client&lt;/span&gt;&lt;span style="color: silver"&gt;.&lt;/span&gt;&lt;span style="color: #eee8aa"&gt;DoWorkAsync&lt;/span&gt;(&lt;span style="color: #60ff60"&gt;&amp;quot;aazer&amp;quot;&lt;/span&gt;, &lt;span style="color: #66cdaa"&gt;Customer&lt;/span&gt;&lt;span style="color: silver"&gt;.&lt;/span&gt;&lt;span style="color: #eee8aa"&gt;Invent&lt;/span&gt;());
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #40c4ff"&gt;void&lt;/span&gt; &lt;span style="color: #eee8aa"&gt;client_DoWorkCompleted&lt;/span&gt;(&lt;span style="color: #40c4ff"&gt;object&lt;/span&gt; &lt;span style="color: #eee8aa"&gt;sender&lt;/span&gt;, &lt;span style="color: #66cdaa"&gt;ITestServiceClient&lt;/span&gt;&lt;span style="color: silver"&gt;.&lt;/span&gt;&lt;span style="color: #66cdaa"&gt;DoWorkResultEventArgs&lt;/span&gt; &lt;span style="color: #eee8aa"&gt;e&lt;/span&gt;)
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #40c4ff"&gt;var&lt;/span&gt; &lt;span style="color: #eee8aa"&gt;r&lt;/span&gt; &lt;span style="color: silver"&gt;=&lt;/span&gt; &lt;span style="color: #eee8aa"&gt;e&lt;/span&gt;&lt;span style="color: silver"&gt;.&lt;/span&gt;&lt;span style="color: #eee8aa"&gt;Result&lt;/span&gt;;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
Il y a plusieurs façons d’instancier le client. Tout dépend d’où vos webservices se
trouvent. 
&lt;br /&gt;
Le constructeur par défaut va chercher un webservice se nommant du même nom que l’interface
de service contract sans le I se trouvant de le même dossier que votre .xap. Sur une
surcharge du constructeur, vous pouvez spécifier soit une Url donnant le dossier dans
lequel va se trouver le webservice ou alors un url d’appel direct vers le fichier
svc.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://cid-b7145a2861d183da.skydrive.live.com/self.aspx/Code/proto-buffer.7z" target="_blank"&gt;Les
sources&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ucaya.com/blog/aggbug.ashx?id=88d17f87-7a6e-49f7-929e-1c28b340ab37" /&gt;</description>
      <comments>http://www.ucaya.com/blog/CommentView,guid,88d17f87-7a6e-49f7-929e-1c28b340ab37.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://www.ucaya.com/blog/Trackback.aspx?guid=8d6d7195-d5d5-4288-9a44-4ed3a06b3374</trackback:ping>
      <pingback:server>http://www.ucaya.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.ucaya.com/blog/PermaLink,guid,8d6d7195-d5d5-4288-9a44-4ed3a06b3374.aspx</pingback:target>
      <dc:creator>Romuald Boulanger</dc:creator>
      <georss:point>47.2108230807441 -1.62322998046875</georss:point>
      <wfw:comment>http://www.ucaya.com/blog/CommentView,guid,8d6d7195-d5d5-4288-9a44-4ed3a06b3374.aspx</wfw:comment>
      <wfw:commentRss>http://www.ucaya.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=8d6d7195-d5d5-4288-9a44-4ed3a06b3374</wfw:commentRss>
      <slash:comments>2</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Et une nouvelle version pour l’application <a href="http://info.francetelevisions.fr" target="_blank">L’info
en vidéo</a>.
</p>
        <p>
Maintenant vous avez accès aux Directs !
</p>
        <p>
          <a href="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/FranceTlvisionsLinfoenvido_143B7/ftvi-2_2.png" target="_blank">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="ftvi-2" border="0" alt="ftvi-2" src="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/FranceTlvisionsLinfoenvido_143B7/ftvi-2_thumb.png" width="579" height="426" />
          </a> 
</p>
        <p>
Une nouvelle entrée “Evenements” dans le menu donne accès à tous les directs. Et lorsqu’une
catégorie du menu contient un direct, un picto rouge vous l’indique.
</p>
        <p>
          <a href="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/FranceTlvisionsLinfoenvido_143B7/ftvi-3_2.png" target="_blank">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="ftvi-3" border="0" alt="ftvi-3" src="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/FranceTlvisionsLinfoenvido_143B7/ftvi-3_thumb.png" width="578" height="429" />
          </a>
        </p>
        <img width="0" height="0" src="http://www.ucaya.com/blog/aggbug.ashx?id=8d6d7195-d5d5-4288-9a44-4ed3a06b3374" />
      </body>
      <title>France Télévisions – L’info en vidéo</title>
      <guid isPermaLink="false">http://www.ucaya.com/blog/PermaLink,guid,8d6d7195-d5d5-4288-9a44-4ed3a06b3374.aspx</guid>
      <link>http://www.ucaya.com/blog/2009/06/08/FranceT%c3%a9l%c3%a9visionsLinfoEnVid%c3%a9o.aspx</link>
      <pubDate>Mon, 08 Jun 2009 21:03:08 GMT</pubDate>
      <description>&lt;p&gt;
Et une nouvelle version pour l’application &lt;a href="http://info.francetelevisions.fr" target="_blank"&gt;L’info
en vidéo&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Maintenant vous avez accès aux Directs !
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/FranceTlvisionsLinfoenvido_143B7/ftvi-2_2.png" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="ftvi-2" border="0" alt="ftvi-2" src="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/FranceTlvisionsLinfoenvido_143B7/ftvi-2_thumb.png" width="579" height="426" /&gt;&lt;/a&gt;&amp;#160;
&lt;/p&gt;
&lt;p&gt;
Une nouvelle entrée “Evenements” dans le menu donne accès à tous les directs. Et lorsqu’une
catégorie du menu contient un direct, un picto rouge vous l’indique.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/FranceTlvisionsLinfoenvido_143B7/ftvi-3_2.png" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="ftvi-3" border="0" alt="ftvi-3" src="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/FranceTlvisionsLinfoenvido_143B7/ftvi-3_thumb.png" width="578" height="429" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ucaya.com/blog/aggbug.ashx?id=8d6d7195-d5d5-4288-9a44-4ed3a06b3374" /&gt;</description>
      <comments>http://www.ucaya.com/blog/CommentView,guid,8d6d7195-d5d5-4288-9a44-4ed3a06b3374.aspx</comments>
      <category>Silverlight</category>
    </item>
    <item>
      <trackback:ping>http://www.ucaya.com/blog/Trackback.aspx?guid=83630aaf-3b89-481a-90a4-bdefb6757ec1</trackback:ping>
      <pingback:server>http://www.ucaya.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.ucaya.com/blog/PermaLink,guid,83630aaf-3b89-481a-90a4-bdefb6757ec1.aspx</pingback:target>
      <dc:creator>Thierry Bouquain</dc:creator>
      <georss:point>47.2108230807441 -1.62322998046875</georss:point>
      <wfw:comment>http://www.ucaya.com/blog/CommentView,guid,83630aaf-3b89-481a-90a4-bdefb6757ec1.aspx</wfw:comment>
      <wfw:commentRss>http://www.ucaya.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=83630aaf-3b89-481a-90a4-bdefb6757ec1</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Comme les français ont put le voir avec <a href="http://msdn.microsoft.com/fr-fr/silverlight/dd876822.aspx" target="_blank">Roland
Garros</a>, le Smooth Streaming permet de diffuser des flux de grande qualité qui
vont s’adapter à la connexion et à la puissance de la machine et de pouvoir faire
du timeshifting (contrôle du direct) sur les emissions live.
</p>
        <h1>Smooth Streaming c’est quoi ?
</h1>
        <p>
Le smooth streaming n’est pas un format de compression de video. C’est une technologie
de diffusion qui permet de découper la vidéo et le son en morceaux de 2 secondes et
diffuser le tout par http. La vidéo étant encodé en plusieurs niveau de qualité, nous
obtenons des échantillons de différents poids qui vont être mis à disposition sur
un serveur web. 
<br />
La partie client web (<a href="http://silverlight.net/" target="_blank">silverlight</a>)
va récupérer ces différents paquets et les mettre bout à bout pour reconstituer le
flux vidéo. L’application silverlight récupérera le paquet de poids correspondant
au mieux à la qualité de la connexion à internet. 
<br />
Pour la partie diffusion en live, un ou plusieurs encodeur envoyent au serveur web
ces paquets de 2 secondes au fur et à mesure qu’ils sont reçu de la source et encodés. 
<br />
Pour silverlight 2, la vidéo est au format VLC1 et nous devrions avoir droit au H264
avec silverlight 3. 
<br />
Le découpage en paquets et la diffusion au format HTTP permettent de tirer partie
des différents Cache HTTP qui existent sur internet.
</p>
        <h2>Côté serveur
</h2>
        <p>
La diffusion des flux smooth streaming nécessitent des composants côté serveur. Actuellement,
IIS7 est la seule plateforme supportant la diffusion de ce format. Deux versions existent.
La première vous permet de diffuser des vidéos préenregistrées au format smooth streaming
et la deuxième encore en beta permet la diffusion de flux live. 
</p>
        <h2>Côté client
</h2>
        <p>
Silverlight est actuellement le seul moyen de lire de la vidéo en Smooth Streaming.
Des exemples existent pour Silverlight 2 et Silverlight 3.
</p>
        <h2>Encodeur
</h2>
        <p>
Pour encoder des vidéos préenregistrées, vous devrez passer par <a href="http://www.microsoft.com/expression/products/Overview.aspx?key=encoder" target="_blank">Microsoft
Expression Encoder SP1</a>. Pour les flux live, des encodeurs hardwares sont en cours
de développement. Pour <a href="http://msdn.microsoft.com/fr-fr/silverlight/dd876822.aspx" target="_blank">Roland
Garros</a>, c’est la société Inlet qui les a fourni. Vous pouvez cependant simuler
un flux live à partir d’une vidéo préencodée en Smooth Streaming. Allez sur le <a href="http://learn.iis.net/page.aspx/620/live-smooth-streaming-for-iis-70---getting-started/" target="_blank">site
officiel</a> et <a href="http://go.microsoft.com/?linkid=9656616" target="_blank">téléchargez
le starter kit</a>. Vous trouverez 2 exécutables PushEncoder32.exe et PushEncoder64.exe
qui poussent votre vidéo préencodée sur le point de distribution live.
</p>
        <h1>
        </h1>
        <h1>SLMedia
</h1>
        <p>
La librairie de décodage du flux smoothstreaming (Microsoft.Web.Media.SmoothStreaming.dll)
est récupérable dans le player d’exemple silverlight du <a href="http://go.microsoft.com/?linkid=9656616" target="_blank">starter
kit</a>.
</p>
        <p>
Pour cet exemple, je vais réutiliser le <a href="http://www.ucaya.com/blog/2009/06/08/SLMediaLePlayerPhotoVideoDeSLExtensions.aspx" target="_blank">VideoPlayer
d’un précédent billet</a>. 
<br />
L’assignation d’une vidéo à un MediaElement ne se fait pas de la même manière que
la video soit du smooth streaming ou non. Pour gérer ceci, la notion de VideoSourceAdapter
et VideoAdapter a été ajoutée à <a href="http://www.slextensions.net" target="_blank">SLExtensions</a>.
Le VideoSourceAdapter va instancier la bonne source en fonction de l’url de la vidéo.
La première chose à faire dans le projet est de référencer le projet SLMedia.SmoothStreaming
et d’initialiser le SmoothStreamingVideoSourceAdapter. Il suffit de rajouter la ligne
ci-dessous au constructeur de la classe App.xaml.cs.
</p>
        <div style="font-family: consolas; background: #282828; color: #e0e0e0; font-size: 10pt">
          <p style="margin: 0px">
            <span style="color: #eee8aa">SLMedia</span><span style="color: silver">.</span><span style="color: #eee8aa">SmoothStreaming</span><span style="color: silver">.</span><span style="color: #66cdaa">SmoothStreamingVideoSourceAdapter</span><span style="color: silver">.</span><span style="color: #eee8aa">Initialize</span>();
</p>
        </div>
        <p>
Ensuite, changez le binding sur le source du MediaElement et l’url de la video.
</p>
        <div style="font-family: consolas; background: #282828; color: #e0e0e0; font-size: 10pt">
          <p style="margin: 0px">
            <span style="color: #60ff60">        </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">MediaElement</span>
            <span style="color: #ffff80"> x</span>
            <span style="color: #80ffff">:</span>
            <span style="color: #ffff80">Name</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"mediaelement"</span>
          </p>
          <p style="margin: 0px">
                    <span style="color: #ffff80">slvideo</span><span style="color: #80ffff">:</span><span style="color: #ffff80">VideoSourceAdapter.Source</span><span style="color: #80ffff">="{</span><span style="color: #ff80c0">Binding</span><span style="color: #8080ff"> Path</span><span style="color: #80ffff">=</span><span style="color: #cb97ff">CurrentItem</span><span style="color: #80ffff">.</span><span style="color: #cb97ff">SourceUri</span><span style="color: #80ffff">}</span><span style="color: #80ff80">"</span></p>
          <p style="margin: 0px">
                    <span style="color: #ffff80">slvideo</span><span style="color: #80ffff">:</span><span style="color: #ffff80">VideoController.MediaElement</span><span style="color: #80ffff">="{</span><span style="color: #ff80c0">StaticResource</span><span style="color: #8080ff"> controller</span><span style="color: #80ffff">}</span><span style="color: #80ff80">"</span></p>
          <p style="margin: 0px">
                    <span style="color: #ffff80">IsMuted</span><span style="color: #80ffff">="{</span><span style="color: #ff80c0">Binding</span><span style="color: #8080ff"> Path</span><span style="color: #80ffff">=</span><span style="color: #cb97ff">IsMuted</span><span style="color: #80ffff">}</span><span style="color: #80ff80">"</span></p>
          <p style="margin: 0px">
                    <span style="color: #ffff80">Volume</span><span style="color: #80ffff">="{</span><span style="color: #ff80c0">Binding</span><span style="color: #8080ff"> Path</span><span style="color: #80ffff">=</span><span style="color: #cb97ff">Volume</span><span style="color: #80ffff">}</span><span style="color: #80ff80">"</span></p>
          <p style="margin: 0px">
                    <span style="color: #ffff80">AutoPlay</span><span style="color: #80ffff">="{</span><span style="color: #ff80c0">Binding</span><span style="color: #8080ff"> Path</span><span style="color: #80ffff">=</span><span style="color: #cb97ff">AutoPlay</span><span style="color: #80ffff">}</span><span style="color: #80ff80">"</span>    
</p>
          <p style="margin: 0px">
                    <span style="color: #80ffff">/&gt;</span></p>
          <p style="margin: 0px">
 
</p>
        </div>
        <p style="margin: 0px">
          <span style="color: #80ffff">
          </span> 
</p>
        <div style="font-family: consolas; background: #282828; color: #e0e0e0; font-size: 10pt">
          <p style="margin: 0px">
            <span style="color: #eee8aa">controller</span><span style="color: silver">.</span><span style="color: #eee8aa">Playlist</span><span style="color: silver">.</span><span style="color: #eee8aa">Add</span>(<span style="color: #60ff60">"http://localhost/live.isml/Manifest"</span>);
</p>
        </div>
        <p>
Attention, le chemin d’accès au Manifest est sensible au crossdomain. Pensez à autoriser
votre player à accéder à la video si le player n’est pas dans le même domaine (crossdomain.xml)
</p>
        <p>
Poussez votre video en live  PushEncoder64.exe http://localhost/live.isml "Big
Buck Bunny.ism" et lancez votre player. Vous devriez voir la video. Si vous voulez
un contenu préencodé, téléchargez la video <a href="http://go.microsoft.com/?linkid=9652408" target="_blank">Big
Buck Bunny ici</a>.
</p>
        <p>
Par défaut, la lecture du flux commence toujours au début de la vidéo qui a été encodée.
Si vous voulez rejoindre le direct, vous pouvez appeler la fonction GoToLive du VideoAdapter
ou créer un mediaitem de type LiveVideoItem et lui assigner sa propriété JoinLive.
</p>
        <div style="font-family: consolas; background: #282828; color: #e0e0e0; font-size: 10pt">
          <p style="margin: 0px">
        <span style="color: #40c4ff">void</span><span style="color: #eee8aa">Page_Loaded</span>(<span style="color: #40c4ff">object</span><span style="color: #eee8aa">sender</span>, <span style="color: #66cdaa">RoutedEventArgs</span><span style="color: #eee8aa">e</span>)
</p>
          <p style="margin: 0px">
        {
</p>
          <p style="margin: 0px">
            <span style="color: #eee8aa">controller</span><span style="color: silver">.</span><span style="color: #eee8aa">Playlist</span><span style="color: silver">.</span><span style="color: #eee8aa">Add</span>(<span style="color: #40c4ff">new</span><span style="color: #66cdaa">LiveVideoItem</span></p>
          <p style="margin: 0px">
            {
</p>
          <p style="margin: 0px">
                <span style="color: #eee8aa">Source</span><span style="color: silver">=</span><span style="color: #60ff60">"http://localhost/live.isml/Manifest"</span>,
</p>
          <p style="margin: 0px">
                <span style="color: #eee8aa">JoinLive</span><span style="color: silver">=</span><span style="color: #40c4ff">true</span></p>
          <p style="margin: 0px">
            });
</p>
          <p style="margin: 0px">
            <span style="color: #eee8aa">controller</span><span style="color: silver">.</span><span style="color: #eee8aa">Next</span>();
</p>
          <p style="margin: 0px">
        }
</p>
        </div>
        <br />
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <h2>la timeline pour le Live Smooth Streaming
</h2>
        <p>
Pour les événements live, les informations de position ne démarrent pas forcément
à 0. Il faut changer la déclaration des bindings du slider pour tenir compte des propriétés
Start et LivePosition.
</p>
        <div style="font-family: consolas; background: #282828; color: #e0e0e0; font-size: 10pt">
          <p style="margin: 0px">
            <span style="color: #60ff60">            </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">slec</span>
            <span style="color: #80ffff">:</span>
            <span style="color: #0080ff">Slider</span>
            <span style="color: #ffff80"> Maximum</span>
            <span style="color: #80ffff">="{</span>
            <span style="color: #ff80c0">Binding</span>
            <span style="color: #8080ff"> Path</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #cb97ff">VideoAdapter</span>
            <span style="color: #80ffff">.</span>
            <span style="color: #cb97ff">LivePosition</span>
            <span style="color: #80ffff">,</span>
            <span style="color: #8080ff"> Converter</span>
            <span style="color: #80ffff">={</span>
            <span style="color: #ff80c0">StaticResource</span>
            <span style="color: #8080ff"> timeSpanConverter</span>
            <span style="color: #80ffff">}}</span>
            <span style="color: #80ff80">"</span>
          </p>
          <p style="margin: 0px">
                        <span style="color: #ffff80">Minimum</span><span style="color: #80ffff">="{</span><span style="color: #ff80c0">Binding</span><span style="color: #8080ff"> Path</span><span style="color: #80ffff">=</span><span style="color: #cb97ff">VideoAdapter</span><span style="color: #80ffff">.</span><span style="color: #cb97ff">Start</span><span style="color: #80ffff">,</span><span style="color: #8080ff"> Converter</span><span style="color: #80ffff">={</span><span style="color: #ff80c0">StaticResource</span><span style="color: #8080ff"> timeSpanConverter</span><span style="color: #80ffff">}}</span><span style="color: #80ff80">"</span></p>
          <p style="margin: 0px">
                        <span style="color: #ffff80">MoveValue</span><span style="color: #80ffff">="{</span><span style="color: #ff80c0">Binding</span><span style="color: #8080ff"> Converter</span><span style="color: #80ffff">={</span><span style="color: #ff80c0">StaticResource</span><span style="color: #8080ff"> timeSpanConverter</span><span style="color: #80ffff">},</span><span style="color: #8080ff"> Mode</span><span style="color: #80ffff">=</span><span style="color: #cb97ff">TwoWay</span><span style="color: #80ffff">,</span><span style="color: #8080ff"> Path</span><span style="color: #80ffff">=</span><span style="color: #cb97ff">Position</span><span style="color: #80ffff">}</span><span style="color: #80ff80">"</span></p>
          <p style="margin: 0px">
                        <span style="color: #ffff80">Width</span><span style="color: #80ffff">=</span><span style="color: #80ff80">"200"</span><span style="color: #ffff80"> Margin</span><span style="color: #80ffff">=</span><span style="color: #80ff80">"20,0,0,0"</span></p>
          <p style="margin: 0px">
                        <span style="color: #80ffff">/&gt;</span></p>
        </div>
        <h3>Quelle représentation pour la timeline
</h3>
        <ol>
          <li>
Un slider simple</li>
        </ol>
        <p>
Ce contrôle est utilisé dans le majorité des players vidéos disponible sur internet.
Il se prête bien pour des vidéos de taille connues et relativement petites. Dans le
cas de diffusion de flux live, la taille du slider ne représente pas toujours la même
durée. Au bout d’une heure d’émission, amener le slider au milieu reculera d’une demi
heure alors qu’au bout d’une journée on reculera d’une demi journée. 
</p>
        <p>
          <a href="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/SLMediaetSmoothStreaming_BF51/image_16.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/SLMediaetSmoothStreaming_BF51/image_thumb_7.png" width="244" height="127" />
          </a>
        </p>
        <ol>
          <li>
Un “slider inversé”</li>
        </ol>
        <p>
Le marqueur au milieu indique la position de lecture. La barre orange indique la durée
de la vidéo. Cette barre grandit au fur et à mesure que le flux live est émis. Quand
l’utilisateur regarde en live, la barre orange s’agrandit vers la gauche et rien ne
dépasse à droite du marqueur. 
<br />
Si l’utilisateur met en pause, le barre s’agrandit à droite du marqueur montrant qu’on
est plus en live et indique la durée du décalage par rapport au live. 
<br />
Quand la lecture reprend, la barre regrandit à gauche.
</p>
        <p>
Contrairement au slider simple, ce type de contrôle permet d’avoir une échelle de
temps constante tout au long de la diffusion. Lorsqu’on déplace la timeline, c’est
la barre orange qui se déplace, le marqueur reste toujours au milieu. Peut être un
peu déroutant au départ, un utilisateur en comprendra vite la logique
</p>
        <p>
          <a href="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/SLMediaetSmoothStreaming_BF51/image_12.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/SLMediaetSmoothStreaming_BF51/image_thumb_5.png" width="244" height="154" />
          </a>
        </p>
        <ol>
          <li>
Un slider sur une ligne de temps</li>
        </ol>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
C’est ce qui a été utilisé pour <a href="http://msdn.microsoft.com/fr-fr/silverlight/dd876822.aspx" target="_blank">Roland
Garros</a>, une barre de temps représente la journée entière. La taille du slider
grandit au fur et à mesure du live. Le slider garde une échelle constante mais est
quasi invisible au départ. Le principe de déplacement du curseur est préservé.
</p>
        <p>
          <a href="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/SLMediaetSmoothStreaming_BF51/image_18.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/SLMediaetSmoothStreaming_BF51/image_thumb_8.png" width="244" height="67" />
          </a>
        </p>
        <p>
          <iframe style="border-bottom: #dde5e9 1px solid; border-left: #dde5e9 1px solid; padding-bottom: 0px; background-color: #ffffff; margin: 3px; padding-left: 0px; width: 240px; padding-right: 0px; height: 66px; border-top: #dde5e9 1px solid; border-right: #dde5e9 1px solid; padding-top: 0px" marginheight="0" src="http://cid-b7145a2861d183da.skydrive.live.com/embedrowdetail.aspx/Code/VideoPlayerSmoothStreaming.zip" frameborder="0" marginwidth="0" scrolling="no">
          </iframe>
        </p>
        <p>
N’oubliez pas de télécharger les sources de SLMedia sur le site de <a href="http://www.slextensions.net" target="_blank">slextensions</a>.
</p>
        <img width="0" height="0" src="http://www.ucaya.com/blog/aggbug.ashx?id=83630aaf-3b89-481a-90a4-bdefb6757ec1" />
      </body>
      <title>SLMedia et Smooth Streaming</title>
      <guid isPermaLink="false">http://www.ucaya.com/blog/PermaLink,guid,83630aaf-3b89-481a-90a4-bdefb6757ec1.aspx</guid>
      <link>http://www.ucaya.com/blog/2009/06/08/SLMediaEtSmoothStreaming.aspx</link>
      <pubDate>Mon, 08 Jun 2009 17:41:52 GMT</pubDate>
      <description>&lt;p&gt;
Comme les français ont put le voir avec &lt;a href="http://msdn.microsoft.com/fr-fr/silverlight/dd876822.aspx" target="_blank"&gt;Roland
Garros&lt;/a&gt;, le Smooth Streaming permet de diffuser des flux de grande qualité qui
vont s’adapter à la connexion et à la puissance de la machine et de pouvoir faire
du timeshifting (contrôle du direct) sur les emissions live.
&lt;/p&gt;
&lt;h1&gt;Smooth Streaming c’est quoi ?
&lt;/h1&gt;
&lt;p&gt;
Le smooth streaming n’est pas un format de compression de video. C’est une technologie
de diffusion qui permet de découper la vidéo et le son en morceaux de 2 secondes et
diffuser le tout par http. La vidéo étant encodé en plusieurs niveau de qualité, nous
obtenons des échantillons de différents poids qui vont être mis à disposition sur
un serveur web. 
&lt;br /&gt;
La partie client web (&lt;a href="http://silverlight.net/" target="_blank"&gt;silverlight&lt;/a&gt;)
va récupérer ces différents paquets et les mettre bout à bout pour reconstituer le
flux vidéo. L’application silverlight récupérera le paquet de poids correspondant
au mieux à la qualité de la connexion à internet. 
&lt;br /&gt;
Pour la partie diffusion en live, un ou plusieurs encodeur envoyent au serveur web
ces paquets de 2 secondes au fur et à mesure qu’ils sont reçu de la source et encodés. 
&lt;br /&gt;
Pour silverlight 2, la vidéo est au format VLC1 et nous devrions avoir droit au H264
avec silverlight 3. 
&lt;br /&gt;
Le découpage en paquets et la diffusion au format HTTP permettent de tirer partie
des différents Cache HTTP qui existent sur internet.
&lt;/p&gt;
&lt;h2&gt;Côté serveur
&lt;/h2&gt;
&lt;p&gt;
La diffusion des flux smooth streaming nécessitent des composants côté serveur. Actuellement,
IIS7 est la seule plateforme supportant la diffusion de ce format. Deux versions existent.
La première vous permet de diffuser des vidéos préenregistrées au format smooth streaming
et la deuxième encore en beta permet la diffusion de flux live. 
&lt;/p&gt;
&lt;h2&gt;Côté client
&lt;/h2&gt;
&lt;p&gt;
Silverlight est actuellement le seul moyen de lire de la vidéo en Smooth Streaming.
Des exemples existent pour Silverlight 2 et Silverlight 3.
&lt;/p&gt;
&lt;h2&gt;Encodeur
&lt;/h2&gt;
&lt;p&gt;
Pour encoder des vidéos préenregistrées, vous devrez passer par &lt;a href="http://www.microsoft.com/expression/products/Overview.aspx?key=encoder" target="_blank"&gt;Microsoft
Expression Encoder SP1&lt;/a&gt;. Pour les flux live, des encodeurs hardwares sont en cours
de développement. Pour &lt;a href="http://msdn.microsoft.com/fr-fr/silverlight/dd876822.aspx" target="_blank"&gt;Roland
Garros&lt;/a&gt;, c’est la société Inlet qui les a fourni. Vous pouvez cependant simuler
un flux live à partir d’une vidéo préencodée en Smooth Streaming. Allez sur le &lt;a href="http://learn.iis.net/page.aspx/620/live-smooth-streaming-for-iis-70---getting-started/" target="_blank"&gt;site
officiel&lt;/a&gt; et &lt;a href="http://go.microsoft.com/?linkid=9656616" target="_blank"&gt;téléchargez
le starter kit&lt;/a&gt;. Vous trouverez 2 exécutables PushEncoder32.exe et PushEncoder64.exe
qui poussent votre vidéo préencodée sur le point de distribution live.
&lt;/p&gt;
&lt;h1&gt;
&lt;/h1&gt;
&lt;h1&gt;SLMedia
&lt;/h1&gt;
&lt;p&gt;
La librairie de décodage du flux smoothstreaming (Microsoft.Web.Media.SmoothStreaming.dll)
est récupérable dans le player d’exemple silverlight du &lt;a href="http://go.microsoft.com/?linkid=9656616" target="_blank"&gt;starter
kit&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Pour cet exemple, je vais réutiliser le &lt;a href="http://www.ucaya.com/blog/2009/06/08/SLMediaLePlayerPhotoVideoDeSLExtensions.aspx" target="_blank"&gt;VideoPlayer
d’un précédent billet&lt;/a&gt;. 
&lt;br /&gt;
L’assignation d’une vidéo à un MediaElement ne se fait pas de la même manière que
la video soit du smooth streaming ou non. Pour gérer ceci, la notion de VideoSourceAdapter
et VideoAdapter a été ajoutée à &lt;a href="http://www.slextensions.net" target="_blank"&gt;SLExtensions&lt;/a&gt;.
Le VideoSourceAdapter va instancier la bonne source en fonction de l’url de la vidéo.
La première chose à faire dans le projet est de référencer le projet SLMedia.SmoothStreaming
et d’initialiser le SmoothStreamingVideoSourceAdapter. Il suffit de rajouter la ligne
ci-dessous au constructeur de la classe App.xaml.cs.
&lt;/p&gt;
&lt;div style="font-family: consolas; background: #282828; color: #e0e0e0; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #eee8aa"&gt;SLMedia&lt;/span&gt;&lt;span style="color: silver"&gt;.&lt;/span&gt;&lt;span style="color: #eee8aa"&gt;SmoothStreaming&lt;/span&gt;&lt;span style="color: silver"&gt;.&lt;/span&gt;&lt;span style="color: #66cdaa"&gt;SmoothStreamingVideoSourceAdapter&lt;/span&gt;&lt;span style="color: silver"&gt;.&lt;/span&gt;&lt;span style="color: #eee8aa"&gt;Initialize&lt;/span&gt;();
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
Ensuite, changez le binding sur le source du MediaElement et l’url de la video.
&lt;/p&gt;
&lt;div style="font-family: consolas; background: #282828; color: #e0e0e0; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;MediaElement&lt;/span&gt;&lt;span style="color: #ffff80"&gt; x&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #ffff80"&gt;Name&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;mediaelement&amp;quot;&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;slvideo&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #ffff80"&gt;VideoSourceAdapter.Source&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;Binding&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Path&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;CurrentItem&lt;/span&gt;&lt;span style="color: #80ffff"&gt;.&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;SourceUri&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;slvideo&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #ffff80"&gt;VideoController.MediaElement&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;StaticResource&lt;/span&gt;&lt;span style="color: #8080ff"&gt; controller&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;IsMuted&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;Binding&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Path&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;IsMuted&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;Volume&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;Binding&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Path&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;Volume&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;AutoPlay&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;Binding&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Path&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;AutoPlay&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160; 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #80ffff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;
&lt;/p&gt;
&lt;/div&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #80ffff"&gt;&lt;/span&gt;&amp;#160;
&lt;/p&gt;
&lt;div style="font-family: consolas; background: #282828; color: #e0e0e0; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #eee8aa"&gt;controller&lt;/span&gt;&lt;span style="color: silver"&gt;.&lt;/span&gt;&lt;span style="color: #eee8aa"&gt;Playlist&lt;/span&gt;&lt;span style="color: silver"&gt;.&lt;/span&gt;&lt;span style="color: #eee8aa"&gt;Add&lt;/span&gt;(&lt;span style="color: #60ff60"&gt;&amp;quot;http://localhost/live.isml/Manifest&amp;quot;&lt;/span&gt;);
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
Attention, le chemin d’accès au Manifest est sensible au crossdomain. Pensez à autoriser
votre player à accéder à la video si le player n’est pas dans le même domaine (crossdomain.xml)
&lt;/p&gt;
&lt;p&gt;
Poussez votre video en live&amp;#160; PushEncoder64.exe http://localhost/live.isml &amp;quot;Big
Buck Bunny.ism&amp;quot; et lancez votre player. Vous devriez voir la video. Si vous voulez
un contenu préencodé, téléchargez la video &lt;a href="http://go.microsoft.com/?linkid=9652408" target="_blank"&gt;Big
Buck Bunny ici&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Par défaut, la lecture du flux commence toujours au début de la vidéo qui a été encodée.
Si vous voulez rejoindre le direct, vous pouvez appeler la fonction GoToLive du VideoAdapter
ou créer un mediaitem de type LiveVideoItem et lui assigner sa propriété JoinLive.
&lt;/p&gt;
&lt;div style="font-family: consolas; background: #282828; color: #e0e0e0; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #40c4ff"&gt;void&lt;/span&gt; &lt;span style="color: #eee8aa"&gt;Page_Loaded&lt;/span&gt;(&lt;span style="color: #40c4ff"&gt;object&lt;/span&gt; &lt;span style="color: #eee8aa"&gt;sender&lt;/span&gt;, &lt;span style="color: #66cdaa"&gt;RoutedEventArgs&lt;/span&gt; &lt;span style="color: #eee8aa"&gt;e&lt;/span&gt;)
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #eee8aa"&gt;controller&lt;/span&gt;&lt;span style="color: silver"&gt;.&lt;/span&gt;&lt;span style="color: #eee8aa"&gt;Playlist&lt;/span&gt;&lt;span style="color: silver"&gt;.&lt;/span&gt;&lt;span style="color: #eee8aa"&gt;Add&lt;/span&gt;(&lt;span style="color: #40c4ff"&gt;new&lt;/span&gt; &lt;span style="color: #66cdaa"&gt;LiveVideoItem&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #eee8aa"&gt;Source&lt;/span&gt; &lt;span style="color: silver"&gt;=&lt;/span&gt; &lt;span style="color: #60ff60"&gt;&amp;quot;http://localhost/live.isml/Manifest&amp;quot;&lt;/span&gt;,
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #eee8aa"&gt;JoinLive&lt;/span&gt; &lt;span style="color: silver"&gt;=&lt;/span&gt; &lt;span style="color: #40c4ff"&gt;true&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; });
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #eee8aa"&gt;controller&lt;/span&gt;&lt;span style="color: silver"&gt;.&lt;/span&gt;&lt;span style="color: #eee8aa"&gt;Next&lt;/span&gt;();
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }
&lt;/p&gt;
&lt;/div&gt;
&lt;br /&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;h2&gt;la timeline pour le Live Smooth Streaming
&lt;/h2&gt;
&lt;p&gt;
Pour les événements live, les informations de position ne démarrent pas forcément
à 0. Il faut changer la déclaration des bindings du slider pour tenir compte des propriétés
Start et LivePosition.
&lt;/p&gt;
&lt;div style="font-family: consolas; background: #282828; color: #e0e0e0; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;slec&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #0080ff"&gt;Slider&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Maximum&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;Binding&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Path&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;VideoAdapter&lt;/span&gt;&lt;span style="color: #80ffff"&gt;.&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;LivePosition&lt;/span&gt;&lt;span style="color: #80ffff"&gt;,&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Converter&lt;/span&gt;&lt;span style="color: #80ffff"&gt;={&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;StaticResource&lt;/span&gt;&lt;span style="color: #8080ff"&gt; timeSpanConverter&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;Minimum&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;Binding&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Path&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;VideoAdapter&lt;/span&gt;&lt;span style="color: #80ffff"&gt;.&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;Start&lt;/span&gt;&lt;span style="color: #80ffff"&gt;,&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Converter&lt;/span&gt;&lt;span style="color: #80ffff"&gt;={&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;StaticResource&lt;/span&gt;&lt;span style="color: #8080ff"&gt; timeSpanConverter&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;MoveValue&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;Binding&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Converter&lt;/span&gt;&lt;span style="color: #80ffff"&gt;={&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;StaticResource&lt;/span&gt;&lt;span style="color: #8080ff"&gt; timeSpanConverter&lt;/span&gt;&lt;span style="color: #80ffff"&gt;},&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Mode&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;TwoWay&lt;/span&gt;&lt;span style="color: #80ffff"&gt;,&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Path&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;Position&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;Width&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;200&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Margin&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;20,0,0,0&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #80ffff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;h3&gt;Quelle représentation pour la timeline
&lt;/h3&gt;
&lt;ol&gt;
&lt;li&gt;
Un slider simple&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Ce contrôle est utilisé dans le majorité des players vidéos disponible sur internet.
Il se prête bien pour des vidéos de taille connues et relativement petites. Dans le
cas de diffusion de flux live, la taille du slider ne représente pas toujours la même
durée. Au bout d’une heure d’émission, amener le slider au milieu reculera d’une demi
heure alors qu’au bout d’une journée on reculera d’une demi journée. 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/SLMediaetSmoothStreaming_BF51/image_16.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/SLMediaetSmoothStreaming_BF51/image_thumb_7.png" width="244" height="127" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Un “slider inversé”&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
Le marqueur au milieu indique la position de lecture. La barre orange indique la durée
de la vidéo. Cette barre grandit au fur et à mesure que le flux live est émis. Quand
l’utilisateur regarde en live, la barre orange s’agrandit vers la gauche et rien ne
dépasse à droite du marqueur. 
&lt;br /&gt;
Si l’utilisateur met en pause, le barre s’agrandit à droite du marqueur montrant qu’on
est plus en live et indique la durée du décalage par rapport au live. 
&lt;br /&gt;
Quand la lecture reprend, la barre regrandit à gauche.
&lt;/p&gt;
&lt;p&gt;
Contrairement au slider simple, ce type de contrôle permet d’avoir une échelle de
temps constante tout au long de la diffusion. Lorsqu’on déplace la timeline, c’est
la barre orange qui se déplace, le marqueur reste toujours au milieu. Peut être un
peu déroutant au départ, un utilisateur en comprendra vite la logique
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/SLMediaetSmoothStreaming_BF51/image_12.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/SLMediaetSmoothStreaming_BF51/image_thumb_5.png" width="244" height="154" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
Un slider sur une ligne de temps&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
C’est ce qui a été utilisé pour &lt;a href="http://msdn.microsoft.com/fr-fr/silverlight/dd876822.aspx" target="_blank"&gt;Roland
Garros&lt;/a&gt;, une barre de temps représente la journée entière. La taille du slider
grandit au fur et à mesure du live. Le slider garde une échelle constante mais est
quasi invisible au départ. Le principe de déplacement du curseur est préservé.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/SLMediaetSmoothStreaming_BF51/image_18.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/SLMediaetSmoothStreaming_BF51/image_thumb_8.png" width="244" height="67" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;iframe style="border-bottom: #dde5e9 1px solid; border-left: #dde5e9 1px solid; padding-bottom: 0px; background-color: #ffffff; margin: 3px; padding-left: 0px; width: 240px; padding-right: 0px; height: 66px; border-top: #dde5e9 1px solid; border-right: #dde5e9 1px solid; padding-top: 0px" marginheight="0" src="http://cid-b7145a2861d183da.skydrive.live.com/embedrowdetail.aspx/Code/VideoPlayerSmoothStreaming.zip" frameborder="0" marginwidth="0" scrolling="no"&gt;
&lt;/iframe&gt;
&lt;/p&gt;
&lt;p&gt;
N’oubliez pas de télécharger les sources de SLMedia sur le site de &lt;a href="http://www.slextensions.net" target="_blank"&gt;slextensions&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ucaya.com/blog/aggbug.ashx?id=83630aaf-3b89-481a-90a4-bdefb6757ec1" /&gt;</description>
      <comments>http://www.ucaya.com/blog/CommentView,guid,83630aaf-3b89-481a-90a4-bdefb6757ec1.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://www.ucaya.com/blog/Trackback.aspx?guid=aa66f5d0-6bd2-46c5-a95f-90e05bfcf606</trackback:ping>
      <pingback:server>http://www.ucaya.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.ucaya.com/blog/PermaLink,guid,aa66f5d0-6bd2-46c5-a95f-90e05bfcf606.aspx</pingback:target>
      <dc:creator>Thierry Bouquain</dc:creator>
      <georss:point>47.2108230807441 -1.62322998046875</georss:point>
      <wfw:comment>http://www.ucaya.com/blog/CommentView,guid,aa66f5d0-6bd2-46c5-a95f-90e05bfcf606.aspx</wfw:comment>
      <wfw:commentRss>http://www.ucaya.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=aa66f5d0-6bd2-46c5-a95f-90e05bfcf606</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Les librairies SLMedia regroupent tout ce qu'il vous faut pour gérer vos galeries
photos et vidéo. Ces librairies sont séparées en plusieurs dlls gérant chacune un
type de média.
</p>
        <ul>
          <li>
SLMedia.Core : Librairie centrale prenant en charge les fonctions communes. 
</li>
          <li>
SLMedia.Picture : Librairie vous permettant de réaliser des slideshows d’images. 
</li>
          <li>
SLMedia.Deepzoom : Librairie vous permettant d’afficher des galeries deepzoom de vos
images. 
</li>
          <li>
SLMedia.Video : Librairie gérant les galeries vidéos. 
</li>
          <li>
SLMedia.SmoothStreaming : Gestion des vidéos en Smooth Streaming 
</li>
        </ul>
        <h1>Création d’un player video avec SLMedia
</h1>
        <p>
La réalisation d’un player avec SLMedia repose sur les concepts de Binding et de Behavior.
Les Bindings vont vous servir à lier les informations provenant du controller (ici
un VideoController) et les différents éléments graphiques qui vont vous permettre
d’afficher et d’agir sur votre vidéo.
</p>
        <h2>MediaController
</h2>
        <p>
Cette classe appartenant à SLMedia.Core sert de base au VideoController. Elle regroupe
les fonctionnalités communes aux différents controllers. 
</p>
        <ul>
          <li>
Gestion de la playlist (Next, Previous, IsPlaying, SelectedItem) 
</li>
          <li>
Gestion du fullscreen (IsFullscreen) 
</li>
          <li>
Gestion des progressions pour les slideshow / videos (Position, Duration) 
</li>
          <li>
Etc.. 
</li>
        </ul>
        <h2>VideoController
</h2>
        <p>
Cette classe hérite du MediaController et lui rajoute des fonctions spécifiques pour
la vidéo.
</p>
        <ul>
          <li>
MediaElement 
</li>
          <li>
Buffering 
</li>
          <li>
Support de différentes source par les VideoAdapter 
</li>
        </ul>
        <h2>Etape 1 : Affichage d’une video de la playlist
</h2>
        <p>
Dans votre page xaml, référencez le namespace correspondant à SLMedia.Video et ajouter
le VideoController aux ressources. 
<br /></p>
        <div style="font-family: consolas; background: #282828; color: #e0e0e0; font-size: 10pt">
          <p style="margin: 0px">
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">UserControl</span>
            <span style="color: #ffff80"> x</span>
            <span style="color: #80ffff">:</span>
            <span style="color: #ffff80">Class</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"VideoPlayer1.Page"</span>
          </p>
          <p style="margin: 0px">
   <span style="color: #ffff80">xmlns</span><span style="color: #80ffff">=</span><span style="color: #80ff80">"http://schemas.microsoft.com/winfx/2006/xaml/presentation"</span></p>
          <p style="margin: 0px">
   <span style="color: #ffff80">xmlns</span><span style="color: #80ffff">:</span><span style="color: #ffff80">x</span><span style="color: #80ffff">=</span><span style="color: #80ff80">"http://schemas.microsoft.com/winfx/2006/xaml"</span></p>
          <p style="margin: 0px">
   <span style="color: #ffff80">xmlns</span><span style="color: #80ffff">:</span><span style="color: #ffff80">slvideo</span><span style="color: #80ffff">=</span><span style="color: #80ff80">"clr-namespace:SLMedia.Video;assembly=SLMedia.Video"</span></p>
          <p style="margin: 0px">
   <span style="color: #80ffff">&gt;</span></p>
          <p style="margin: 0px">
            <span style="color: #60ff60">    </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">UserControl.Resources</span>
            <span style="color: #80ffff">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #60ff60">        </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">slvideo</span>
            <span style="color: #80ffff">:</span>
            <span style="color: #0080ff">VideoController</span>
            <span style="color: #ffff80"> x</span>
            <span style="color: #80ffff">:</span>
            <span style="color: #ffff80">Name</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"controller"</span>
            <span style="color: #80ffff"> /&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #60ff60">    </span>
            <span style="color: #80ffff">&lt;/</span>
            <span style="color: #0080ff">UserControl.Resources</span>
            <span style="color: #80ffff">&gt;</span>
          </p>
        </div>
        <p>
Ensuite posez un MediaElement et associez sa source avec la propriété CurrentItem
de notre controller. Le CurrentItem sera du type IMediaItem et possèdera donc une
propriété SourceUri contenant l’url de la vidéo à afficher. 
<br /></p>
        <div style="font-family: consolas; background: #282828; color: #e0e0e0; font-size: 10pt">
          <p style="margin: 0px">
            <span style="color: #60ff60">    </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">Grid</span>
            <span style="color: #ffff80"> x</span>
            <span style="color: #80ffff">:</span>
            <span style="color: #ffff80">Name</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"LayoutRoot"</span>
            <span style="color: #80ffff">
            </span>
            <span style="color: #ffff80">DataContext</span>
            <span style="color: #80ffff">="{</span>
            <span style="color: #ff80c0">Binding</span>
            <span style="color: #8080ff"> Source</span>
            <span style="color: #80ffff">={</span>
            <span style="color: #ff80c0">StaticResource</span>
            <span style="color: #8080ff"> controller</span>
            <span style="color: #80ffff">}}</span>
            <span style="color: #80ff80">" </span>
            <span style="color: #80ffff">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #60ff60">        </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">MediaElement</span>
            <span style="color: #ffff80"> x</span>
            <span style="color: #80ffff">:</span>
            <span style="color: #ffff80">Name</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"mediaelement"</span>
          </p>
          <p style="margin: 0px">
                    <span style="color: #ffff80">Source</span><span style="color: #80ffff">="{</span><span style="color: #ff80c0">Binding</span><span style="color: #8080ff"> Path</span><span style="color: #80ffff">=</span><span style="color: #cb97ff">CurrentItem</span><span style="color: #80ffff">.</span><span style="color: #cb97ff">SourceUri</span><span style="color: #80ffff">}</span><span style="color: #80ff80">"</span></p>
          <p style="margin: 0px">
                    <span style="color: #80ffff">/&gt;</span></p>
          <p style="margin: 0px">
            <span style="color: #60ff60">    </span>
            <span style="color: #80ffff">&lt;/</span>
            <span style="color: #0080ff">Grid</span>
            <span style="color: #80ffff">&gt;</span>
          </p>
        </div>
        <p>
Il ne reste plus qu’à renseigner un nouvel item dans la playlist et de le sélectionner
pour que la video se lancer. 
<br /></p>
        <div style="font-family: consolas; background: #282828; color: #e0e0e0; font-size: 10pt">
          <p style="margin: 0px">
            <span style="color: #40c4ff">using</span>
            <span style="color: #eee8aa">SLMedia</span>
            <span style="color: silver">.</span>
            <span style="color: #eee8aa">Video</span>;
</p>
          <p style="margin: 0px">
            <span style="color: #40c4ff">using</span>
            <span style="color: #eee8aa">SLMedia</span>
            <span style="color: silver">.</span>
            <span style="color: #eee8aa">Core</span>;
</p>
          <p style="margin: 0px">
 
</p>
          <p style="margin: 0px">
            <span style="color: #40c4ff">namespace</span>
            <span style="color: #eee8aa">VideoPlayer1</span>
          </p>
          <p style="margin: 0px">
{
</p>
          <p style="margin: 0px">
    <span style="color: #40c4ff">public</span><span style="color: #40c4ff">partial</span><span style="color: #40c4ff">class</span><span style="color: #66cdaa">Page</span> : <span style="color: #66cdaa">UserControl</span></p>
          <p style="margin: 0px">
    {
</p>
          <p style="margin: 0px">
        <span style="color: #40c4ff">public</span><span style="color: #eee8aa">Page</span>()
</p>
          <p style="margin: 0px">
        {
</p>
          <p style="margin: 0px">
            <span style="color: #eee8aa">InitializeComponent</span>();
</p>
          <p style="margin: 0px">
            <span style="color: #eee8aa">controller</span><span style="color: silver">=</span> (<span style="color: #66cdaa">VideoController</span>)<span style="color: #eee8aa">Resources</span>[<span style="color: #60ff60">"controller"</span>];
</p>
          <p style="margin: 0px">
 
</p>
          <p style="margin: 0px">
            <span style="color: #40c4ff">this</span><span style="color: silver">.</span><span style="color: #eee8aa">Loaded</span><span style="color: silver">+=</span><span style="color: #40c4ff">new</span><span style="color: #2b91af">RoutedEventHandler</span>(<span style="color: #eee8aa">Page_Loaded</span>);
</p>
          <p style="margin: 0px">
        }
</p>
          <p style="margin: 0px">
 
</p>
          <p style="margin: 0px">
        <span style="color: #40c4ff">void</span><span style="color: #eee8aa">Page_Loaded</span>(<span style="color: #40c4ff">object</span><span style="color: #eee8aa">sender</span>, <span style="color: #66cdaa">RoutedEventArgs</span><span style="color: #eee8aa">e</span>)
</p>
          <p style="margin: 0px">
        {
</p>
          <p style="margin: 0px">
            <span style="color: #eee8aa">controller</span><span style="color: silver">.</span><span style="color: #eee8aa">Playlist</span><span style="color: silver">.</span><span style="color: #eee8aa">Add</span>(<span style="color: #60ff60">"http://labs.ucaya.com/lake.wmv"</span>);
</p>
          <p style="margin: 0px">
            <span style="color: #eee8aa">controller</span><span style="color: silver">.</span><span style="color: #eee8aa">Next</span>();
</p>
          <p style="margin: 0px">
        }
</p>
          <p style="margin: 0px">
    }
</p>
          <p style="margin: 0px">
}
</p>
        </div>
        <p>
Pour rendre complétement opérationnel notre videocontroller, nous devons lui indiquer
quel est le MediaElement qui affiche la vidéo. De cette manière il pourra récupérer
les états de lecture, de progression et de buffering. Nous allons également lier quelques
propriétés supplémentaires qui nous permettrons de tout contrôler depuis le VideoController.
</p>
        <div style="font-family: consolas; background: #282828; color: #e0e0e0; font-size: 10pt">
          <p style="margin: 0px">
            <span style="color: #60ff60">        </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">MediaElement</span>
            <span style="color: #ffff80"> x</span>
            <span style="color: #80ffff">:</span>
            <span style="color: #ffff80">Name</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"mediaelement"</span>
          </p>
          <p style="margin: 0px">
                    <span style="color: #ffff80">Source</span><span style="color: #80ffff">="{</span><span style="color: #ff80c0">Binding</span><span style="color: #8080ff"> Path</span><span style="color: #80ffff">=</span><span style="color: #cb97ff">CurrentItem</span><span style="color: #80ffff">.</span><span style="color: #cb97ff">SourceUri</span><span style="color: #80ffff">}</span><span style="color: #80ff80">"</span></p>
          <p style="margin: 0px">
                    <span style="color: #ffff80">slvideo</span><span style="color: #80ffff">:</span><span style="color: #ffff80">VideoController.MediaElement</span><span style="color: #80ffff">="{</span><span style="color: #ff80c0">StaticResource</span><span style="color: #8080ff"> controller</span><span style="color: #80ffff">}</span><span style="color: #80ff80">"</span></p>
          <p style="margin: 0px">
                    <span style="color: #ffff80">IsMuted</span><span style="color: #80ffff">="{</span><span style="color: #ff80c0">Binding</span><span style="color: #8080ff"> Path</span><span style="color: #80ffff">=</span><span style="color: #cb97ff">IsMuted</span><span style="color: #80ffff">}</span><span style="color: #80ff80">"</span></p>
          <p style="margin: 0px">
                    <span style="color: #ffff80">Volume</span><span style="color: #80ffff">="{</span><span style="color: #ff80c0">Binding</span><span style="color: #8080ff"> Path</span><span style="color: #80ffff">=</span><span style="color: #cb97ff">Volume</span><span style="color: #80ffff">}</span><span style="color: #80ff80">"</span></p>
          <p style="margin: 0px">
                    <span style="color: #ffff80">AutoPlay</span><span style="color: #80ffff">="{</span><span style="color: #ff80c0">Binding</span><span style="color: #8080ff"> Path</span><span style="color: #80ffff">=</span><span style="color: #cb97ff">AutoPlay</span><span style="color: #80ffff">}</span><span style="color: #80ff80">"</span>    
</p>
          <p style="margin: 0px">
                    <span style="color: #80ffff">/&gt;</span></p>
        </div>
        <h2>Etape 2 : Lecture / Pause
</h2>
        <p>
L’état lecture / pause est géré dans notre controller par la propriété IsPlaying.
Un binding entre une checkbox et cette propriété permetra de contrôler facilement
l’état de lecture. 
</p>
        <div style="font-family: consolas; background: #282828; color: #e0e0e0; font-size: 10pt">
          <p style="margin: 0px">
            <span style="color: #60ff60">        </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">StackPanel</span>
            <span style="color: #ffff80"> Orientation</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"Horizontal"</span>
            <span style="color: #ffff80"> VerticalAlignment</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"Bottom"</span>
            <span style="color: #ffff80"> Background</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"#50000000"</span>
            <span style="color: #ffff80"> Margin</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"30"</span>
            <span style="color: #80ffff">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #60ff60">            </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">CheckBox</span>
            <span style="color: #ffff80"> IsChecked</span>
            <span style="color: #80ffff">="{</span>
            <span style="color: #ff80c0">Binding</span>
            <span style="color: #8080ff"> Path</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #cb97ff">IsPlaying</span>
            <span style="color: #80ffff">,</span>
            <span style="color: #8080ff"> Mode</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #cb97ff">TwoWay</span>
            <span style="color: #80ffff">}</span>
            <span style="color: #80ff80">"</span>
            <span style="color: #80ffff"> /&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #60ff60">        </span>
            <span style="color: #80ffff">&lt;/</span>
            <span style="color: #0080ff">StackPanel</span>
            <span style="color: #80ffff">&gt;</span>
          </p>
        </div>
        <p>
        </p>
        <p>
        </p>
        <h2>Etape 3 : Position / Durée
</h2>
        <p>
Un slider Bindé sur les propriétés Duration et Position fera l’affaire. Les propriétés
Duration et Position étant du type TimeSpan, nous allons utiliser un IValueConverter
pour transformer la valeur en Double.
</p>
        <div style="font-family: consolas; background: #282828; color: #e0e0e0; font-size: 10pt">
          <div style="font-family: consolas; background: #282828; color: #e0e0e0; font-size: 10pt">
            <p style="margin: 0px">
              <span style="color: #80ffff">&lt;</span>
              <span style="color: #0080ff">UserControl</span>
              <span style="color: #ffff80"> x</span>
              <span style="color: #80ffff">:</span>
              <span style="color: #ffff80">Class</span>
              <span style="color: #80ffff">=</span>
              <span style="color: #80ff80">"VideoPlayer1.Page"</span>
            </p>
            <p style="margin: 0px">
   <span style="color: #ffff80">xmlns</span><span style="color: #80ffff">=</span><span style="color: #80ff80">"http://schemas.microsoft.com/winfx/2006/xaml/presentation"</span></p>
            <p style="margin: 0px">
   <span style="color: #ffff80">xmlns</span><span style="color: #80ffff">:</span><span style="color: #ffff80">x</span><span style="color: #80ffff">=</span><span style="color: #80ff80">"http://schemas.microsoft.com/winfx/2006/xaml"</span></p>
            <p style="margin: 0px">
   <span style="color: #ffff80">xmlns</span><span style="color: #80ffff">:</span><span style="color: #ffff80">slvideo</span><span style="color: #80ffff">=</span><span style="color: #80ff80">"clr-namespace:SLMedia.Video;assembly=SLMedia.Video"</span></p>
            <p style="margin: 0px">
   <span style="color: #ffff80">xmlns</span><span style="color: #80ffff">:</span><span style="color: #ffff80">slec</span><span style="color: #80ffff">=</span><span style="color: #80ff80">"clr-namespace:SLExtensions.Controls;assembly=SLExtensions.Controls"</span></p>
            <p style="margin: 0px">
   <span style="color: #ffff80">xmlns</span><span style="color: #80ffff">:</span><span style="color: #ffff80">sled</span><span style="color: #80ffff">=</span><span style="color: #80ff80">"clr-namespace:SLExtensions.Data;assembly=SLExtensions.Data"</span></p>
            <p style="margin: 0px">
   <span style="color: #ffff80">Foreground</span><span style="color: #80ffff">=</span><span style="color: #80ff80">"White"</span></p>
            <p style="margin: 0px">
              <span style="color: #80ffff">    &gt;</span>
            </p>
            <p style="margin: 0px">
              <span style="color: #60ff60">    </span>
              <span style="color: #80ffff">&lt;</span>
              <span style="color: #0080ff">UserControl.Resources</span>
              <span style="color: #80ffff">&gt;</span>
            </p>
            <p style="margin: 0px">
              <span style="color: #60ff60">        </span>
              <span style="color: #80ffff">&lt;</span>
              <span style="color: #0080ff">slvideo</span>
              <span style="color: #80ffff">:</span>
              <span style="color: #0080ff">VideoController</span>
              <span style="color: #ffff80"> x</span>
              <span style="color: #80ffff">:</span>
              <span style="color: #ffff80">Name</span>
              <span style="color: #80ffff">=</span>
              <span style="color: #80ff80">"controller"</span>
              <span style="color: #80ffff"> /&gt;</span>
            </p>
            <p style="margin: 0px">
              <span style="color: #60ff60">        </span>
              <span style="color: #80ffff">&lt;</span>
              <span style="color: #0080ff">sled</span>
              <span style="color: #80ffff">:</span>
              <span style="color: #0080ff">TimeSpanConverter</span>
              <span style="color: #ffff80"> x</span>
              <span style="color: #80ffff">:</span>
              <span style="color: #ffff80">Name</span>
              <span style="color: #80ffff">=</span>
              <span style="color: #80ff80">"timeSpanConverter"</span>
              <span style="color: #80ffff">/&gt;</span>
            </p>
            <p style="margin: 0px">
              <span style="color: #60ff60">    </span>
              <span style="color: #80ffff">&lt;/</span>
              <span style="color: #0080ff">UserControl.Resources</span>
              <span style="color: #80ffff">&gt;</span>
            </p>
            <p style="margin: 0px">
              <span style="color: #60ff60">    </span>
              <span style="color: #80ffff">&lt;</span>
              <span style="color: #0080ff">Grid</span>
              <span style="color: #ffff80"> x</span>
              <span style="color: #80ffff">:</span>
              <span style="color: #ffff80">Name</span>
              <span style="color: #80ffff">=</span>
              <span style="color: #80ff80">"LayoutRoot"</span>
              <span style="color: #ffff80"> DataContext</span>
              <span style="color: #80ffff">="{</span>
              <span style="color: #ff80c0">Binding</span>
              <span style="color: #8080ff"> Source</span>
              <span style="color: #80ffff">={</span>
              <span style="color: #ff80c0">StaticResource</span>
              <span style="color: #8080ff"> controller</span>
              <span style="color: #80ffff">}}</span>
              <span style="color: #80ff80">"</span>
              <span style="color: #80ffff">&gt;</span>
            </p>
            <p style="margin: 0px">
              <span style="color: #60ff60">        </span>
              <span style="color: #80ffff">&lt;</span>
              <span style="color: #0080ff">MediaElement</span>
              <span style="color: #ffff80"> x</span>
              <span style="color: #80ffff">:</span>
              <span style="color: #ffff80">Name</span>
              <span style="color: #80ffff">=</span>
              <span style="color: #80ff80">"mediaelement"</span>
            </p>
            <p style="margin: 0px">
                    <span style="color: #ffff80">Source</span><span style="color: #80ffff">="{</span><span style="color: #ff80c0">Binding</span><span style="color: #8080ff"> Path</span><span style="color: #80ffff">=</span><span style="color: #cb97ff">CurrentItem</span><span style="color: #80ffff">.</span><span style="color: #cb97ff">SourceUri</span><span style="color: #80ffff">}</span><span style="color: #80ff80">"</span></p>
            <p style="margin: 0px">
                    <span style="color: #ffff80">slvideo</span><span style="color: #80ffff">:</span><span style="color: #ffff80">VideoController.MediaElement</span><span style="color: #80ffff">="{</span><span style="color: #ff80c0">StaticResource</span><span style="color: #8080ff"> controller</span><span style="color: #80ffff">}</span><span style="color: #80ff80">"</span></p>
            <p style="margin: 0px">
                    <span style="color: #ffff80">IsMuted</span><span style="color: #80ffff">="{</span><span style="color: #ff80c0">Binding</span><span style="color: #8080ff"> Path</span><span style="color: #80ffff">=</span><span style="color: #cb97ff">IsMuted</span><span style="color: #80ffff">}</span><span style="color: #80ff80">"</span></p>
            <p style="margin: 0px">
                    <span style="color: #ffff80">Volume</span><span style="color: #80ffff">="{</span><span style="color: #ff80c0">Binding</span><span style="color: #8080ff"> Path</span><span style="color: #80ffff">=</span><span style="color: #cb97ff">Volume</span><span style="color: #80ffff">}</span><span style="color: #80ff80">"</span></p>
            <p style="margin: 0px">
                    <span style="color: #ffff80">AutoPlay</span><span style="color: #80ffff">="{</span><span style="color: #ff80c0">Binding</span><span style="color: #8080ff"> Path</span><span style="color: #80ffff">=</span><span style="color: #cb97ff">AutoPlay</span><span style="color: #80ffff">}</span><span style="color: #80ff80">"</span>    
</p>
            <p style="margin: 0px">
                    <span style="color: #80ffff">/&gt;</span></p>
            <p style="margin: 0px">
              <span style="color: #60ff60">        </span>
              <span style="color: #80ffff">&lt;</span>
              <span style="color: #0080ff">StackPanel</span>
              <span style="color: #ffff80"> Orientation</span>
              <span style="color: #80ffff">=</span>
              <span style="color: #80ff80">"Horizontal"</span>
              <span style="color: #ffff80"> VerticalAlignment</span>
              <span style="color: #80ffff">=</span>
              <span style="color: #80ff80">"Bottom"</span>
              <span style="color: #ffff80"> Background</span>
              <span style="color: #80ffff">=</span>
              <span style="color: #80ff80">"#50000000"</span>
              <span style="color: #ffff80"> Margin</span>
              <span style="color: #80ffff">=</span>
              <span style="color: #80ff80">"30"</span>
              <span style="color: #80ffff">&gt;</span>
            </p>
            <p style="margin: 0px">
              <span style="color: #60ff60">            </span>
              <span style="color: #80ffff">&lt;</span>
              <span style="color: #0080ff">CheckBox</span>
              <span style="color: #ffff80"> IsChecked</span>
              <span style="color: #80ffff">="{</span>
              <span style="color: #ff80c0">Binding</span>
              <span style="color: #8080ff"> Path</span>
              <span style="color: #80ffff">=</span>
              <span style="color: #cb97ff">IsPlaying</span>
              <span style="color: #80ffff">,</span>
              <span style="color: #8080ff"> Mode</span>
              <span style="color: #80ffff">=</span>
              <span style="color: #cb97ff">TwoWay</span>
              <span style="color: #80ffff">}</span>
              <span style="color: #80ff80">"</span>
              <span style="color: #80ffff"> /&gt;</span>
            </p>
            <p style="margin: 0px">
              <span style="color: #60ff60">            </span>
              <span style="color: #80ffff">&lt;</span>
              <span style="color: #0080ff">slec</span>
              <span style="color: #80ffff">:</span>
              <span style="color: #0080ff">Slider</span>
              <span style="color: #ffff80"> Maximum</span>
              <span style="color: #80ffff">="{</span>
              <span style="color: #ff80c0">Binding</span>
              <span style="color: #8080ff"> Converter</span>
              <span style="color: #80ffff">={</span>
              <span style="color: #ff80c0">StaticResource</span>
              <span style="color: #8080ff"> timeSpanConverter</span>
              <span style="color: #80ffff">},</span>
              <span style="color: #8080ff"> Path</span>
              <span style="color: #80ffff">=</span>
              <span style="color: #cb97ff">Duration</span>
              <span style="color: #80ffff">}</span>
              <span style="color: #80ff80">"</span>
            </p>
            <p style="margin: 0px">
                        <span style="color: #ffff80">MoveValue</span><span style="color: #80ffff">="{</span><span style="color: #ff80c0">Binding</span><span style="color: #8080ff"> Converter</span><span style="color: #80ffff">={</span><span style="color: #ff80c0">StaticResource</span><span style="color: #8080ff"> timeSpanConverter</span><span style="color: #80ffff">},</span><span style="color: #8080ff"> Mode</span><span style="color: #80ffff">=</span><span style="color: #cb97ff">TwoWay</span><span style="color: #80ffff">,</span><span style="color: #8080ff"> Path</span><span style="color: #80ffff">=</span><span style="color: #cb97ff">Position</span><span style="color: #80ffff">}</span><span style="color: #80ff80">"</span></p>
            <p style="margin: 0px">
                        <span style="color: #ffff80">Width</span><span style="color: #80ffff">=</span><span style="color: #80ff80">"200"</span><span style="color: #ffff80"> Margin</span><span style="color: #80ffff">=</span><span style="color: #80ff80">"20,0,0,0"</span></p>
            <p style="margin: 0px">
                        <span style="color: #80ffff">/&gt;</span></p>
            <p style="margin: 0px">
              <span style="color: #60ff60">            </span>
              <span style="color: #80ffff">&lt;</span>
              <span style="color: #0080ff">TextBlock</span>
              <span style="color: #ffff80"> Text</span>
              <span style="color: #80ffff">="{</span>
              <span style="color: #ff80c0">Binding</span>
              <span style="color: #8080ff"> Converter</span>
              <span style="color: #80ffff">={</span>
              <span style="color: #ff80c0">StaticResource</span>
              <span style="color: #8080ff"> timeSpanConverter</span>
              <span style="color: #80ffff">},</span>
              <span style="color: #8080ff"> Path</span>
              <span style="color: #80ffff">=</span>
              <span style="color: #cb97ff">Position</span>
              <span style="color: #80ffff">}</span>
              <span style="color: #80ff80">"</span>
            </p>
            <p style="margin: 0px">
                    <span style="color: #ffff80">Margin</span><span style="color: #80ffff">=</span><span style="color: #80ff80">"20,0,0,0"</span><span style="color: #80ffff">/&gt;</span></p>
            <p style="margin: 0px">
              <span style="color: #60ff60">            </span>
              <span style="color: #80ffff">&lt;</span>
              <span style="color: #0080ff">TextBlock</span>
              <span style="color: #ffff80"> Text</span>
              <span style="color: #80ffff">=</span>
              <span style="color: #80ff80">"
/ "</span>
              <span style="color: #80ffff"> /&gt;</span>
            </p>
            <p style="margin: 0px">
              <span style="color: #60ff60">            </span>
              <span style="color: #80ffff">&lt;</span>
              <span style="color: #0080ff">TextBlock</span>
              <span style="color: #ffff80"> Text</span>
              <span style="color: #80ffff">="{</span>
              <span style="color: #ff80c0">Binding</span>
              <span style="color: #8080ff"> Converter</span>
              <span style="color: #80ffff">={</span>
              <span style="color: #ff80c0">StaticResource</span>
              <span style="color: #8080ff"> timeSpanConverter</span>
              <span style="color: #80ffff">},</span>
              <span style="color: #8080ff"> Path</span>
              <span style="color: #80ffff">=</span>
              <span style="color: #cb97ff">Duration</span>
              <span style="color: #80ffff">}</span>
              <span style="color: #80ff80">"</span>
              <span style="color: #80ffff"> /&gt;</span>
            </p>
            <p style="margin: 0px">
              <span style="color: #60ff60">        </span>
              <span style="color: #80ffff">&lt;/</span>
              <span style="color: #0080ff">StackPanel</span>
              <span style="color: #80ffff">&gt;</span>
            </p>
            <p style="margin: 0px">
              <span style="color: #60ff60">    </span>
              <span style="color: #80ffff">&lt;/</span>
              <span style="color: #0080ff">Grid</span>
              <span style="color: #80ffff">&gt;</span>
            </p>
            <p style="margin: 0px">
              <span style="color: #80ffff">&lt;/</span>
              <span style="color: #0080ff">UserControl</span>
              <span style="color: #80ffff">&gt;</span>
            </p>
          </div>
        </div>
        <p>
Si vous utilisez le slider de base de silverlight, vous noterez des problèmes lorsque
vous déplacez le curseur. Pendant que vous déplacez le curseur, la propriété Value
peut être remise à jour par le binding et le curseur donne l’impression de sauter.
</p>
        <h2>Etape 4 : Volume
</h2>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
De même que pour la position, nous allons utiliser un slider pour le volume et une
checkbox pour le mute
</p>
        <div style="font-family: consolas; background: #282828; color: #e0e0e0; font-size: 10pt">
          <p style="margin: 0px">
            <span style="color: #60ff60">            </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">CheckBox</span>
            <span style="color: #ffff80"> IsChecked</span>
            <span style="color: #80ffff">="{</span>
            <span style="color: #ff80c0">Binding</span>
            <span style="color: #8080ff"> Path</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #cb97ff">IsMuted</span>
            <span style="color: #80ffff">,</span>
            <span style="color: #8080ff"> Mode</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #cb97ff">TwoWay</span>
            <span style="color: #80ffff">}</span>
            <span style="color: #80ff80">"</span>
            <span style="color: #ffff80"> Margin</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"20,0,0,0"</span>
            <span style="color: #80ffff">/&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #60ff60">            </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">Slider</span>
            <span style="color: #ffff80"> Maximum</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"1"</span>
            <span style="color: #ffff80"> SmallChange</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"0.1"</span>
            <span style="color: #ffff80"> LargeChange</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"0.1"</span>
          </p>
          <p style="margin: 0px">
                   <span style="color: #ffff80">Value</span><span style="color: #80ffff">="{</span><span style="color: #ff80c0">Binding</span><span style="color: #8080ff"> Path</span><span style="color: #80ffff">=</span><span style="color: #cb97ff">Volume</span><span style="color: #80ffff">,</span><span style="color: #8080ff"> Mode</span><span style="color: #80ffff">=</span><span style="color: #cb97ff">TwoWay</span><span style="color: #80ffff">}</span><span style="color: #80ff80">"</span><span style="color: #ffff80"> Width</span><span style="color: #80ffff">=</span><span style="color: #80ff80">"50"</span><span style="color: #80ffff"> /&gt;</span></p>
        </div>
        <h2>Etape 5 : Buffering - Downloading
</h2>
        <p>
Encore du binding
</p>
        <div style="font-family: consolas; background: #282828; color: #e0e0e0; font-size: 10pt">
          <p style="margin: 0px">
            <span style="color: #60ff60">            </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">TextBlock</span>
            <span style="color: #ffff80"> Text</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"Buffering:"</span>
            <span style="color: #80ffff"> /&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #60ff60">            </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">TextBlock</span>
            <span style="color: #ffff80"> Text</span>
            <span style="color: #80ffff">="{</span>
            <span style="color: #ff80c0">Binding</span>
            <span style="color: #8080ff"> Path</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #cb97ff">BufferingProgress</span>
            <span style="color: #80ffff">,</span>
            <span style="color: #8080ff"> Mode</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #cb97ff">TwoWay</span>
            <span style="color: #80ffff">,</span>
            <span style="color: #8080ff"> Converter</span>
            <span style="color: #80ffff">={</span>
            <span style="color: #ff80c0">StaticResource</span>
            <span style="color: #8080ff"> strConverter</span>
            <span style="color: #80ffff">},</span>
            <span style="color: #8080ff"> ConverterParameter</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">'</span>
            <span style="color: #80ffff">{</span>0<span style="color: #80ffff">:</span><span style="color: #ff80c0">p</span><span style="color: #80ffff">}</span><span style="color: #80ff80">'</span><span style="color: #80ffff">}</span><span style="color: #80ff80">"</span><span style="color: #80ffff"> /&gt;</span></p>
          <p style="margin: 0px">
            <span style="color: #60ff60">            </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">Slider</span>
            <span style="color: #ffff80"> Maximum</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"1"</span>
          </p>
          <p style="margin: 0px">
                   <span style="color: #ffff80">Value</span><span style="color: #80ffff">="{</span><span style="color: #ff80c0">Binding</span><span style="color: #8080ff"> Path</span><span style="color: #80ffff">=</span><span style="color: #cb97ff">BufferingProgress</span><span style="color: #80ffff">,</span><span style="color: #8080ff"> Mode</span><span style="color: #80ffff">=</span><span style="color: #cb97ff">TwoWay</span><span style="color: #80ffff">}</span><span style="color: #80ff80">"</span><span style="color: #ffff80"> Width</span><span style="color: #80ffff">=</span><span style="color: #80ff80">"50"</span><span style="color: #ffff80"> IsHitTestVisible</span><span style="color: #80ffff">=</span><span style="color: #80ff80">"False"</span><span style="color: #ffff80"> Margin</span><span style="color: #80ffff">=</span><span style="color: #80ff80">"5,0,0,0"</span><span style="color: #80ffff">/&gt;</span></p>
          <p style="margin: 0px">
 
</p>
          <p style="margin: 0px">
            <span style="color: #60ff60">            </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">TextBlock</span>
            <span style="color: #ffff80"> Text</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"Downloading:"</span>
            <span style="color: #ffff80"> Margin</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"20,0,0,0"</span>
            <span style="color: #80ffff">/&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #60ff60">            </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">TextBlock</span>
            <span style="color: #ffff80"> Text</span>
            <span style="color: #80ffff">="{</span>
            <span style="color: #ff80c0">Binding</span>
            <span style="color: #8080ff"> Path</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #cb97ff">DownloadProgress</span>
            <span style="color: #80ffff">,</span>
            <span style="color: #8080ff"> Mode</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #cb97ff">TwoWay</span>
            <span style="color: #80ffff">,</span>
            <span style="color: #8080ff"> Converter</span>
            <span style="color: #80ffff">={</span>
            <span style="color: #ff80c0">StaticResource</span>
            <span style="color: #8080ff"> strConverter</span>
            <span style="color: #80ffff">},</span>
            <span style="color: #8080ff"> ConverterParameter</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">'</span>
            <span style="color: #80ffff">{</span>0<span style="color: #80ffff">:</span><span style="color: #ff80c0">p</span><span style="color: #80ffff">}</span><span style="color: #80ff80">'</span><span style="color: #80ffff">}</span><span style="color: #80ff80">"</span><span style="color: #80ffff"> /&gt;</span></p>
          <p style="margin: 0px">
            <span style="color: #60ff60">            </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">Slider</span>
            <span style="color: #ffff80"> Maximum</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"1"</span>
          </p>
          <p style="margin: 0px">
                   <span style="color: #ffff80">Value</span><span style="color: #80ffff">="{</span><span style="color: #ff80c0">Binding</span><span style="color: #8080ff"> Path</span><span style="color: #80ffff">=</span><span style="color: #cb97ff">DownloadProgress</span><span style="color: #80ffff">,</span><span style="color: #8080ff"> Mode</span><span style="color: #80ffff">=</span><span style="color: #cb97ff">TwoWay</span><span style="color: #80ffff">}</span><span style="color: #80ff80">"</span><span style="color: #ffff80"> Width</span><span style="color: #80ffff">=</span><span style="color: #80ff80">"50"</span><span style="color: #ffff80"> IsHitTestVisible</span><span style="color: #80ffff">=</span><span style="color: #80ff80">"False"</span></p>
          <p style="margin: 0px">
                   <span style="color: #ffff80">Margin</span><span style="color: #80ffff">=</span><span style="color: #80ff80">"5,0,0,0"</span><span style="color: #80ffff">/&gt;</span></p>
        </div>
        <h2>Etape 6 : Gestion des états visuels
</h2>
        <p>
Le VideoController centralise les propriétés de notre player video. Il est possible
de changer l’état visuel de nos contrôles en fonction des propriétés du VideoController.
Nous allons utiliser le behaviors fournis par SLExtensions pour mapper ces propriétés
à nos VisualStates.
</p>
        <p>
        </p>
        <div style="font-family: consolas; background: #282828; color: #e0e0e0; font-size: 10pt">
          <p style="margin: 0px">
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">UserControl</span>
            <span style="color: #ffff80"> x</span>
            <span style="color: #80ffff">:</span>
            <span style="color: #ffff80">Class</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"VideoPlayer1.Page"</span>
          </p>
          <p style="margin: 0px">
   <span style="color: #ffff80">xmlns</span><span style="color: #80ffff">=</span><span style="color: #80ff80">"http://schemas.microsoft.com/winfx/2006/xaml/presentation"</span></p>
          <p style="margin: 0px">
   <span style="color: #ffff80">xmlns</span><span style="color: #80ffff">:</span><span style="color: #ffff80">x</span><span style="color: #80ffff">=</span><span style="color: #80ff80">"http://schemas.microsoft.com/winfx/2006/xaml"</span></p>
          <p style="margin: 0px">
   <span style="color: #ffff80">xmlns</span><span style="color: #80ffff">:</span><span style="color: #ffff80">slvideo</span><span style="color: #80ffff">=</span><span style="color: #80ff80">"clr-namespace:SLMedia.Video;assembly=SLMedia.Video"</span></p>
          <p style="margin: 0px">
   <span style="color: #ffff80">xmlns</span><span style="color: #80ffff">:</span><span style="color: #ffff80">slec</span><span style="color: #80ffff">=</span><span style="color: #80ff80">"clr-namespace:SLExtensions.Controls;assembly=SLExtensions.Controls"</span></p>
          <p style="margin: 0px">
   <span style="color: #ffff80">xmlns</span><span style="color: #80ffff">:</span><span style="color: #ffff80">sled</span><span style="color: #80ffff">=</span><span style="color: #80ff80">"clr-namespace:SLExtensions.Data;assembly=SLExtensions.Data"</span></p>
          <p style="margin: 0px">
 
</p>
          <p style="margin: 0px">
   <span style="color: #ffff80">xmlns</span><span style="color: #80ffff">:</span><span style="color: #ffff80">inter</span><span style="color: #80ffff">=</span><span style="color: #80ff80">"clr-namespace:Microsoft.Expression.Interactivity;assembly=Microsoft.Expression.Interactivity"</span></p>
          <p style="margin: 0px">
   <span style="color: #ffff80">xmlns</span><span style="color: #80ffff">:</span><span style="color: #ffff80">slint</span><span style="color: #80ffff">=</span><span style="color: #80ff80">"clr-namespace:SLExtensions.Interactivity;assembly=SLExtensions.Interactivity"</span></p>
          <p style="margin: 0px">
 
</p>
          <p style="margin: 0px">
   <span style="color: #ffff80">xmlns</span><span style="color: #80ffff">:</span><span style="color: #ffff80">vsm</span><span style="color: #80ffff">=</span><span style="color: #80ff80">"clr-namespace:System.Windows;assembly=System.Windows"</span></p>
          <p style="margin: 0px">
 
</p>
          <p style="margin: 0px">
   <span style="color: #ffff80">Foreground</span><span style="color: #80ffff">=</span><span style="color: #80ff80">"White"</span></p>
          <p style="margin: 0px">
            <span style="color: #80ffff">    &gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #60ff60">    </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">UserControl.Resources</span>
            <span style="color: #80ffff">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #60ff60">        </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">slvideo</span>
            <span style="color: #80ffff">:</span>
            <span style="color: #0080ff">VideoController</span>
            <span style="color: #ffff80"> x</span>
            <span style="color: #80ffff">:</span>
            <span style="color: #ffff80">Name</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"controller"</span>
            <span style="color: #80ffff"> /&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #60ff60">        </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">sled</span>
            <span style="color: #80ffff">:</span>
            <span style="color: #0080ff">TimeSpanConverter</span>
            <span style="color: #ffff80"> x</span>
            <span style="color: #80ffff">:</span>
            <span style="color: #ffff80">Name</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"timeSpanConverter"</span>
            <span style="color: #80ffff">/&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #60ff60">        </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">sled</span>
            <span style="color: #80ffff">:</span>
            <span style="color: #0080ff">StringFormatConverter</span>
            <span style="color: #ffff80"> x</span>
            <span style="color: #80ffff">:</span>
            <span style="color: #ffff80">Name</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"strConverter"</span>
            <span style="color: #80ffff">/&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #60ff60">    </span>
            <span style="color: #80ffff">&lt;/</span>
            <span style="color: #0080ff">UserControl.Resources</span>
            <span style="color: #80ffff">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #60ff60">    </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">Grid</span>
            <span style="color: #ffff80"> x</span>
            <span style="color: #80ffff">:</span>
            <span style="color: #ffff80">Name</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"LayoutRoot"</span>
            <span style="color: #ffff80"> DataContext</span>
            <span style="color: #80ffff">="{</span>
            <span style="color: #ff80c0">Binding</span>
            <span style="color: #8080ff"> Source</span>
            <span style="color: #80ffff">={</span>
            <span style="color: #ff80c0">StaticResource</span>
            <span style="color: #8080ff"> controller</span>
            <span style="color: #80ffff">}}</span>
            <span style="color: #80ff80">"</span>
            <span style="color: #80ffff">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #60ff60">        </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">vsm</span>
            <span style="color: #80ffff">:</span>
            <span style="color: #0080ff">VisualStateManager.VisualStateGroups</span>
            <span style="color: #80ffff">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #60ff60">            </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">vsm</span>
            <span style="color: #80ffff">:</span>
            <span style="color: #0080ff">VisualStateGroup</span>
            <span style="color: #ffff80"> x</span>
            <span style="color: #80ffff">:</span>
            <span style="color: #ffff80">Name</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"PlayingStates"</span>
            <span style="color: #80ffff">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #60ff60">                </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">vsm</span>
            <span style="color: #80ffff">:</span>
            <span style="color: #0080ff">VisualStateGroup.Transitions</span>
            <span style="color: #80ffff">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #60ff60">                    </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">vsm</span>
            <span style="color: #80ffff">:</span>
            <span style="color: #0080ff">VisualTransition</span>
            <span style="color: #ffff80"> GeneratedDuration</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"00:00:00.3000000"</span>
            <span style="color: #80ffff">/&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #60ff60">                </span>
            <span style="color: #80ffff">&lt;/</span>
            <span style="color: #0080ff">vsm</span>
            <span style="color: #80ffff">:</span>
            <span style="color: #0080ff">VisualStateGroup.Transitions</span>
            <span style="color: #80ffff">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #60ff60">                </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">vsm</span>
            <span style="color: #80ffff">:</span>
            <span style="color: #0080ff">VisualState</span>
            <span style="color: #ffff80"> x</span>
            <span style="color: #80ffff">:</span>
            <span style="color: #ffff80">Name</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"Playing"</span>
            <span style="color: #80ffff">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #60ff60">                    </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">Storyboard</span>
            <span style="color: #80ffff">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #60ff60">                        </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">ColorAnimationUsingKeyFrames</span>
            <span style="color: #ffff80"> BeginTime</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"00:00:00"</span>
            <span style="color: #ffff80"> Duration</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"00:00:00.0010000"</span>
            <span style="color: #ffff80"> Storyboard.TargetName</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"stackPanel"</span>
            <span style="color: #ffff80"> Storyboard.TargetProperty</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"(Panel.Background).(SolidColorBrush.Color)"</span>
            <span style="color: #80ffff">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #60ff60">                            </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">SplineColorKeyFrame</span>
            <span style="color: #ffff80"> KeyTime</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"00:00:00"</span>
            <span style="color: #ffff80"> Value</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"#5039FF00"</span>
            <span style="color: #80ffff">/&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #60ff60">                        </span>
            <span style="color: #80ffff">&lt;/</span>
            <span style="color: #0080ff">ColorAnimationUsingKeyFrames</span>
            <span style="color: #80ffff">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #60ff60">                    </span>
            <span style="color: #80ffff">&lt;/</span>
            <span style="color: #0080ff">Storyboard</span>
            <span style="color: #80ffff">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #60ff60">                </span>
            <span style="color: #80ffff">&lt;/</span>
            <span style="color: #0080ff">vsm</span>
            <span style="color: #80ffff">:</span>
            <span style="color: #0080ff">VisualState</span>
            <span style="color: #80ffff">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #60ff60">                </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">vsm</span>
            <span style="color: #80ffff">:</span>
            <span style="color: #0080ff">VisualState</span>
            <span style="color: #ffff80"> x</span>
            <span style="color: #80ffff">:</span>
            <span style="color: #ffff80">Name</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"Paused"</span>
            <span style="color: #80ffff">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #60ff60">                    </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">Storyboard</span>
            <span style="color: #80ffff">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #60ff60">                        </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">ColorAnimationUsingKeyFrames</span>
            <span style="color: #ffff80"> BeginTime</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"00:00:00"</span>
            <span style="color: #ffff80"> Duration</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"00:00:00.0010000"</span>
            <span style="color: #ffff80"> Storyboard.TargetName</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"stackPanel"</span>
            <span style="color: #ffff80"> Storyboard.TargetProperty</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"(Panel.Background).(SolidColorBrush.Color)"</span>
            <span style="color: #80ffff">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #60ff60">                            </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">SplineColorKeyFrame</span>
            <span style="color: #ffff80"> KeyTime</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"00:00:00"</span>
            <span style="color: #ffff80"> Value</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"#50D56700"</span>
            <span style="color: #80ffff">/&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #60ff60">                        </span>
            <span style="color: #80ffff">&lt;/</span>
            <span style="color: #0080ff">ColorAnimationUsingKeyFrames</span>
            <span style="color: #80ffff">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #60ff60">                    </span>
            <span style="color: #80ffff">&lt;/</span>
            <span style="color: #0080ff">Storyboard</span>
            <span style="color: #80ffff">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #60ff60">                </span>
            <span style="color: #80ffff">&lt;/</span>
            <span style="color: #0080ff">vsm</span>
            <span style="color: #80ffff">:</span>
            <span style="color: #0080ff">VisualState</span>
            <span style="color: #80ffff">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #60ff60">            </span>
            <span style="color: #80ffff">&lt;/</span>
            <span style="color: #0080ff">vsm</span>
            <span style="color: #80ffff">:</span>
            <span style="color: #0080ff">VisualStateGroup</span>
            <span style="color: #80ffff">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #60ff60">        </span>
            <span style="color: #80ffff">&lt;/</span>
            <span style="color: #0080ff">vsm</span>
            <span style="color: #80ffff">:</span>
            <span style="color: #0080ff">VisualStateManager.VisualStateGroups</span>
            <span style="color: #80ffff">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #60ff60">        </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">inter</span>
            <span style="color: #80ffff">:</span>
            <span style="color: #0080ff">Interaction.Behaviors</span>
            <span style="color: #80ffff">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #60ff60">            </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">slint</span>
            <span style="color: #80ffff">:</span>
            <span style="color: #0080ff">MapState</span>
            <span style="color: #ffff80"> Source</span>
            <span style="color: #80ffff">="{</span>
            <span style="color: #ff80c0">StaticResource</span>
            <span style="color: #8080ff"> controller</span>
            <span style="color: #80ffff">}</span>
            <span style="color: #80ff80">"</span>
            <span style="color: #ffff80"> Property</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"IsPlaying"</span>
            <span style="color: #80ffff"> &gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #60ff60">                </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">slint</span>
            <span style="color: #80ffff">:</span>
            <span style="color: #0080ff">MapStateMapping</span>
            <span style="color: #ffff80"> StateName</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"Playing"</span>
            <span style="color: #ffff80"> Value</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"true"</span>
            <span style="color: #80ffff">/&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #60ff60">                </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">slint</span>
            <span style="color: #80ffff">:</span>
            <span style="color: #0080ff">MapStateMapping</span>
            <span style="color: #ffff80"> StateName</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"Paused"</span>
            <span style="color: #ffff80"> Value</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"false"</span>
            <span style="color: #80ffff">/&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #60ff60">            </span>
            <span style="color: #80ffff">&lt;/</span>
            <span style="color: #0080ff">slint</span>
            <span style="color: #80ffff">:</span>
            <span style="color: #0080ff">MapState</span>
            <span style="color: #80ffff">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #60ff60">        </span>
            <span style="color: #80ffff">&lt;/</span>
            <span style="color: #0080ff">inter</span>
            <span style="color: #80ffff">:</span>
            <span style="color: #0080ff">Interaction.Behaviors</span>
            <span style="color: #80ffff">&gt;</span>
          </p>
          <p style="margin: 0px">
 
</p>
          <p style="margin: 0px">
            <span style="color: #60ff60">        </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">MediaElement</span>
            <span style="color: #ffff80"> x</span>
            <span style="color: #80ffff">:</span>
            <span style="color: #ffff80">Name</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"mediaelement"</span>
          </p>
          <p style="margin: 0px">
                    <span style="color: #ffff80">Source</span><span style="color: #80ffff">="{</span><span style="color: #ff80c0">Binding</span><span style="color: #8080ff"> Path</span><span style="color: #80ffff">=</span><span style="color: #cb97ff">CurrentItem</span><span style="color: #80ffff">.</span><span style="color: #cb97ff">SourceUri</span><span style="color: #80ffff">}</span><span style="color: #80ff80">"</span></p>
          <p style="margin: 0px">
                    <span style="color: #ffff80">slvideo</span><span style="color: #80ffff">:</span><span style="color: #ffff80">VideoController.MediaElement</span><span style="color: #80ffff">="{</span><span style="color: #ff80c0">StaticResource</span><span style="color: #8080ff"> controller</span><span style="color: #80ffff">}</span><span style="color: #80ff80">"</span></p>
          <p style="margin: 0px">
                    <span style="color: #ffff80">IsMuted</span><span style="color: #80ffff">="{</span><span style="color: #ff80c0">Binding</span><span style="color: #8080ff"> Path</span><span style="color: #80ffff">=</span><span style="color: #cb97ff">IsMuted</span><span style="color: #80ffff">}</span><span style="color: #80ff80">"</span></p>
          <p style="margin: 0px">
                    <span style="color: #ffff80">Volume</span><span style="color: #80ffff">="{</span><span style="color: #ff80c0">Binding</span><span style="color: #8080ff"> Path</span><span style="color: #80ffff">=</span><span style="color: #cb97ff">Volume</span><span style="color: #80ffff">}</span><span style="color: #80ff80">"</span></p>
          <p style="margin: 0px">
                    <span style="color: #ffff80">AutoPlay</span><span style="color: #80ffff">="{</span><span style="color: #ff80c0">Binding</span><span style="color: #8080ff"> Path</span><span style="color: #80ffff">=</span><span style="color: #cb97ff">AutoPlay</span><span style="color: #80ffff">}</span><span style="color: #80ff80">"</span>    
</p>
          <p style="margin: 0px">
                    <span style="color: #80ffff">/&gt;</span></p>
          <p style="margin: 0px">
            <span style="color: #60ff60">        </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">StackPanel</span>
            <span style="color: #ffff80"> Orientation</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"Horizontal"</span>
            <span style="color: #ffff80"> VerticalAlignment</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"Bottom"</span>
            <span style="color: #ffff80"> Background</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"#50000000"</span>
            <span style="color: #ffff80"> Margin</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"30"</span>
            <span style="color: #ffff80"> x</span>
            <span style="color: #80ffff">:</span>
            <span style="color: #ffff80">Name</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"stackPanel"</span>
            <span style="color: #80ffff">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #60ff60">            </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">CheckBox</span>
            <span style="color: #ffff80"> IsChecked</span>
            <span style="color: #80ffff">="{</span>
            <span style="color: #ff80c0">Binding</span>
            <span style="color: #8080ff"> Path</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #cb97ff">IsPlaying</span>
            <span style="color: #80ffff">,</span>
            <span style="color: #8080ff"> Mode</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #cb97ff">TwoWay</span>
            <span style="color: #80ffff">}</span>
            <span style="color: #80ff80">"</span>
            <span style="color: #80ffff"> /&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #60ff60">            </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">slec</span>
            <span style="color: #80ffff">:</span>
            <span style="color: #0080ff">Slider</span>
            <span style="color: #ffff80"> Maximum</span>
            <span style="color: #80ffff">="{</span>
            <span style="color: #ff80c0">Binding</span>
            <span style="color: #8080ff"> Converter</span>
            <span style="color: #80ffff">={</span>
            <span style="color: #ff80c0">StaticResource</span>
            <span style="color: #8080ff"> timeSpanConverter</span>
            <span style="color: #80ffff">},</span>
            <span style="color: #8080ff"> Path</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #cb97ff">Duration</span>
            <span style="color: #80ffff">}</span>
            <span style="color: #80ff80">"</span>
          </p>
          <p style="margin: 0px">
                        <span style="color: #ffff80">MoveValue</span><span style="color: #80ffff">="{</span><span style="color: #ff80c0">Binding</span><span style="color: #8080ff"> Converter</span><span style="color: #80ffff">={</span><span style="color: #ff80c0">StaticResource</span><span style="color: #8080ff"> timeSpanConverter</span><span style="color: #80ffff">},</span><span style="color: #8080ff"> Mode</span><span style="color: #80ffff">=</span><span style="color: #cb97ff">TwoWay</span><span style="color: #80ffff">,</span><span style="color: #8080ff"> Path</span><span style="color: #80ffff">=</span><span style="color: #cb97ff">Position</span><span style="color: #80ffff">}</span><span style="color: #80ff80">"</span></p>
          <p style="margin: 0px">
                        <span style="color: #ffff80">Width</span><span style="color: #80ffff">=</span><span style="color: #80ff80">"200"</span><span style="color: #ffff80"> Margin</span><span style="color: #80ffff">=</span><span style="color: #80ff80">"20,0,0,0"</span></p>
          <p style="margin: 0px">
                        <span style="color: #80ffff">/&gt;</span></p>
          <p style="margin: 0px">
            <span style="color: #60ff60">            </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">TextBlock</span>
            <span style="color: #ffff80"> Text</span>
            <span style="color: #80ffff">="{</span>
            <span style="color: #ff80c0">Binding</span>
            <span style="color: #8080ff"> Converter</span>
            <span style="color: #80ffff">={</span>
            <span style="color: #ff80c0">StaticResource</span>
            <span style="color: #8080ff"> timeSpanConverter</span>
            <span style="color: #80ffff">},</span>
            <span style="color: #8080ff"> Path</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #cb97ff">Position</span>
            <span style="color: #80ffff">}</span>
            <span style="color: #80ff80">"</span>
          </p>
          <p style="margin: 0px">
                    <span style="color: #ffff80">Margin</span><span style="color: #80ffff">=</span><span style="color: #80ff80">"20,0,0,0"</span><span style="color: #80ffff">/&gt;</span></p>
          <p style="margin: 0px">
            <span style="color: #60ff60">            </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">TextBlock</span>
            <span style="color: #ffff80"> Text</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"
/ "</span>
            <span style="color: #80ffff"> /&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #60ff60">            </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">TextBlock</span>
            <span style="color: #ffff80"> Text</span>
            <span style="color: #80ffff">="{</span>
            <span style="color: #ff80c0">Binding</span>
            <span style="color: #8080ff"> Converter</span>
            <span style="color: #80ffff">={</span>
            <span style="color: #ff80c0">StaticResource</span>
            <span style="color: #8080ff"> timeSpanConverter</span>
            <span style="color: #80ffff">},</span>
            <span style="color: #8080ff"> Path</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #cb97ff">Duration</span>
            <span style="color: #80ffff">}</span>
            <span style="color: #80ff80">"</span>
            <span style="color: #80ffff"> /&gt;</span>
          </p>
          <p style="margin: 0px">
 
</p>
          <p style="margin: 0px">
            <span style="color: #60ff60">            </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">CheckBox</span>
            <span style="color: #ffff80"> IsChecked</span>
            <span style="color: #80ffff">="{</span>
            <span style="color: #ff80c0">Binding</span>
            <span style="color: #8080ff"> Path</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #cb97ff">IsMuted</span>
            <span style="color: #80ffff">,</span>
            <span style="color: #8080ff"> Mode</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #cb97ff">TwoWay</span>
            <span style="color: #80ffff">}</span>
            <span style="color: #80ff80">"</span>
            <span style="color: #ffff80"> Margin</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"20,0,0,0"</span>
            <span style="color: #80ffff">/&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #60ff60">            </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">Slider</span>
            <span style="color: #ffff80"> Maximum</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"1"</span>
            <span style="color: #ffff80"> SmallChange</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"0.1"</span>
            <span style="color: #ffff80"> LargeChange</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"0.1"</span>
          </p>
          <p style="margin: 0px">
                   <span style="color: #ffff80">Value</span><span style="color: #80ffff">="{</span><span style="color: #ff80c0">Binding</span><span style="color: #8080ff"> Path</span><span style="color: #80ffff">=</span><span style="color: #cb97ff">Volume</span><span style="color: #80ffff">,</span><span style="color: #8080ff"> Mode</span><span style="color: #80ffff">=</span><span style="color: #cb97ff">TwoWay</span><span style="color: #80ffff">}</span><span style="color: #80ff80">"</span><span style="color: #ffff80"> Width</span><span style="color: #80ffff">=</span><span style="color: #80ff80">"50"</span><span style="color: #80ffff"> /&gt;</span></p>
          <p style="margin: 0px">
 
</p>
          <p style="margin: 0px">
            <span style="color: #60ff60">            </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">TextBlock</span>
            <span style="color: #ffff80"> Text</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"Buffering:"</span>
            <span style="color: #80ffff"> /&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #60ff60">            </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">TextBlock</span>
            <span style="color: #ffff80"> Text</span>
            <span style="color: #80ffff">="{</span>
            <span style="color: #ff80c0">Binding</span>
            <span style="color: #8080ff"> Path</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #cb97ff">BufferingProgress</span>
            <span style="color: #80ffff">,</span>
            <span style="color: #8080ff"> Mode</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #cb97ff">TwoWay</span>
            <span style="color: #80ffff">,</span>
            <span style="color: #8080ff"> Converter</span>
            <span style="color: #80ffff">={</span>
            <span style="color: #ff80c0">StaticResource</span>
            <span style="color: #8080ff"> strConverter</span>
            <span style="color: #80ffff">},</span>
            <span style="color: #8080ff"> ConverterParameter</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">'</span>
            <span style="color: #80ffff">{</span>0<span style="color: #80ffff">:</span><span style="color: #ff80c0">p</span><span style="color: #80ffff">}</span><span style="color: #80ff80">'</span><span style="color: #80ffff">}</span><span style="color: #80ff80">"</span><span style="color: #80ffff"> /&gt;</span></p>
          <p style="margin: 0px">
            <span style="color: #60ff60">            </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">Slider</span>
            <span style="color: #ffff80"> Maximum</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"1"</span>
          </p>
          <p style="margin: 0px">
                   <span style="color: #ffff80">Value</span><span style="color: #80ffff">="{</span><span style="color: #ff80c0">Binding</span><span style="color: #8080ff"> Path</span><span style="color: #80ffff">=</span><span style="color: #cb97ff">BufferingProgress</span><span style="color: #80ffff">,</span><span style="color: #8080ff"> Mode</span><span style="color: #80ffff">=</span><span style="color: #cb97ff">TwoWay</span><span style="color: #80ffff">}</span><span style="color: #80ff80">"</span><span style="color: #ffff80"> Width</span><span style="color: #80ffff">=</span><span style="color: #80ff80">"50"</span><span style="color: #ffff80"> IsHitTestVisible</span><span style="color: #80ffff">=</span><span style="color: #80ff80">"False"</span><span style="color: #ffff80"> Margin</span><span style="color: #80ffff">=</span><span style="color: #80ff80">"5,0,0,0"</span><span style="color: #80ffff">/&gt;</span></p>
          <p style="margin: 0px">
 
</p>
          <p style="margin: 0px">
            <span style="color: #60ff60">            </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">TextBlock</span>
            <span style="color: #ffff80"> Text</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"Downloading:"</span>
            <span style="color: #ffff80"> Margin</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"20,0,0,0"</span>
            <span style="color: #80ffff">/&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #60ff60">            </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">TextBlock</span>
            <span style="color: #ffff80"> Text</span>
            <span style="color: #80ffff">="{</span>
            <span style="color: #ff80c0">Binding</span>
            <span style="color: #8080ff"> Path</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #cb97ff">DownloadProgress</span>
            <span style="color: #80ffff">,</span>
            <span style="color: #8080ff"> Mode</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #cb97ff">TwoWay</span>
            <span style="color: #80ffff">,</span>
            <span style="color: #8080ff"> Converter</span>
            <span style="color: #80ffff">={</span>
            <span style="color: #ff80c0">StaticResource</span>
            <span style="color: #8080ff"> strConverter</span>
            <span style="color: #80ffff">},</span>
            <span style="color: #8080ff"> ConverterParameter</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">'</span>
            <span style="color: #80ffff">{</span>0<span style="color: #80ffff">:</span><span style="color: #ff80c0">p</span><span style="color: #80ffff">}</span><span style="color: #80ff80">'</span><span style="color: #80ffff">}</span><span style="color: #80ff80">"</span><span style="color: #80ffff"> /&gt;</span></p>
          <p style="margin: 0px">
            <span style="color: #60ff60">            </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">Slider</span>
            <span style="color: #ffff80"> Maximum</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"1"</span>
          </p>
          <p style="margin: 0px">
                   <span style="color: #ffff80">Value</span><span style="color: #80ffff">="{</span><span style="color: #ff80c0">Binding</span><span style="color: #8080ff"> Path</span><span style="color: #80ffff">=</span><span style="color: #cb97ff">DownloadProgress</span><span style="color: #80ffff">,</span><span style="color: #8080ff"> Mode</span><span style="color: #80ffff">=</span><span style="color: #cb97ff">TwoWay</span><span style="color: #80ffff">}</span><span style="color: #80ff80">"</span><span style="color: #ffff80"> Width</span><span style="color: #80ffff">=</span><span style="color: #80ff80">"50"</span><span style="color: #ffff80"> IsHitTestVisible</span><span style="color: #80ffff">=</span><span style="color: #80ff80">"False"</span></p>
          <p style="margin: 0px">
                   <span style="color: #ffff80">Margin</span><span style="color: #80ffff">=</span><span style="color: #80ff80">"5,0,0,0"</span><span style="color: #80ffff">/&gt;</span></p>
          <p style="margin: 0px">
 
</p>
          <p style="margin: 0px">
            <span style="color: #60ff60">            </span>
            <span style="color: #80ffff">&lt;</span>
            <span style="color: #0080ff">CheckBox</span>
            <span style="color: #ffff80"> IsChecked</span>
            <span style="color: #80ffff">="{</span>
            <span style="color: #ff80c0">Binding</span>
            <span style="color: #8080ff"> Path</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #cb97ff">IsFullscreen</span>
            <span style="color: #80ffff">,</span>
            <span style="color: #8080ff"> Mode</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #cb97ff">TwoWay</span>
            <span style="color: #80ffff">}</span>
            <span style="color: #80ff80">"</span>
            <span style="color: #ffff80"> Margin</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"20,0,0,0"</span>
            <span style="color: #ffff80"> Content</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"Fullscreen"</span>
            <span style="color: #ffff80"> Foreground</span>
            <span style="color: #80ffff">=</span>
            <span style="color: #80ff80">"White"</span>
            <span style="color: #80ffff">/&gt;</span>
          </p>
          <p style="margin: 0px">
 
</p>
          <p style="margin: 0px">
            <span style="color: #60ff60">        </span>
            <span style="color: #80ffff">&lt;/</span>
            <span style="color: #0080ff">StackPanel</span>
            <span style="color: #80ffff">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #60ff60">    </span>
            <span style="color: #80ffff">&lt;/</span>
            <span style="color: #0080ff">Grid</span>
            <span style="color: #80ffff">&gt;</span>
          </p>
          <p style="margin: 0px">
            <span style="color: #80ffff">&lt;/</span>
            <span style="color: #0080ff">UserControl</span>
            <span style="color: #80ffff">&gt;</span>
          </p>
        </div>
        <p>
          <iframe style="border-bottom: #dde5e9 1px solid; border-left: #dde5e9 1px solid; padding-bottom: 0px; background-color: #ffffff; margin: 3px; padding-left: 0px; width: 240px; padding-right: 0px; height: 66px; border-top: #dde5e9 1px solid; border-right: #dde5e9 1px solid; padding-top: 0px" marginheight="0" src="http://cid-b7145a2861d183da.skydrive.live.com/embedrowdetail.aspx/Code/VideoPlayer1.7z" frameborder="0" marginwidth="0" scrolling="no">
          </iframe>
        </p>
        <img width="0" height="0" src="http://www.ucaya.com/blog/aggbug.ashx?id=aa66f5d0-6bd2-46c5-a95f-90e05bfcf606" />
      </body>
      <title>SLMedia le player Photo / Video de SLExtensions</title>
      <guid isPermaLink="false">http://www.ucaya.com/blog/PermaLink,guid,aa66f5d0-6bd2-46c5-a95f-90e05bfcf606.aspx</guid>
      <link>http://www.ucaya.com/blog/2009/06/08/SLMediaLePlayerPhotoVideoDeSLExtensions.aspx</link>
      <pubDate>Mon, 08 Jun 2009 11:16:46 GMT</pubDate>
      <description>&lt;p&gt;
Les librairies SLMedia regroupent tout ce qu'il vous faut pour gérer vos galeries
photos et vidéo. Ces librairies sont séparées en plusieurs dlls gérant chacune un
type de média.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
SLMedia.Core : Librairie centrale prenant en charge les fonctions communes. 
&lt;/li&gt;
&lt;li&gt;
SLMedia.Picture : Librairie vous permettant de réaliser des slideshows d’images. 
&lt;/li&gt;
&lt;li&gt;
SLMedia.Deepzoom : Librairie vous permettant d’afficher des galeries deepzoom de vos
images. 
&lt;/li&gt;
&lt;li&gt;
SLMedia.Video : Librairie gérant les galeries vidéos. 
&lt;/li&gt;
&lt;li&gt;
SLMedia.SmoothStreaming : Gestion des vidéos en Smooth Streaming 
&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;Création d’un player video avec SLMedia
&lt;/h1&gt;
&lt;p&gt;
La réalisation d’un player avec SLMedia repose sur les concepts de Binding et de Behavior.
Les Bindings vont vous servir à lier les informations provenant du controller (ici
un VideoController) et les différents éléments graphiques qui vont vous permettre
d’afficher et d’agir sur votre vidéo.
&lt;/p&gt;
&lt;h2&gt;MediaController
&lt;/h2&gt;
&lt;p&gt;
Cette classe appartenant à SLMedia.Core sert de base au VideoController. Elle regroupe
les fonctionnalités communes aux différents controllers. 
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Gestion de la playlist (Next, Previous, IsPlaying, SelectedItem) 
&lt;/li&gt;
&lt;li&gt;
Gestion du fullscreen (IsFullscreen) 
&lt;/li&gt;
&lt;li&gt;
Gestion des progressions pour les slideshow / videos (Position, Duration) 
&lt;/li&gt;
&lt;li&gt;
Etc.. 
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;VideoController
&lt;/h2&gt;
&lt;p&gt;
Cette classe hérite du MediaController et lui rajoute des fonctions spécifiques pour
la vidéo.
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
MediaElement 
&lt;/li&gt;
&lt;li&gt;
Buffering 
&lt;/li&gt;
&lt;li&gt;
Support de différentes source par les VideoAdapter 
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Etape 1 : Affichage d’une video de la playlist
&lt;/h2&gt;
&lt;p&gt;
Dans votre page xaml, référencez le namespace correspondant à SLMedia.Video et ajouter
le VideoController aux ressources. 
&lt;br /&gt;
&lt;/p&gt;
&lt;div style="font-family: consolas; background: #282828; color: #e0e0e0; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;UserControl&lt;/span&gt;&lt;span style="color: #ffff80"&gt; x&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #ffff80"&gt;Class&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;VideoPlayer1.Page&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;xmlns&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;xmlns&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #ffff80"&gt;x&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;xmlns&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #ffff80"&gt;slvideo&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;clr-namespace:SLMedia.Video;assembly=SLMedia.Video&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160; &lt;span style="color: #80ffff"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;UserControl.Resources&lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;slvideo&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #0080ff"&gt;VideoController&lt;/span&gt;&lt;span style="color: #ffff80"&gt; x&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #ffff80"&gt;Name&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;controller&amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt; /&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0080ff"&gt;UserControl.Resources&lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
Ensuite posez un MediaElement et associez sa source avec la propriété CurrentItem
de notre controller. Le CurrentItem sera du type IMediaItem et possèdera donc une
propriété SourceUri contenant l’url de la vidéo à afficher. 
&lt;br /&gt;
&lt;/p&gt;
&lt;div style="font-family: consolas; background: #282828; color: #e0e0e0; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;Grid&lt;/span&gt;&lt;span style="color: #ffff80"&gt; x&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #ffff80"&gt;Name&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;LayoutRoot&amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt; &lt;/span&gt;&lt;span style="color: #ffff80"&gt;DataContext&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;Binding&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Source&lt;/span&gt;&lt;span style="color: #80ffff"&gt;={&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;StaticResource&lt;/span&gt;&lt;span style="color: #8080ff"&gt; controller&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;MediaElement&lt;/span&gt;&lt;span style="color: #ffff80"&gt; x&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #ffff80"&gt;Name&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;mediaelement&amp;quot;&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;Source&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;Binding&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Path&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;CurrentItem&lt;/span&gt;&lt;span style="color: #80ffff"&gt;.&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;SourceUri&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #80ffff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0080ff"&gt;Grid&lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
Il ne reste plus qu’à renseigner un nouvel item dans la playlist et de le sélectionner
pour que la video se lancer. 
&lt;br /&gt;
&lt;/p&gt;
&lt;div style="font-family: consolas; background: #282828; color: #e0e0e0; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #40c4ff"&gt;using&lt;/span&gt; &lt;span style="color: #eee8aa"&gt;SLMedia&lt;/span&gt;&lt;span style="color: silver"&gt;.&lt;/span&gt;&lt;span style="color: #eee8aa"&gt;Video&lt;/span&gt;;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #40c4ff"&gt;using&lt;/span&gt; &lt;span style="color: #eee8aa"&gt;SLMedia&lt;/span&gt;&lt;span style="color: silver"&gt;.&lt;/span&gt;&lt;span style="color: #eee8aa"&gt;Core&lt;/span&gt;;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #40c4ff"&gt;namespace&lt;/span&gt; &lt;span style="color: #eee8aa"&gt;VideoPlayer1&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
{
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #40c4ff"&gt;public&lt;/span&gt; &lt;span style="color: #40c4ff"&gt;partial&lt;/span&gt; &lt;span style="color: #40c4ff"&gt;class&lt;/span&gt; &lt;span style="color: #66cdaa"&gt;Page&lt;/span&gt; : &lt;span style="color: #66cdaa"&gt;UserControl&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #40c4ff"&gt;public&lt;/span&gt; &lt;span style="color: #eee8aa"&gt;Page&lt;/span&gt;()
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #eee8aa"&gt;InitializeComponent&lt;/span&gt;();
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #eee8aa"&gt;controller&lt;/span&gt; &lt;span style="color: silver"&gt;=&lt;/span&gt; (&lt;span style="color: #66cdaa"&gt;VideoController&lt;/span&gt;)&lt;span style="color: #eee8aa"&gt;Resources&lt;/span&gt;[&lt;span style="color: #60ff60"&gt;&amp;quot;controller&amp;quot;&lt;/span&gt;];
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #40c4ff"&gt;this&lt;/span&gt;&lt;span style="color: silver"&gt;.&lt;/span&gt;&lt;span style="color: #eee8aa"&gt;Loaded&lt;/span&gt; &lt;span style="color: silver"&gt;+=&lt;/span&gt; &lt;span style="color: #40c4ff"&gt;new&lt;/span&gt; &lt;span style="color: #2b91af"&gt;RoutedEventHandler&lt;/span&gt;(&lt;span style="color: #eee8aa"&gt;Page_Loaded&lt;/span&gt;);
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #40c4ff"&gt;void&lt;/span&gt; &lt;span style="color: #eee8aa"&gt;Page_Loaded&lt;/span&gt;(&lt;span style="color: #40c4ff"&gt;object&lt;/span&gt; &lt;span style="color: #eee8aa"&gt;sender&lt;/span&gt;, &lt;span style="color: #66cdaa"&gt;RoutedEventArgs&lt;/span&gt; &lt;span style="color: #eee8aa"&gt;e&lt;/span&gt;)
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #eee8aa"&gt;controller&lt;/span&gt;&lt;span style="color: silver"&gt;.&lt;/span&gt;&lt;span style="color: #eee8aa"&gt;Playlist&lt;/span&gt;&lt;span style="color: silver"&gt;.&lt;/span&gt;&lt;span style="color: #eee8aa"&gt;Add&lt;/span&gt;(&lt;span style="color: #60ff60"&gt;&amp;quot;http://labs.ucaya.com/lake.wmv&amp;quot;&lt;/span&gt;);
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #eee8aa"&gt;controller&lt;/span&gt;&lt;span style="color: silver"&gt;.&lt;/span&gt;&lt;span style="color: #eee8aa"&gt;Next&lt;/span&gt;();
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160; }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
}
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
Pour rendre complétement opérationnel notre videocontroller, nous devons lui indiquer
quel est le MediaElement qui affiche la vidéo. De cette manière il pourra récupérer
les états de lecture, de progression et de buffering. Nous allons également lier quelques
propriétés supplémentaires qui nous permettrons de tout contrôler depuis le VideoController.
&lt;/p&gt;
&lt;div style="font-family: consolas; background: #282828; color: #e0e0e0; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;MediaElement&lt;/span&gt;&lt;span style="color: #ffff80"&gt; x&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #ffff80"&gt;Name&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;mediaelement&amp;quot;&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;Source&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;Binding&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Path&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;CurrentItem&lt;/span&gt;&lt;span style="color: #80ffff"&gt;.&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;SourceUri&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;slvideo&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #ffff80"&gt;VideoController.MediaElement&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;StaticResource&lt;/span&gt;&lt;span style="color: #8080ff"&gt; controller&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;IsMuted&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;Binding&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Path&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;IsMuted&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;Volume&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;Binding&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Path&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;Volume&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;AutoPlay&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;Binding&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Path&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;AutoPlay&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160; 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #80ffff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Etape 2 : Lecture / Pause
&lt;/h2&gt;
&lt;p&gt;
L’état lecture / pause est géré dans notre controller par la propriété IsPlaying.
Un binding entre une checkbox et cette propriété permetra de contrôler facilement
l’état de lecture. 
&lt;/p&gt;
&lt;div style="font-family: consolas; background: #282828; color: #e0e0e0; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;StackPanel&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Orientation&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;Horizontal&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; VerticalAlignment&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;Bottom&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Background&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;#50000000&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Margin&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;30&amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;CheckBox&lt;/span&gt;&lt;span style="color: #ffff80"&gt; IsChecked&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;Binding&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Path&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;IsPlaying&lt;/span&gt;&lt;span style="color: #80ffff"&gt;,&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Mode&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;TwoWay&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt; /&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0080ff"&gt;StackPanel&lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;h2&gt;Etape 3 : Position / Durée
&lt;/h2&gt;
&lt;p&gt;
Un slider Bindé sur les propriétés Duration et Position fera l’affaire. Les propriétés
Duration et Position étant du type TimeSpan, nous allons utiliser un IValueConverter
pour transformer la valeur en Double.
&lt;/p&gt;
&lt;div style="font-family: consolas; background: #282828; color: #e0e0e0; font-size: 10pt"&gt;
&lt;div style="font-family: consolas; background: #282828; color: #e0e0e0; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;UserControl&lt;/span&gt;&lt;span style="color: #ffff80"&gt; x&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #ffff80"&gt;Class&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;VideoPlayer1.Page&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;xmlns&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;xmlns&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #ffff80"&gt;x&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;xmlns&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #ffff80"&gt;slvideo&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;clr-namespace:SLMedia.Video;assembly=SLMedia.Video&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;xmlns&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #ffff80"&gt;slec&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;clr-namespace:SLExtensions.Controls;assembly=SLExtensions.Controls&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;xmlns&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #ffff80"&gt;sled&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;clr-namespace:SLExtensions.Data;assembly=SLExtensions.Data&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;Foreground&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;White&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #80ffff"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;UserControl.Resources&lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;slvideo&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #0080ff"&gt;VideoController&lt;/span&gt;&lt;span style="color: #ffff80"&gt; x&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #ffff80"&gt;Name&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;controller&amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt; /&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;sled&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #0080ff"&gt;TimeSpanConverter&lt;/span&gt;&lt;span style="color: #ffff80"&gt; x&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #ffff80"&gt;Name&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;timeSpanConverter&amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0080ff"&gt;UserControl.Resources&lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;Grid&lt;/span&gt;&lt;span style="color: #ffff80"&gt; x&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #ffff80"&gt;Name&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;LayoutRoot&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; DataContext&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;Binding&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Source&lt;/span&gt;&lt;span style="color: #80ffff"&gt;={&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;StaticResource&lt;/span&gt;&lt;span style="color: #8080ff"&gt; controller&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;MediaElement&lt;/span&gt;&lt;span style="color: #ffff80"&gt; x&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #ffff80"&gt;Name&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;mediaelement&amp;quot;&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;Source&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;Binding&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Path&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;CurrentItem&lt;/span&gt;&lt;span style="color: #80ffff"&gt;.&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;SourceUri&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;slvideo&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #ffff80"&gt;VideoController.MediaElement&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;StaticResource&lt;/span&gt;&lt;span style="color: #8080ff"&gt; controller&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;IsMuted&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;Binding&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Path&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;IsMuted&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;Volume&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;Binding&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Path&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;Volume&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;AutoPlay&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;Binding&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Path&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;AutoPlay&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160; 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #80ffff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;StackPanel&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Orientation&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;Horizontal&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; VerticalAlignment&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;Bottom&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Background&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;#50000000&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Margin&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;30&amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;CheckBox&lt;/span&gt;&lt;span style="color: #ffff80"&gt; IsChecked&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;Binding&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Path&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;IsPlaying&lt;/span&gt;&lt;span style="color: #80ffff"&gt;,&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Mode&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;TwoWay&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt; /&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;slec&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #0080ff"&gt;Slider&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Maximum&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;Binding&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Converter&lt;/span&gt;&lt;span style="color: #80ffff"&gt;={&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;StaticResource&lt;/span&gt;&lt;span style="color: #8080ff"&gt; timeSpanConverter&lt;/span&gt;&lt;span style="color: #80ffff"&gt;},&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Path&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;Duration&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;MoveValue&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;Binding&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Converter&lt;/span&gt;&lt;span style="color: #80ffff"&gt;={&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;StaticResource&lt;/span&gt;&lt;span style="color: #8080ff"&gt; timeSpanConverter&lt;/span&gt;&lt;span style="color: #80ffff"&gt;},&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Mode&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;TwoWay&lt;/span&gt;&lt;span style="color: #80ffff"&gt;,&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Path&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;Position&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;Width&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;200&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Margin&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;20,0,0,0&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #80ffff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;TextBlock&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Text&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;Binding&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Converter&lt;/span&gt;&lt;span style="color: #80ffff"&gt;={&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;StaticResource&lt;/span&gt;&lt;span style="color: #8080ff"&gt; timeSpanConverter&lt;/span&gt;&lt;span style="color: #80ffff"&gt;},&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Path&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;Position&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;Margin&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;20,0,0,0&amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;TextBlock&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Text&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;
/ &amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt; /&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;TextBlock&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Text&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;Binding&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Converter&lt;/span&gt;&lt;span style="color: #80ffff"&gt;={&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;StaticResource&lt;/span&gt;&lt;span style="color: #8080ff"&gt; timeSpanConverter&lt;/span&gt;&lt;span style="color: #80ffff"&gt;},&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Path&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;Duration&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt; /&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0080ff"&gt;StackPanel&lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0080ff"&gt;Grid&lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #80ffff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0080ff"&gt;UserControl&lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
Si vous utilisez le slider de base de silverlight, vous noterez des problèmes lorsque
vous déplacez le curseur. Pendant que vous déplacez le curseur, la propriété Value
peut être remise à jour par le binding et le curseur donne l’impression de sauter.
&lt;/p&gt;
&lt;h2&gt;Etape 4 : Volume
&lt;/h2&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
De même que pour la position, nous allons utiliser un slider pour le volume et une
checkbox pour le mute
&lt;/p&gt;
&lt;div style="font-family: consolas; background: #282828; color: #e0e0e0; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;CheckBox&lt;/span&gt;&lt;span style="color: #ffff80"&gt; IsChecked&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;Binding&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Path&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;IsMuted&lt;/span&gt;&lt;span style="color: #80ffff"&gt;,&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Mode&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;TwoWay&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Margin&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;20,0,0,0&amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;Slider&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Maximum&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;1&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; SmallChange&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;0.1&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; LargeChange&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;0.1&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;Value&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;Binding&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Path&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;Volume&lt;/span&gt;&lt;span style="color: #80ffff"&gt;,&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Mode&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;TwoWay&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Width&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;50&amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt; /&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Etape 5 : Buffering - Downloading
&lt;/h2&gt;
&lt;p&gt;
Encore du binding
&lt;/p&gt;
&lt;div style="font-family: consolas; background: #282828; color: #e0e0e0; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;TextBlock&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Text&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;Buffering:&amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt; /&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;TextBlock&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Text&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;Binding&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Path&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;BufferingProgress&lt;/span&gt;&lt;span style="color: #80ffff"&gt;,&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Mode&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;TwoWay&lt;/span&gt;&lt;span style="color: #80ffff"&gt;,&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Converter&lt;/span&gt;&lt;span style="color: #80ffff"&gt;={&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;StaticResource&lt;/span&gt;&lt;span style="color: #8080ff"&gt; strConverter&lt;/span&gt;&lt;span style="color: #80ffff"&gt;},&lt;/span&gt;&lt;span style="color: #8080ff"&gt; ConverterParameter&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;'&lt;/span&gt;&lt;span style="color: #80ffff"&gt;{&lt;/span&gt;0&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;p&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;'&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt; /&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;Slider&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Maximum&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;1&amp;quot;&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;Value&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;Binding&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Path&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;BufferingProgress&lt;/span&gt;&lt;span style="color: #80ffff"&gt;,&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Mode&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;TwoWay&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Width&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;50&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; IsHitTestVisible&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;False&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Margin&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;5,0,0,0&amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;TextBlock&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Text&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;Downloading:&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Margin&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;20,0,0,0&amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;TextBlock&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Text&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;Binding&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Path&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;DownloadProgress&lt;/span&gt;&lt;span style="color: #80ffff"&gt;,&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Mode&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;TwoWay&lt;/span&gt;&lt;span style="color: #80ffff"&gt;,&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Converter&lt;/span&gt;&lt;span style="color: #80ffff"&gt;={&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;StaticResource&lt;/span&gt;&lt;span style="color: #8080ff"&gt; strConverter&lt;/span&gt;&lt;span style="color: #80ffff"&gt;},&lt;/span&gt;&lt;span style="color: #8080ff"&gt; ConverterParameter&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;'&lt;/span&gt;&lt;span style="color: #80ffff"&gt;{&lt;/span&gt;0&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;p&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;'&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt; /&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;Slider&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Maximum&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;1&amp;quot;&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;Value&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;Binding&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Path&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;DownloadProgress&lt;/span&gt;&lt;span style="color: #80ffff"&gt;,&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Mode&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;TwoWay&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Width&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;50&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; IsHitTestVisible&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;False&amp;quot;&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;Margin&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;5,0,0,0&amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;h2&gt;Etape 6 : Gestion des états visuels
&lt;/h2&gt;
&lt;p&gt;
Le VideoController centralise les propriétés de notre player video. Il est possible
de changer l’état visuel de nos contrôles en fonction des propriétés du VideoController.
Nous allons utiliser le behaviors fournis par SLExtensions pour mapper ces propriétés
à nos VisualStates.
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;div style="font-family: consolas; background: #282828; color: #e0e0e0; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;UserControl&lt;/span&gt;&lt;span style="color: #ffff80"&gt; x&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #ffff80"&gt;Class&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;VideoPlayer1.Page&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;xmlns&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;xmlns&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #ffff80"&gt;x&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;xmlns&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #ffff80"&gt;slvideo&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;clr-namespace:SLMedia.Video;assembly=SLMedia.Video&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;xmlns&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #ffff80"&gt;slec&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;clr-namespace:SLExtensions.Controls;assembly=SLExtensions.Controls&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;xmlns&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #ffff80"&gt;sled&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;clr-namespace:SLExtensions.Data;assembly=SLExtensions.Data&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;xmlns&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #ffff80"&gt;inter&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;clr-namespace:Microsoft.Expression.Interactivity;assembly=Microsoft.Expression.Interactivity&amp;quot;&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;xmlns&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #ffff80"&gt;slint&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;clr-namespace:SLExtensions.Interactivity;assembly=SLExtensions.Interactivity&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;xmlns&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #ffff80"&gt;vsm&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;clr-namespace:System.Windows;assembly=System.Windows&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;Foreground&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;White&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #80ffff"&gt;&amp;#160;&amp;#160;&amp;#160; &amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;UserControl.Resources&lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;slvideo&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #0080ff"&gt;VideoController&lt;/span&gt;&lt;span style="color: #ffff80"&gt; x&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #ffff80"&gt;Name&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;controller&amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt; /&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;sled&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #0080ff"&gt;TimeSpanConverter&lt;/span&gt;&lt;span style="color: #ffff80"&gt; x&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #ffff80"&gt;Name&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;timeSpanConverter&amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;sled&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #0080ff"&gt;StringFormatConverter&lt;/span&gt;&lt;span style="color: #ffff80"&gt; x&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #ffff80"&gt;Name&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;strConverter&amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0080ff"&gt;UserControl.Resources&lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;Grid&lt;/span&gt;&lt;span style="color: #ffff80"&gt; x&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #ffff80"&gt;Name&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;LayoutRoot&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; DataContext&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;Binding&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Source&lt;/span&gt;&lt;span style="color: #80ffff"&gt;={&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;StaticResource&lt;/span&gt;&lt;span style="color: #8080ff"&gt; controller&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;vsm&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #0080ff"&gt;VisualStateManager.VisualStateGroups&lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;vsm&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #0080ff"&gt;VisualStateGroup&lt;/span&gt;&lt;span style="color: #ffff80"&gt; x&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #ffff80"&gt;Name&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;PlayingStates&amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;vsm&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #0080ff"&gt;VisualStateGroup.Transitions&lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;vsm&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #0080ff"&gt;VisualTransition&lt;/span&gt;&lt;span style="color: #ffff80"&gt; GeneratedDuration&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;00:00:00.3000000&amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0080ff"&gt;vsm&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #0080ff"&gt;VisualStateGroup.Transitions&lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;vsm&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #0080ff"&gt;VisualState&lt;/span&gt;&lt;span style="color: #ffff80"&gt; x&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #ffff80"&gt;Name&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;Playing&amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;Storyboard&lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;ColorAnimationUsingKeyFrames&lt;/span&gt;&lt;span style="color: #ffff80"&gt; BeginTime&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;00:00:00&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Duration&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;00:00:00.0010000&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Storyboard.TargetName&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;stackPanel&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Storyboard.TargetProperty&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;(Panel.Background).(SolidColorBrush.Color)&amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;SplineColorKeyFrame&lt;/span&gt;&lt;span style="color: #ffff80"&gt; KeyTime&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;00:00:00&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Value&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;#5039FF00&amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0080ff"&gt;ColorAnimationUsingKeyFrames&lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0080ff"&gt;Storyboard&lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0080ff"&gt;vsm&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #0080ff"&gt;VisualState&lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;vsm&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #0080ff"&gt;VisualState&lt;/span&gt;&lt;span style="color: #ffff80"&gt; x&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #ffff80"&gt;Name&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;Paused&amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;Storyboard&lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;ColorAnimationUsingKeyFrames&lt;/span&gt;&lt;span style="color: #ffff80"&gt; BeginTime&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;00:00:00&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Duration&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;00:00:00.0010000&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Storyboard.TargetName&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;stackPanel&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Storyboard.TargetProperty&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;(Panel.Background).(SolidColorBrush.Color)&amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;SplineColorKeyFrame&lt;/span&gt;&lt;span style="color: #ffff80"&gt; KeyTime&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;00:00:00&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Value&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;#50D56700&amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0080ff"&gt;ColorAnimationUsingKeyFrames&lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0080ff"&gt;Storyboard&lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0080ff"&gt;vsm&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #0080ff"&gt;VisualState&lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0080ff"&gt;vsm&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #0080ff"&gt;VisualStateGroup&lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0080ff"&gt;vsm&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #0080ff"&gt;VisualStateManager.VisualStateGroups&lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;inter&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #0080ff"&gt;Interaction.Behaviors&lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;slint&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #0080ff"&gt;MapState&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Source&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;StaticResource&lt;/span&gt;&lt;span style="color: #8080ff"&gt; controller&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Property&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;IsPlaying&amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt; &amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;slint&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #0080ff"&gt;MapStateMapping&lt;/span&gt;&lt;span style="color: #ffff80"&gt; StateName&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;Playing&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Value&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;slint&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #0080ff"&gt;MapStateMapping&lt;/span&gt;&lt;span style="color: #ffff80"&gt; StateName&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;Paused&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Value&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;false&amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0080ff"&gt;slint&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #0080ff"&gt;MapState&lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0080ff"&gt;inter&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #0080ff"&gt;Interaction.Behaviors&lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;MediaElement&lt;/span&gt;&lt;span style="color: #ffff80"&gt; x&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #ffff80"&gt;Name&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;mediaelement&amp;quot;&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;Source&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;Binding&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Path&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;CurrentItem&lt;/span&gt;&lt;span style="color: #80ffff"&gt;.&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;SourceUri&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;slvideo&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #ffff80"&gt;VideoController.MediaElement&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;StaticResource&lt;/span&gt;&lt;span style="color: #8080ff"&gt; controller&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;IsMuted&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;Binding&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Path&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;IsMuted&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;Volume&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;Binding&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Path&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;Volume&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;AutoPlay&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;Binding&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Path&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;AutoPlay&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt;&amp;#160;&amp;#160;&amp;#160; 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #80ffff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;StackPanel&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Orientation&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;Horizontal&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; VerticalAlignment&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;Bottom&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Background&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;#50000000&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Margin&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;30&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; x&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #ffff80"&gt;Name&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;stackPanel&amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;CheckBox&lt;/span&gt;&lt;span style="color: #ffff80"&gt; IsChecked&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;Binding&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Path&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;IsPlaying&lt;/span&gt;&lt;span style="color: #80ffff"&gt;,&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Mode&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;TwoWay&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt; /&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;slec&lt;/span&gt;&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #0080ff"&gt;Slider&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Maximum&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;Binding&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Converter&lt;/span&gt;&lt;span style="color: #80ffff"&gt;={&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;StaticResource&lt;/span&gt;&lt;span style="color: #8080ff"&gt; timeSpanConverter&lt;/span&gt;&lt;span style="color: #80ffff"&gt;},&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Path&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;Duration&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;MoveValue&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;Binding&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Converter&lt;/span&gt;&lt;span style="color: #80ffff"&gt;={&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;StaticResource&lt;/span&gt;&lt;span style="color: #8080ff"&gt; timeSpanConverter&lt;/span&gt;&lt;span style="color: #80ffff"&gt;},&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Mode&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;TwoWay&lt;/span&gt;&lt;span style="color: #80ffff"&gt;,&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Path&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;Position&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;Width&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;200&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Margin&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;20,0,0,0&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #80ffff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;TextBlock&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Text&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;Binding&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Converter&lt;/span&gt;&lt;span style="color: #80ffff"&gt;={&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;StaticResource&lt;/span&gt;&lt;span style="color: #8080ff"&gt; timeSpanConverter&lt;/span&gt;&lt;span style="color: #80ffff"&gt;},&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Path&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;Position&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;Margin&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;20,0,0,0&amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;TextBlock&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Text&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;
/ &amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt; /&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;TextBlock&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Text&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;Binding&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Converter&lt;/span&gt;&lt;span style="color: #80ffff"&gt;={&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;StaticResource&lt;/span&gt;&lt;span style="color: #8080ff"&gt; timeSpanConverter&lt;/span&gt;&lt;span style="color: #80ffff"&gt;},&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Path&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;Duration&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt; /&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;CheckBox&lt;/span&gt;&lt;span style="color: #ffff80"&gt; IsChecked&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;Binding&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Path&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;IsMuted&lt;/span&gt;&lt;span style="color: #80ffff"&gt;,&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Mode&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;TwoWay&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Margin&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;20,0,0,0&amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;Slider&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Maximum&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;1&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; SmallChange&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;0.1&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; LargeChange&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;0.1&amp;quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;Value&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;Binding&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Path&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;Volume&lt;/span&gt;&lt;span style="color: #80ffff"&gt;,&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Mode&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;TwoWay&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Width&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;50&amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt; /&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;TextBlock&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Text&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;Buffering:&amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt; /&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;TextBlock&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Text&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;Binding&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Path&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;BufferingProgress&lt;/span&gt;&lt;span style="color: #80ffff"&gt;,&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Mode&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;TwoWay&lt;/span&gt;&lt;span style="color: #80ffff"&gt;,&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Converter&lt;/span&gt;&lt;span style="color: #80ffff"&gt;={&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;StaticResource&lt;/span&gt;&lt;span style="color: #8080ff"&gt; strConverter&lt;/span&gt;&lt;span style="color: #80ffff"&gt;},&lt;/span&gt;&lt;span style="color: #8080ff"&gt; ConverterParameter&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;'&lt;/span&gt;&lt;span style="color: #80ffff"&gt;{&lt;/span&gt;0&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;p&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;'&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt; /&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;Slider&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Maximum&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;1&amp;quot;&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;Value&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;Binding&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Path&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;BufferingProgress&lt;/span&gt;&lt;span style="color: #80ffff"&gt;,&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Mode&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;TwoWay&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Width&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;50&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; IsHitTestVisible&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;False&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Margin&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;5,0,0,0&amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;TextBlock&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Text&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;Downloading:&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Margin&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;20,0,0,0&amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;TextBlock&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Text&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;Binding&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Path&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;DownloadProgress&lt;/span&gt;&lt;span style="color: #80ffff"&gt;,&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Mode&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;TwoWay&lt;/span&gt;&lt;span style="color: #80ffff"&gt;,&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Converter&lt;/span&gt;&lt;span style="color: #80ffff"&gt;={&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;StaticResource&lt;/span&gt;&lt;span style="color: #8080ff"&gt; strConverter&lt;/span&gt;&lt;span style="color: #80ffff"&gt;},&lt;/span&gt;&lt;span style="color: #8080ff"&gt; ConverterParameter&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;'&lt;/span&gt;&lt;span style="color: #80ffff"&gt;{&lt;/span&gt;0&lt;span style="color: #80ffff"&gt;:&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;p&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;'&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt; /&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;Slider&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Maximum&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;1&amp;quot;&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;Value&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;Binding&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Path&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;DownloadProgress&lt;/span&gt;&lt;span style="color: #80ffff"&gt;,&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Mode&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;TwoWay&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Width&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;50&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; IsHitTestVisible&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;False&amp;quot;&lt;/span&gt; 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #ffff80"&gt;Margin&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;5,0,0,0&amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #0080ff"&gt;CheckBox&lt;/span&gt;&lt;span style="color: #ffff80"&gt; IsChecked&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&amp;quot;{&lt;/span&gt;&lt;span style="color: #ff80c0"&gt;Binding&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Path&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;IsFullscreen&lt;/span&gt;&lt;span style="color: #80ffff"&gt;,&lt;/span&gt;&lt;span style="color: #8080ff"&gt; Mode&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #cb97ff"&gt;TwoWay&lt;/span&gt;&lt;span style="color: #80ffff"&gt;}&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Margin&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;20,0,0,0&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Content&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;Fullscreen&amp;quot;&lt;/span&gt;&lt;span style="color: #ffff80"&gt; Foreground&lt;/span&gt;&lt;span style="color: #80ffff"&gt;=&lt;/span&gt;&lt;span style="color: #80ff80"&gt;&amp;quot;White&amp;quot;&lt;/span&gt;&lt;span style="color: #80ffff"&gt;/&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0080ff"&gt;StackPanel&lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #60ff60"&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0080ff"&gt;Grid&lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&lt;span style="color: #80ffff"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color: #0080ff"&gt;UserControl&lt;/span&gt;&lt;span style="color: #80ffff"&gt;&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;iframe style="border-bottom: #dde5e9 1px solid; border-left: #dde5e9 1px solid; padding-bottom: 0px; background-color: #ffffff; margin: 3px; padding-left: 0px; width: 240px; padding-right: 0px; height: 66px; border-top: #dde5e9 1px solid; border-right: #dde5e9 1px solid; padding-top: 0px" marginheight="0" src="http://cid-b7145a2861d183da.skydrive.live.com/embedrowdetail.aspx/Code/VideoPlayer1.7z" frameborder="0" marginwidth="0" scrolling="no"&gt;
&lt;/iframe&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ucaya.com/blog/aggbug.ashx?id=aa66f5d0-6bd2-46c5-a95f-90e05bfcf606" /&gt;</description>
      <comments>http://www.ucaya.com/blog/CommentView,guid,aa66f5d0-6bd2-46c5-a95f-90e05bfcf606.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://www.ucaya.com/blog/Trackback.aspx?guid=cc3d4024-0316-4cb2-b0b0-82f65a505ba8</trackback:ping>
      <pingback:server>http://www.ucaya.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.ucaya.com/blog/PermaLink,guid,cc3d4024-0316-4cb2-b0b0-82f65a505ba8.aspx</pingback:target>
      <dc:creator>Romuald Boulanger</dc:creator>
      <georss:point>47.2108230807441 -1.62322998046875</georss:point>
      <wfw:comment>http://www.ucaya.com/blog/CommentView,guid,cc3d4024-0316-4cb2-b0b0-82f65a505ba8.aspx</wfw:comment>
      <wfw:commentRss>http://www.ucaya.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=cc3d4024-0316-4cb2-b0b0-82f65a505ba8</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p align="left">
          <a href="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/BeingtheBigBoss_9AEF/image_2.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/BeingtheBigBoss_9AEF/image_thumb.png" width="311" height="214" />
          </a>
        </p>
        <p>
        </p>
        <p>
En ce début de semaine <a href="http://www.beingthebigboss.com">www.beingthebigboss.com</a> depasse
les 14 000 inscrits !!
</p>
        <p>
          <a href="http://www.beingthebigboss.com/Registration.aspx">Venez nombreux prendre
les commandes d’une multinationale !</a>
        </p>
        <p>
Et n’oubliez pas si vous êtes étudiant le concours <a href="http://www.bigbosstrophy.com">www.bigbosstrophy.com</a> se
prépare. <a href="http://www.bigbosstrophy.com/registration.aspx">Inscrivez-vous</a> !
</p>
        <img width="0" height="0" src="http://www.ucaya.com/blog/aggbug.ashx?id=cc3d4024-0316-4cb2-b0b0-82f65a505ba8" />
      </body>
      <title>Being the Big Boss</title>
      <guid isPermaLink="false">http://www.ucaya.com/blog/PermaLink,guid,cc3d4024-0316-4cb2-b0b0-82f65a505ba8.aspx</guid>
      <link>http://www.ucaya.com/blog/2009/05/11/BeingTheBigBoss.aspx</link>
      <pubDate>Mon, 11 May 2009 09:02:31 GMT</pubDate>
      <description>&lt;p align="left"&gt;
&lt;a href="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/BeingtheBigBoss_9AEF/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/BeingtheBigBoss_9AEF/image_thumb.png" width="311" height="214" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
En ce début de semaine &lt;a href="http://www.beingthebigboss.com"&gt;www.beingthebigboss.com&lt;/a&gt; depasse
les 14 000 inscrits !!
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.beingthebigboss.com/Registration.aspx"&gt;Venez nombreux prendre
les commandes d’une multinationale !&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Et n’oubliez pas si vous êtes étudiant le concours &lt;a href="http://www.bigbosstrophy.com"&gt;www.bigbosstrophy.com&lt;/a&gt; se
prépare. &lt;a href="http://www.bigbosstrophy.com/registration.aspx"&gt;Inscrivez-vous&lt;/a&gt; !
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ucaya.com/blog/aggbug.ashx?id=cc3d4024-0316-4cb2-b0b0-82f65a505ba8" /&gt;</description>
      <comments>http://www.ucaya.com/blog/CommentView,guid,cc3d4024-0316-4cb2-b0b0-82f65a505ba8.aspx</comments>
      <category>Divers</category>
      <category>Silverlight</category>
      <category>Soft</category>
    </item>
    <item>
      <trackback:ping>http://www.ucaya.com/blog/Trackback.aspx?guid=79aef505-cbee-4d37-8142-b69ba986e7f3</trackback:ping>
      <pingback:server>http://www.ucaya.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.ucaya.com/blog/PermaLink,guid,79aef505-cbee-4d37-8142-b69ba986e7f3.aspx</pingback:target>
      <dc:creator>Thierry Bouquain</dc:creator>
      <georss:point>47.2108230807441 -1.62322998046875</georss:point>
      <wfw:comment>http://www.ucaya.com/blog/CommentView,guid,79aef505-cbee-4d37-8142-b69ba986e7f3.aspx</wfw:comment>
      <wfw:commentRss>http://www.ucaya.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=79aef505-cbee-4d37-8142-b69ba986e7f3</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="moonlight_logo" border="0" alt="moonlight_logo" align="right" src="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/TestezmoonlightsousWindows_860C/moonlight_logo_thumb.png" width="104" height="129" />Même
si au final vous aurez une fenêtre faisant tourner moonlight sur votre windows, ce
ne sera pas réellement le cas. L’idée expliquée dans ce <a href="http://chriscavanagh.wordpress.com/2009/05/06/more-on-moonlight-20-preview-1/" target="_blank">post
de Chris Cavanagh</a> est d’utiliser <a href="http://portableubuntu.demonccc.cloudius.com.ar/" target="_blank">Portable
Ubuntu</a>. Cette distribution d’Ubuntu tourne en tant que programme windows. Vous
pourrez donc installer <a href="http://go-mono.com/moonlight-preview/" target="_blank">Moonlight</a> sur
le firefox d’ubuntu.
</p>
        <img width="0" height="0" src="http://www.ucaya.com/blog/aggbug.ashx?id=79aef505-cbee-4d37-8142-b69ba986e7f3" />
      </body>
      <title>Testez moonlight sous Windows</title>
      <guid isPermaLink="false">http://www.ucaya.com/blog/PermaLink,guid,79aef505-cbee-4d37-8142-b69ba986e7f3.aspx</guid>
      <link>http://www.ucaya.com/blog/2009/05/08/TestezMoonlightSousWindows.aspx</link>
      <pubDate>Fri, 08 May 2009 07:33:11 GMT</pubDate>
      <description>&lt;p&gt;
&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; margin-left: 0px; border-left-width: 0px; margin-right: 0px" title="moonlight_logo" border="0" alt="moonlight_logo" align="right" src="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/TestezmoonlightsousWindows_860C/moonlight_logo_thumb.png" width="104" height="129" /&gt;Même
si au final vous aurez une fenêtre faisant tourner moonlight sur votre windows, ce
ne sera pas réellement le cas. L’idée expliquée dans ce &lt;a href="http://chriscavanagh.wordpress.com/2009/05/06/more-on-moonlight-20-preview-1/" target="_blank"&gt;post
de Chris Cavanagh&lt;/a&gt; est d’utiliser &lt;a href="http://portableubuntu.demonccc.cloudius.com.ar/" target="_blank"&gt;Portable
Ubuntu&lt;/a&gt;. Cette distribution d’Ubuntu tourne en tant que programme windows. Vous
pourrez donc installer &lt;a href="http://go-mono.com/moonlight-preview/" target="_blank"&gt;Moonlight&lt;/a&gt; sur
le firefox d’ubuntu.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ucaya.com/blog/aggbug.ashx?id=79aef505-cbee-4d37-8142-b69ba986e7f3" /&gt;</description>
      <comments>http://www.ucaya.com/blog/CommentView,guid,79aef505-cbee-4d37-8142-b69ba986e7f3.aspx</comments>
    </item>
    <item>
      <trackback:ping>http://www.ucaya.com/blog/Trackback.aspx?guid=b4f12223-7310-43c1-8722-0d501eebbf19</trackback:ping>
      <pingback:server>http://www.ucaya.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.ucaya.com/blog/PermaLink,guid,b4f12223-7310-43c1-8722-0d501eebbf19.aspx</pingback:target>
      <dc:creator>Romuald Boulanger</dc:creator>
      <georss:point>47.2108230807441 -1.62322998046875</georss:point>
      <wfw:comment>http://www.ucaya.com/blog/CommentView,guid,b4f12223-7310-43c1-8722-0d501eebbf19.aspx</wfw:comment>
      <wfw:commentRss>http://www.ucaya.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=b4f12223-7310-43c1-8722-0d501eebbf19</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Encore une nouvelle version pour l’application <a href="http://info.francetelevisions.fr" target="_blank">L’info
en vidéo</a>.
</p>
        <p>
L’accès aux journaux des régions simplifié par l’affichage de celles-ci sur une carte
de France :-)
</p>
        <p>
          <a href="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/FranceTlvisionLinfoenvido_CF90/image_2.png" target="_blank">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/FranceTlvisionLinfoenvido_CF90/image_thumb.png" width="524" height="390" />
          </a>
        </p>
        <p>
Et un accès direct aux différents journaux de chaque région :
</p>
        <p>
          <a href="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/FranceTlvisionLinfoenvido_CF90/image_4.png" target="_blank">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/FranceTlvisionLinfoenvido_CF90/image_thumb_1.png" width="524" height="392" />
          </a>
        </p>
        <img width="0" height="0" src="http://www.ucaya.com/blog/aggbug.ashx?id=b4f12223-7310-43c1-8722-0d501eebbf19" />
      </body>
      <title>France Télévisions – L’info en vidéo</title>
      <guid isPermaLink="false">http://www.ucaya.com/blog/PermaLink,guid,b4f12223-7310-43c1-8722-0d501eebbf19.aspx</guid>
      <link>http://www.ucaya.com/blog/2009/04/28/FranceT%c3%a9l%c3%a9visionsLinfoEnVid%c3%a9o.aspx</link>
      <pubDate>Tue, 28 Apr 2009 12:47:12 GMT</pubDate>
      <description>&lt;p&gt;
Encore une nouvelle version pour l’application &lt;a href="http://info.francetelevisions.fr" target="_blank"&gt;L’info
en vidéo&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
L’accès aux journaux des régions simplifié par l’affichage de celles-ci sur une carte
de France :-)
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/FranceTlvisionLinfoenvido_CF90/image_2.png" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/FranceTlvisionLinfoenvido_CF90/image_thumb.png" width="524" height="390" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Et un accès direct aux différents journaux de chaque région :
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/FranceTlvisionLinfoenvido_CF90/image_4.png" target="_blank"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/FranceTlvisionLinfoenvido_CF90/image_thumb_1.png" width="524" height="392" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ucaya.com/blog/aggbug.ashx?id=b4f12223-7310-43c1-8722-0d501eebbf19" /&gt;</description>
      <comments>http://www.ucaya.com/blog/CommentView,guid,b4f12223-7310-43c1-8722-0d501eebbf19.aspx</comments>
      <category>Silverlight</category>
    </item>
    <item>
      <trackback:ping>http://www.ucaya.com/blog/Trackback.aspx?guid=af21557a-7303-4d47-b283-cc329f7bf921</trackback:ping>
      <pingback:server>http://www.ucaya.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.ucaya.com/blog/PermaLink,guid,af21557a-7303-4d47-b283-cc329f7bf921.aspx</pingback:target>
      <dc:creator>Thierry Bouquain</dc:creator>
      <georss:point>47.2108230807441 -1.62322998046875</georss:point>
      <wfw:comment>http://www.ucaya.com/blog/CommentView,guid,af21557a-7303-4d47-b283-cc329f7bf921.aspx</wfw:comment>
      <wfw:commentRss>http://www.ucaya.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=af21557a-7303-4d47-b283-cc329f7bf921</wfw:commentRss>
      <slash:comments>7</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
On m’a interrogé récemment sur la libération de la mémoire des objets en silverlight.
Je vais essayer de synthétiser ici ce que j’ai répondu.
</p>
        <p>
Silverlight réagi exactement de la même manière que le framework .Net. La mémoire
est gérée par un garbage collector (ramasse-miettes) qui libère les allocations mémoires
des objets une fois qu’ils ne sont plus référencés.  
</p>
        <h1>L’application de test
</h1>
        <p>
Voila le principe de mon application de test. Au clic sur un bouton, mon application
ajoute un usercontrol dans l’arbre visuel et au clic sur un autre bouton, je l’enlève.
La seule référence vers mon contrôle est faite par l’arbre graphique. Dans le constructeur
de mon usercontrol, j’incrémente un compteur qui m’indique le nombre d’instances en
cours et dans le destructeur je le décrémente. Ce compteur est affiché par binding
dans l’interface graphique. 
</p>
        <p>
Petite parenthèse pour le fonctionnement de l’application, la destruction des objets
ne se passe pas dans le thread graphique, pour que la mise a jour du binding fonctionne,
je lève l’événement PropertyChanged de AppController par le SynchronizationContext
récupéré du thread graphique.
</p>
        <h1>Contrôle sans références
</h1>
        <p>
          <a href="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/GestiondelammoiresousSilverlight.Net_97E6/image_4.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/GestiondelammoiresousSilverlight.Net_97E6/image_thumb_1.png" width="465" height="318" />
          </a>
        </p>
        <p>
A l’ajout de mon usercontrol, on note bien l’incrémentation du compteur.
</p>
        <p>
          <a href="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/GestiondelammoiresousSilverlight.Net_97E6/image_6.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/GestiondelammoiresousSilverlight.Net_97E6/image_thumb_2.png" width="489" height="311" />
          </a>
        </p>
        <p>
Je clic sur le bouton Remove et je vois que mon compteur est toujours à 1. Le garbage
collector ne passe pas tout de suite. Il y a un algorithme qui détermine quand le
garbage collector doit passer sur les objets. Pour le besoin de mon application, je
vais forcer l’appel au garbage collector au clic sur le bouton Force GC. Il faut noter
que c’est une mauvaise pratique que de vouloir appeler soit même de garbage collector.
GC.Collect() ne doit être appelée que si vous en avez réellement l’utilité. Un appel
trop fréquent peut dégrader les performances de votre application.
</p>
        <p>
          <a href="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/GestiondelammoiresousSilverlight.Net_97E6/image_8.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/GestiondelammoiresousSilverlight.Net_97E6/image_thumb_3.png" width="302" height="311" />
          </a>
        </p>
        <p>
Le clic sur Force GC ramène bien le compte de référence à 0.
</p>
        <h1>Contrôle s’abonnant à un événement
</h1>
        <h1>
        </h1>
        <p>
        </p>
        <p>
        </p>
        <p>
        </p>
        <p>
Comme je vous le précisait dans le fonctionnement de mon application, je ne maintient
aucune référence vers mes usercontrol, je n’ai théoriquement rien qui va empêcher
le garbage collector de passer. Cependant le contrôle lui même peut faire qu’il ne
sera pas libéré. Ici ma classe AppController fourni un événement auquel mes contrôles
peuvent s’abonner. MyControl2 va s’abonner à cet événement. Au clic sur le bouton
Raise Test event, vous verez que la couleur du usercontrol change.
</p>
        <p>
          <a href="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/GestiondelammoiresousSilverlight.Net_97E6/image_10.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/GestiondelammoiresousSilverlight.Net_97E6/image_thumb_4.png" width="479" height="322" />
          </a>
        </p>
        <p>
Si vous ajoutez le usercontrol MyControl2, que vous l’enlevez et que vous forcez le
garbage collector, vous verrez que l’instance ne se libère pas. Que se passe-t-il
? 
<br />
Lorsque le contrôle s’est abonné à l’événement de AppController, il a créé un EventHandler
(une référence vers une fonction) et l’a ajouté à la liste des fonctions à appeler
lorsque l’événement est levé. Un événement n’est rien d’autre qu’une liste de références
qui pointe vers les fonctions à appeler. Pour que notre contrôle se libère, il faut
donc supprimer cette référence. Un clic sur Clear Test event list demande à AppController
de vider sa liste d’événement, un clic sur Force GC remettra les compteurs à 0.
</p>
        <h1>IDisposable
</h1>
        <p>
Une bonne pratique pour gérer la libération de ressources internes et le désabonnement
d’évenement est d’implémenter l’interface IDisposable. Cette interface vous demande
d’implémenter la fonction Dispose dans laquelle vous pouvez remettre à null les références
externes, vous désabonnez d’événements, etc… 
<br />
Le usercontrol MyControl3 implémente cette interface. Lorsque le bouton Remove First
Item est cliqué, mon application vérifie si le contrôle à enlever implémente IDisposable
et l’appel le cas échéant. 
</p>
        <p>
          <a href="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/GestiondelammoiresousSilverlight.Net_97E6/image_12.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/GestiondelammoiresousSilverlight.Net_97E6/image_thumb_5.png" width="485" height="313" />
          </a>
        </p>
        <p>
Les clics successifs sur Add MyControl3, Remove First Item et Force GC incrémentent
et décrémentent bien notre compteur de références.
</p>
        <h1>WeakReference et proxy d’événement
</h1>
        <p>
Si vous ne maitrisez pas la logique d’ajout suppression des contrôles, vous ne pouvez
pas toujours appeler la IDisposable.Dispose. (A noter que ce n’est pas parce qu’un
contrôle n’est plus dans l’arbre d’affichage qu’il faut nécessairement le disposer.
Un tabcontrol ajoute et enlève chaque tab de l’abre graphique.)
</p>
        <p>
La classe WeakReference permet de maintenir une référence “qui ne compte pas” du point
de vue du garbage collector. La propriété Target de la WeakReference vaut null quand
le garbage collector est passé et renvoi l’instance de l’objet sinon.
</p>
        <p>
Ici pour gérer notre abonnement à l’événement, nous allons utiliser ces WeakReference
pour pouvoir quand même être libéré. La fonction à appeler en retour de l’événement
est : MyControl4.Instance_TestEvent. Cette fonction est privée. WeakListener est une
classe interne à MyControl4 et va donc pouvoir appeler cette fonction privée. C’est
WeakListener.Instance_TestEvent que nous allons abonner à l’événement de AppController.
Lors de l’appel de l’événement, elle va vérifier que sa WeakReference vers MyControl4
est toujours valide, si tel est le cas, cette fonction va transmettre l’appel vers
la fonction MyControl4.Instance_TestEvent, sinon elle se désabonne de l’appelant et
pourra donc aussi être collecté par le garbage collector.
</p>
        <div style="font-family: consolas; background: black; color: #e0e0e0; font-size: 10pt">
          <p style="margin: 0px">
    <span style="color: #40c4ff">public</span><span style="color: #40c4ff">partial</span><span style="color: #40c4ff">class</span><span style="color: #66cdaa">MyControl4</span> : <span style="color: #66cdaa">UserControl</span></p>
          <p style="margin: 0px">
    {
</p>
          <p style="margin: 0px">
 
</p>
          <p style="margin: 0px">
        <span style="color: #40c4ff">private</span><span style="color: #40c4ff">class</span><span style="color: #66cdaa">WeakListener</span></p>
          <p style="margin: 0px">
        {
</p>
          <p style="margin: 0px">
            <span style="color: #40c4ff">public</span><span style="color: #eee8aa">WeakListener</span>(<span style="color: #66cdaa">MyControl4</span><span style="color: #eee8aa">target</span>)
</p>
          <p style="margin: 0px">
            {
</p>
          <p style="margin: 0px">
                <span style="color: #eee8aa">weakReference</span><span style="color: silver">=</span><span style="color: #40c4ff">new</span><span style="color: #66cdaa">WeakReference</span>(<span style="color: #eee8aa">target</span>);
</p>
          <p style="margin: 0px">
            }
</p>
          <p style="margin: 0px">
 
</p>
          <p style="margin: 0px">
            <span style="color: #40c4ff">private</span><span style="color: #40c4ff">readonly</span><span style="color: #66cdaa">WeakReference</span><span style="color: #eee8aa">weakReference</span>;
</p>
          <p style="margin: 0px">
 
</p>
          <p style="margin: 0px">
            <span style="color: #40c4ff">public</span><span style="color: #40c4ff">void</span><span style="color: #eee8aa">Instance_TestEvent</span>(<span style="color: #40c4ff">object</span><span style="color: #eee8aa">sender</span>, <span style="color: #66cdaa">EventArgs</span><span style="color: #eee8aa">e</span>)
</p>
          <p style="margin: 0px">
            {
</p>
          <p style="margin: 0px">
                <span style="color: #66cdaa">MyControl4</span><span style="color: #eee8aa">ctrl</span><span style="color: silver">=</span> (<span style="color: #66cdaa">MyControl4</span>)<span style="color: #eee8aa">weakReference</span><span style="color: silver">.</span><span style="color: #eee8aa">Target</span>;
</p>
          <p style="margin: 0px">
 
</p>
          <p style="margin: 0px">
                <span style="color: #40c4ff">if</span> (<span style="color: #eee8aa">ctrl</span><span style="color: silver">!=</span><span style="color: #40c4ff">null</span>)
</p>
          <p style="margin: 0px">
               
{
</p>
          <p style="margin: 0px">
                    <span style="color: #eee8aa">ctrl</span><span style="color: silver">.</span><span style="color: #eee8aa">Instance_TestEvent</span>(<span style="color: #eee8aa">sender</span>, <span style="color: #eee8aa">e</span>);
</p>
          <p style="margin: 0px">
               
}
</p>
          <p style="margin: 0px">
                <span style="color: #40c4ff">else</span></p>
          <p style="margin: 0px">
               
{
</p>
          <p style="margin: 0px">
                   
((<span style="color: #66cdaa">AppController</span>)<span style="color: #eee8aa">sender</span>)<span style="color: silver">.</span><span style="color: #eee8aa">TestEvent</span><span style="color: silver">-=</span><span style="color: #40c4ff">this</span><span style="color: silver">.</span><span style="color: #eee8aa">Instance_TestEvent</span>;
</p>
          <p style="margin: 0px">
               
}
</p>
          <p style="margin: 0px">
            }
</p>
          <p style="margin: 0px">
        }
</p>
          <p style="margin: 0px">
 
</p>
          <p style="margin: 0px">
        <span style="color: #40c4ff">void</span><span style="color: #eee8aa">Instance_TestEvent</span>(<span style="color: #40c4ff">object</span><span style="color: #eee8aa">sender</span>, <span style="color: #66cdaa">EventArgs</span><span style="color: #eee8aa">e</span>)
</p>
          <p style="margin: 0px">
        {
</p>
          <p style="margin: 0px">
            <span style="color: #40c4ff">this</span><span style="color: silver">.</span><span style="color: #eee8aa">LayoutRoot</span><span style="color: silver">.</span><span style="color: #eee8aa">Background</span><span style="color: silver">=</span><span style="color: #40c4ff">new</span><span style="color: #66cdaa">SolidColorBrush</span>(<span style="color: #eee8aa">GetRandomColor</span>());
</p>
          <p style="margin: 0px">
        }
</p>
          <p style="margin: 0px">
 
</p>
          <p style="margin: 0px">
        <span style="color: #eee8aa">…</span></p>
          <p style="margin: 0px">
    }
</p>
        </div>
        <p>
          <a href="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/GestiondelammoiresousSilverlight.Net_97E6/image_14.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/GestiondelammoiresousSilverlight.Net_97E6/image_thumb_6.png" width="447" height="345" />
          </a>
        </p>
        <p>
Un clic sur Add MyControl4, Remove et Force GC vous donnera un compte de référence
de MyControl4 à 0. Il faut noter qu’à ce stade, MyControl4 a été libéré mais le WeakListener
est toujours présent en mémoire. Sa libération ne sera effectué que lorsque l’événement
sera appelé, la classe s’autodésabonnera toute seule de l’événement et pourra est
collectée.
</p>
        <h1>WeakEventList
</h1>
        <p>
J’ai ajouté dans <a href="http://www.slextensions.net" target="_blank">slextensions</a> une
WeakEventList permettant de gérer une liste d’événements basés sur des WeakReference.
A la place de stocker les événements par le processus standard de .Net, nous créons
une liste de WeakReference directement sur les delegates abonnés. 
</p>
        <p>
Voila la déclaration de l’événement de ma class AppController.
</p>
        <div style="font-family: consolas; background: black; color: #e0e0e0; font-size: 10pt">
          <p style="margin: 0px">
        <span style="color: #40c4ff">private</span><span style="color: #66cdaa">WeakEventList</span><span style="color: silver">&lt;</span><span style="color: #66cdaa">EventArgs</span><span style="color: silver">&gt;</span><span style="color: #eee8aa">weakTestEvent</span>;
</p>
          <p style="margin: 0px">
 
</p>
          <p style="margin: 0px">
        <span style="color: #40c4ff">private</span><span style="color: #40c4ff">event</span><span style="color: #2b91af">EventHandler</span><span style="color: silver">&lt;</span><span style="color: #66cdaa">EventArgs</span><span style="color: silver">&gt;</span><span style="color: #eee8aa">testEvent</span>;
</p>
          <p style="margin: 0px">
        <span style="color: #40c4ff">public</span><span style="color: #40c4ff">event</span><span style="color: #2b91af">EventHandler</span><span style="color: silver">&lt;</span><span style="color: #66cdaa">EventArgs</span><span style="color: silver">&gt;</span><span style="color: #eee8aa">TestEvent</span></p>
          <p style="margin: 0px">
        {
</p>
          <p style="margin: 0px">
            <span style="color: #40c4ff">add</span></p>
          <p style="margin: 0px">
            {
</p>
          <p style="margin: 0px">
                <span style="color: #40c4ff">if</span>(<span style="color: #eee8aa">UseWeakEvent</span>)
</p>
          <p style="margin: 0px">
               
{
</p>
          <p style="margin: 0px">
                    <span style="color: #eee8aa">weakTestEvent</span><span style="color: silver">.</span><span style="color: #eee8aa">Event</span><span style="color: silver">+=</span><span style="color: #40c4ff">value</span>;
</p>
          <p style="margin: 0px">
               
}
</p>
          <p style="margin: 0px">
                <span style="color: #40c4ff">else</span></p>
          <p style="margin: 0px">
               
{
</p>
          <p style="margin: 0px">
                    <span style="color: #eee8aa">testEvent</span><span style="color: silver">+=</span><span style="color: #40c4ff">value</span>;                    
</p>
          <p style="margin: 0px">
               
}
</p>
          <p style="margin: 0px">
            }
</p>
          <p style="margin: 0px">
            <span style="color: #40c4ff">remove</span></p>
          <p style="margin: 0px">
            {
</p>
          <p style="margin: 0px">
                <span style="color: #40c4ff">if</span> (<span style="color: #eee8aa">UseWeakEvent</span>)
</p>
          <p style="margin: 0px">
               
{
</p>
          <p style="margin: 0px">
                    <span style="color: #eee8aa">weakTestEvent</span><span style="color: silver">.</span><span style="color: #eee8aa">Event</span><span style="color: silver">-=</span><span style="color: #40c4ff">value</span>;
</p>
          <p style="margin: 0px">
               
}
</p>
          <p style="margin: 0px">
                <span style="color: #40c4ff">else</span></p>
          <p style="margin: 0px">
               
{
</p>
          <p style="margin: 0px">
                    <span style="color: #eee8aa">testEvent</span><span style="color: silver">-=</span><span style="color: #40c4ff">value</span>;
</p>
          <p style="margin: 0px">
               
}
</p>
          <p style="margin: 0px">
            }
</p>
          <p style="margin: 0px">
        }
</p>
        </div>
        <p>
          <a href="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/GestiondelammoiresousSilverlight.Net_97E6/image_16.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/GestiondelammoiresousSilverlight.Net_97E6/image_thumb_7.png" width="449" height="350" />
          </a>
        </p>
        <p>
En cochant la case UseWeakEvent et en reproduisant le cas qui posait problème au début
de ce post ( Add MyControl2, Remove, Force GC), on voit que la référence est bien
libérée.
</p>
        <p>
Vous trouvez plusieurs autres manières de créer des “weakevent” sur internet. Celle-ci
est la seule qui marche en silverlight pour des appels à des fonctions privées. De
nombreuses utilisent la réflexion pour pouvoir accéder à la fonction finale à appeler
par l’événement, ceci n’est pas permit en silverlight si la déclaration est privée.
Le mode MediumTrust de silverlight nous en empêche.
</p>
        <p>
          <iframe style="border-bottom: #dde5e9 1px solid; border-left: #dde5e9 1px solid; padding-bottom: 0px; background-color: #ffffff; margin: 3px; padding-left: 0px; width: 240px; padding-right: 0px; height: 66px; border-top: #dde5e9 1px solid; border-right: #dde5e9 1px solid; padding-top: 0px" marginheight="0" src="http://cid-b7145a2861d183da.skydrive.live.com/embedrowdetail.aspx/Code/TestGarbageCollector.7z" frameborder="0" marginwidth="0" scrolling="no">
          </iframe>
        </p>
        <img width="0" height="0" src="http://www.ucaya.com/blog/aggbug.ashx?id=af21557a-7303-4d47-b283-cc329f7bf921" />
      </body>
      <title>Gestion de la mémoire sous Silverlight / .Net</title>
      <guid isPermaLink="false">http://www.ucaya.com/blog/PermaLink,guid,af21557a-7303-4d47-b283-cc329f7bf921.aspx</guid>
      <link>http://www.ucaya.com/blog/2009/04/24/GestionDeLaM%c3%a9moireSousSilverlightNet.aspx</link>
      <pubDate>Fri, 24 Apr 2009 09:29:36 GMT</pubDate>
      <description>&lt;p&gt;
On m’a interrogé récemment sur la libération de la mémoire des objets en silverlight.
Je vais essayer de synthétiser ici ce que j’ai répondu.
&lt;/p&gt;
&lt;p&gt;
Silverlight réagi exactement de la même manière que le framework .Net. La mémoire
est gérée par un garbage collector (ramasse-miettes) qui libère les allocations mémoires
des objets une fois qu’ils ne sont plus référencés.&amp;#160; 
&lt;/p&gt;
&lt;h1&gt;L’application de test
&lt;/h1&gt;
&lt;p&gt;
Voila le principe de mon application de test. Au clic sur un bouton, mon application
ajoute un usercontrol dans l’arbre visuel et au clic sur un autre bouton, je l’enlève.
La seule référence vers mon contrôle est faite par l’arbre graphique. Dans le constructeur
de mon usercontrol, j’incrémente un compteur qui m’indique le nombre d’instances en
cours et dans le destructeur je le décrémente. Ce compteur est affiché par binding
dans l’interface graphique. 
&lt;/p&gt;
&lt;p&gt;
Petite parenthèse pour le fonctionnement de l’application, la destruction des objets
ne se passe pas dans le thread graphique, pour que la mise a jour du binding fonctionne,
je lève l’événement PropertyChanged de AppController par le SynchronizationContext
récupéré du thread graphique.
&lt;/p&gt;
&lt;h1&gt;Contrôle sans références
&lt;/h1&gt;
&lt;p&gt;
&lt;a href="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/GestiondelammoiresousSilverlight.Net_97E6/image_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/GestiondelammoiresousSilverlight.Net_97E6/image_thumb_1.png" width="465" height="318" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
A l’ajout de mon usercontrol, on note bien l’incrémentation du compteur.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/GestiondelammoiresousSilverlight.Net_97E6/image_6.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/GestiondelammoiresousSilverlight.Net_97E6/image_thumb_2.png" width="489" height="311" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Je clic sur le bouton Remove et je vois que mon compteur est toujours à 1. Le garbage
collector ne passe pas tout de suite. Il y a un algorithme qui détermine quand le
garbage collector doit passer sur les objets. Pour le besoin de mon application, je
vais forcer l’appel au garbage collector au clic sur le bouton Force GC. Il faut noter
que c’est une mauvaise pratique que de vouloir appeler soit même de garbage collector.
GC.Collect() ne doit être appelée que si vous en avez réellement l’utilité. Un appel
trop fréquent peut dégrader les performances de votre application.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/GestiondelammoiresousSilverlight.Net_97E6/image_8.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/GestiondelammoiresousSilverlight.Net_97E6/image_thumb_3.png" width="302" height="311" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Le clic sur Force GC ramène bien le compte de référence à 0.
&lt;/p&gt;
&lt;h1&gt;Contrôle s’abonnant à un événement
&lt;/h1&gt;
&lt;h1&gt;
&lt;/h1&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
Comme je vous le précisait dans le fonctionnement de mon application, je ne maintient
aucune référence vers mes usercontrol, je n’ai théoriquement rien qui va empêcher
le garbage collector de passer. Cependant le contrôle lui même peut faire qu’il ne
sera pas libéré. Ici ma classe AppController fourni un événement auquel mes contrôles
peuvent s’abonner. MyControl2 va s’abonner à cet événement. Au clic sur le bouton
Raise Test event, vous verez que la couleur du usercontrol change.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/GestiondelammoiresousSilverlight.Net_97E6/image_10.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/GestiondelammoiresousSilverlight.Net_97E6/image_thumb_4.png" width="479" height="322" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Si vous ajoutez le usercontrol MyControl2, que vous l’enlevez et que vous forcez le
garbage collector, vous verrez que l’instance ne se libère pas. Que se passe-t-il
? 
&lt;br /&gt;
Lorsque le contrôle s’est abonné à l’événement de AppController, il a créé un EventHandler
(une référence vers une fonction) et l’a ajouté à la liste des fonctions à appeler
lorsque l’événement est levé. Un événement n’est rien d’autre qu’une liste de références
qui pointe vers les fonctions à appeler. Pour que notre contrôle se libère, il faut
donc supprimer cette référence. Un clic sur Clear Test event list demande à AppController
de vider sa liste d’événement, un clic sur Force GC remettra les compteurs à 0.
&lt;/p&gt;
&lt;h1&gt;IDisposable
&lt;/h1&gt;
&lt;p&gt;
Une bonne pratique pour gérer la libération de ressources internes et le désabonnement
d’évenement est d’implémenter l’interface IDisposable. Cette interface vous demande
d’implémenter la fonction Dispose dans laquelle vous pouvez remettre à null les références
externes, vous désabonnez d’événements, etc… 
&lt;br /&gt;
Le usercontrol MyControl3 implémente cette interface. Lorsque le bouton Remove First
Item est cliqué, mon application vérifie si le contrôle à enlever implémente IDisposable
et l’appel le cas échéant. 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/GestiondelammoiresousSilverlight.Net_97E6/image_12.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/GestiondelammoiresousSilverlight.Net_97E6/image_thumb_5.png" width="485" height="313" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Les clics successifs sur Add MyControl3, Remove First Item et Force GC incrémentent
et décrémentent bien notre compteur de références.
&lt;/p&gt;
&lt;h1&gt;WeakReference et proxy d’événement
&lt;/h1&gt;
&lt;p&gt;
Si vous ne maitrisez pas la logique d’ajout suppression des contrôles, vous ne pouvez
pas toujours appeler la IDisposable.Dispose. (A noter que ce n’est pas parce qu’un
contrôle n’est plus dans l’arbre d’affichage qu’il faut nécessairement le disposer.
Un tabcontrol ajoute et enlève chaque tab de l’abre graphique.)
&lt;/p&gt;
&lt;p&gt;
La classe WeakReference permet de maintenir une référence “qui ne compte pas” du point
de vue du garbage collector. La propriété Target de la WeakReference vaut null quand
le garbage collector est passé et renvoi l’instance de l’objet sinon.
&lt;/p&gt;
&lt;p&gt;
Ici pour gérer notre abonnement à l’événement, nous allons utiliser ces WeakReference
pour pouvoir quand même être libéré. La fonction à appeler en retour de l’événement
est : MyControl4.Instance_TestEvent. Cette fonction est privée. WeakListener est une
classe interne à MyControl4 et va donc pouvoir appeler cette fonction privée. C’est
WeakListener.Instance_TestEvent que nous allons abonner à l’événement de AppController.
Lors de l’appel de l’événement, elle va vérifier que sa WeakReference vers MyControl4
est toujours valide, si tel est le cas, cette fonction va transmettre l’appel vers
la fonction MyControl4.Instance_TestEvent, sinon elle se désabonne de l’appelant et
pourra donc aussi être collecté par le garbage collector.
&lt;/p&gt;
&lt;div style="font-family: consolas; background: black; color: #e0e0e0; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #40c4ff"&gt;public&lt;/span&gt; &lt;span style="color: #40c4ff"&gt;partial&lt;/span&gt; &lt;span style="color: #40c4ff"&gt;class&lt;/span&gt; &lt;span style="color: #66cdaa"&gt;MyControl4&lt;/span&gt; : &lt;span style="color: #66cdaa"&gt;UserControl&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #40c4ff"&gt;private&lt;/span&gt; &lt;span style="color: #40c4ff"&gt;class&lt;/span&gt; &lt;span style="color: #66cdaa"&gt;WeakListener&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #40c4ff"&gt;public&lt;/span&gt; &lt;span style="color: #eee8aa"&gt;WeakListener&lt;/span&gt;(&lt;span style="color: #66cdaa"&gt;MyControl4&lt;/span&gt; &lt;span style="color: #eee8aa"&gt;target&lt;/span&gt;)
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #eee8aa"&gt;weakReference&lt;/span&gt; &lt;span style="color: silver"&gt;=&lt;/span&gt; &lt;span style="color: #40c4ff"&gt;new&lt;/span&gt; &lt;span style="color: #66cdaa"&gt;WeakReference&lt;/span&gt;(&lt;span style="color: #eee8aa"&gt;target&lt;/span&gt;);
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #40c4ff"&gt;private&lt;/span&gt; &lt;span style="color: #40c4ff"&gt;readonly&lt;/span&gt; &lt;span style="color: #66cdaa"&gt;WeakReference&lt;/span&gt; &lt;span style="color: #eee8aa"&gt;weakReference&lt;/span&gt;;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #40c4ff"&gt;public&lt;/span&gt; &lt;span style="color: #40c4ff"&gt;void&lt;/span&gt; &lt;span style="color: #eee8aa"&gt;Instance_TestEvent&lt;/span&gt;(&lt;span style="color: #40c4ff"&gt;object&lt;/span&gt; &lt;span style="color: #eee8aa"&gt;sender&lt;/span&gt;, &lt;span style="color: #66cdaa"&gt;EventArgs&lt;/span&gt; &lt;span style="color: #eee8aa"&gt;e&lt;/span&gt;)
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #66cdaa"&gt;MyControl4&lt;/span&gt; &lt;span style="color: #eee8aa"&gt;ctrl&lt;/span&gt; &lt;span style="color: silver"&gt;=&lt;/span&gt; (&lt;span style="color: #66cdaa"&gt;MyControl4&lt;/span&gt;)&lt;span style="color: #eee8aa"&gt;weakReference&lt;/span&gt;&lt;span style="color: silver"&gt;.&lt;/span&gt;&lt;span style="color: #eee8aa"&gt;Target&lt;/span&gt;;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #40c4ff"&gt;if&lt;/span&gt; (&lt;span style="color: #eee8aa"&gt;ctrl&lt;/span&gt; &lt;span style="color: silver"&gt;!=&lt;/span&gt; &lt;span style="color: #40c4ff"&gt;null&lt;/span&gt;)
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
{
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #eee8aa"&gt;ctrl&lt;/span&gt;&lt;span style="color: silver"&gt;.&lt;/span&gt;&lt;span style="color: #eee8aa"&gt;Instance_TestEvent&lt;/span&gt;(&lt;span style="color: #eee8aa"&gt;sender&lt;/span&gt;, &lt;span style="color: #eee8aa"&gt;e&lt;/span&gt;);
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
}
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #40c4ff"&gt;else&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
{
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
((&lt;span style="color: #66cdaa"&gt;AppController&lt;/span&gt;)&lt;span style="color: #eee8aa"&gt;sender&lt;/span&gt;)&lt;span style="color: silver"&gt;.&lt;/span&gt;&lt;span style="color: #eee8aa"&gt;TestEvent&lt;/span&gt; &lt;span style="color: silver"&gt;-=&lt;/span&gt; &lt;span style="color: #40c4ff"&gt;this&lt;/span&gt;&lt;span style="color: silver"&gt;.&lt;/span&gt;&lt;span style="color: #eee8aa"&gt;Instance_TestEvent&lt;/span&gt;;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
}
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #40c4ff"&gt;void&lt;/span&gt; &lt;span style="color: #eee8aa"&gt;Instance_TestEvent&lt;/span&gt;(&lt;span style="color: #40c4ff"&gt;object&lt;/span&gt; &lt;span style="color: #eee8aa"&gt;sender&lt;/span&gt;, &lt;span style="color: #66cdaa"&gt;EventArgs&lt;/span&gt; &lt;span style="color: #eee8aa"&gt;e&lt;/span&gt;)
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #40c4ff"&gt;this&lt;/span&gt;&lt;span style="color: silver"&gt;.&lt;/span&gt;&lt;span style="color: #eee8aa"&gt;LayoutRoot&lt;/span&gt;&lt;span style="color: silver"&gt;.&lt;/span&gt;&lt;span style="color: #eee8aa"&gt;Background&lt;/span&gt; &lt;span style="color: silver"&gt;=&lt;/span&gt; &lt;span style="color: #40c4ff"&gt;new&lt;/span&gt; &lt;span style="color: #66cdaa"&gt;SolidColorBrush&lt;/span&gt;(&lt;span style="color: #eee8aa"&gt;GetRandomColor&lt;/span&gt;());
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #eee8aa"&gt;…&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160; }
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;a href="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/GestiondelammoiresousSilverlight.Net_97E6/image_14.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/GestiondelammoiresousSilverlight.Net_97E6/image_thumb_6.png" width="447" height="345" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
Un clic sur Add MyControl4, Remove et Force GC vous donnera un compte de référence
de MyControl4 à 0. Il faut noter qu’à ce stade, MyControl4 a été libéré mais le WeakListener
est toujours présent en mémoire. Sa libération ne sera effectué que lorsque l’événement
sera appelé, la classe s’autodésabonnera toute seule de l’événement et pourra est
collectée.
&lt;/p&gt;
&lt;h1&gt;WeakEventList
&lt;/h1&gt;
&lt;p&gt;
J’ai ajouté dans &lt;a href="http://www.slextensions.net" target="_blank"&gt;slextensions&lt;/a&gt; une
WeakEventList permettant de gérer une liste d’événements basés sur des WeakReference.
A la place de stocker les événements par le processus standard de .Net, nous créons
une liste de WeakReference directement sur les delegates abonnés. 
&lt;/p&gt;
&lt;p&gt;
Voila la déclaration de l’événement de ma class AppController.
&lt;/p&gt;
&lt;div style="font-family: consolas; background: black; color: #e0e0e0; font-size: 10pt"&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #40c4ff"&gt;private&lt;/span&gt; &lt;span style="color: #66cdaa"&gt;WeakEventList&lt;/span&gt;&lt;span style="color: silver"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #66cdaa"&gt;EventArgs&lt;/span&gt;&lt;span style="color: silver"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #eee8aa"&gt;weakTestEvent&lt;/span&gt;;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #40c4ff"&gt;private&lt;/span&gt; &lt;span style="color: #40c4ff"&gt;event&lt;/span&gt; &lt;span style="color: #2b91af"&gt;EventHandler&lt;/span&gt;&lt;span style="color: silver"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #66cdaa"&gt;EventArgs&lt;/span&gt;&lt;span style="color: silver"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #eee8aa"&gt;testEvent&lt;/span&gt;;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #40c4ff"&gt;public&lt;/span&gt; &lt;span style="color: #40c4ff"&gt;event&lt;/span&gt; &lt;span style="color: #2b91af"&gt;EventHandler&lt;/span&gt;&lt;span style="color: silver"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #66cdaa"&gt;EventArgs&lt;/span&gt;&lt;span style="color: silver"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color: #eee8aa"&gt;TestEvent&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #40c4ff"&gt;add&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #40c4ff"&gt;if&lt;/span&gt;(&lt;span style="color: #eee8aa"&gt;UseWeakEvent&lt;/span&gt;)
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
{
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #eee8aa"&gt;weakTestEvent&lt;/span&gt;&lt;span style="color: silver"&gt;.&lt;/span&gt;&lt;span style="color: #eee8aa"&gt;Event&lt;/span&gt; &lt;span style="color: silver"&gt;+=&lt;/span&gt; &lt;span style="color: #40c4ff"&gt;value&lt;/span&gt;;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
}
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #40c4ff"&gt;else&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
{
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #eee8aa"&gt;testEvent&lt;/span&gt; &lt;span style="color: silver"&gt;+=&lt;/span&gt; &lt;span style="color: #40c4ff"&gt;value&lt;/span&gt;;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; 
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
}
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #40c4ff"&gt;remove&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #40c4ff"&gt;if&lt;/span&gt; (&lt;span style="color: #eee8aa"&gt;UseWeakEvent&lt;/span&gt;)
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
{
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #eee8aa"&gt;weakTestEvent&lt;/span&gt;&lt;span style="color: silver"&gt;.&lt;/span&gt;&lt;span style="color: #eee8aa"&gt;Event&lt;/span&gt; &lt;span style="color: silver"&gt;-=&lt;/span&gt; &lt;span style="color: #40c4ff"&gt;value&lt;/span&gt;;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
}
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #40c4ff"&gt;else&lt;/span&gt;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
{
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: #eee8aa"&gt;testEvent&lt;/span&gt; &lt;span style="color: silver"&gt;-=&lt;/span&gt; &lt;span style="color: #40c4ff"&gt;value&lt;/span&gt;;
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;
}
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }
&lt;/p&gt;
&lt;p style="margin: 0px"&gt;
&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }
&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
&lt;a href="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/GestiondelammoiresousSilverlight.Net_97E6/image_16.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/GestiondelammoiresousSilverlight.Net_97E6/image_thumb_7.png" width="449" height="350" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
En cochant la case UseWeakEvent et en reproduisant le cas qui posait problème au début
de ce post ( Add MyControl2, Remove, Force GC), on voit que la référence est bien
libérée.
&lt;/p&gt;
&lt;p&gt;
Vous trouvez plusieurs autres manières de créer des “weakevent” sur internet. Celle-ci
est la seule qui marche en silverlight pour des appels à des fonctions privées. De
nombreuses utilisent la réflexion pour pouvoir accéder à la fonction finale à appeler
par l’événement, ceci n’est pas permit en silverlight si la déclaration est privée.
Le mode MediumTrust de silverlight nous en empêche.
&lt;/p&gt;
&lt;p&gt;
&lt;iframe style="border-bottom: #dde5e9 1px solid; border-left: #dde5e9 1px solid; padding-bottom: 0px; background-color: #ffffff; margin: 3px; padding-left: 0px; width: 240px; padding-right: 0px; height: 66px; border-top: #dde5e9 1px solid; border-right: #dde5e9 1px solid; padding-top: 0px" marginheight="0" src="http://cid-b7145a2861d183da.skydrive.live.com/embedrowdetail.aspx/Code/TestGarbageCollector.7z" frameborder="0" marginwidth="0" scrolling="no"&gt;
&lt;/iframe&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ucaya.com/blog/aggbug.ashx?id=af21557a-7303-4d47-b283-cc329f7bf921" /&gt;</description>
      <comments>http://www.ucaya.com/blog/CommentView,guid,af21557a-7303-4d47-b283-cc329f7bf921.aspx</comments>
      <category>Dev</category>
      <category>Silverlight</category>
    </item>
    <item>
      <trackback:ping>http://www.ucaya.com/blog/Trackback.aspx?guid=0b41d123-0508-4ded-9957-73d83477b6cc</trackback:ping>
      <pingback:server>http://www.ucaya.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.ucaya.com/blog/PermaLink,guid,0b41d123-0508-4ded-9957-73d83477b6cc.aspx</pingback:target>
      <dc:creator>Romuald Boulanger</dc:creator>
      <georss:point>47.2108230807441 -1.62322998046875</georss:point>
      <wfw:comment>http://www.ucaya.com/blog/CommentView,guid,0b41d123-0508-4ded-9957-73d83477b6cc.aspx</wfw:comment>
      <wfw:commentRss>http://www.ucaya.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=0b41d123-0508-4ded-9957-73d83477b6cc</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Comme vous le savez les 2 projets <a href="http://slextensions.codeplex.com" target="_blank">Silverlight
Extensions</a> et <a href="http://silverlightcontrib.codeplex.com" target="_blank">Silverlight
Contrib</a> sont en cours de fusion : 
</p>
        <p>
          <a href="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/SilverlightExtensions_11E88/image_2.png">
            <img style="border-bottom: 0px; border-left: 0px; margin: 0px 15px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/SilverlightExtensions_11E88/image_thumb.png" width="244" height="114" />
          </a>
        </p>
        <p>
- <a href="http://www.ucaya.com/blog/2009/04/17/SilverlightExtensionsEtSilverlightContrib.aspx" target="_blank">Silverlight
Extensions et Silverlight Contrib</a></p>
        <p>
- <a href="http://www.pagebrooks.com/archive/2009/04/16/the-future-of-silverlight-contrib.aspx" target="_blank">The
Future of Silverlight Contrib</a></p>
        <p>
- <a href="http://blogs.msdn.com/mvpawardprogram/archive/2009/04/23/mvps-shine-silverlight-together-at-mvp-global-summit.aspx">MVPs
Shine Silverlight Together at MVP Global Summit!</a></p>
        <p>
 
</p>
        <p>
Pour l’occasion nous avons mis en place le nouveau site de <a href="http://www.slextensions.net" target="_blank">Silverlight
Extensions</a> sous <a href="http://n2cms.com" target="_blank">N2 CMS</a> et <a href="http://blog.slextensions.net/post/2009/04/16/New-silverlight-Extensions-Blog.aspx" target="_blank">le
futur Blog de Silverlight Extensions</a> sous <a href="http://dotnetblogengine.net" target="_blank">BlogEngine.NET</a>.
</p>
        <p>
* En attendant que la fusion avance, n’oubliez pas d’aller sur les sites des deux
projets <a href="http://www.slextensions.net" target="_blank">Silverlight Extensions</a> et <a href="http://silverlightcontrib.org" target="_blank">Silverlight
Contrib</a>.
</p>
        <img width="0" height="0" src="http://www.ucaya.com/blog/aggbug.ashx?id=0b41d123-0508-4ded-9957-73d83477b6cc" />
      </body>
      <title>Silverlight Extensions</title>
      <guid isPermaLink="false">http://www.ucaya.com/blog/PermaLink,guid,0b41d123-0508-4ded-9957-73d83477b6cc.aspx</guid>
      <link>http://www.ucaya.com/blog/2009/04/23/SilverlightExtensions.aspx</link>
      <pubDate>Thu, 23 Apr 2009 18:24:01 GMT</pubDate>
      <description>&lt;p&gt;
Comme vous le savez les 2 projets &lt;a href="http://slextensions.codeplex.com" target="_blank"&gt;Silverlight
Extensions&lt;/a&gt; et &lt;a href="http://silverlightcontrib.codeplex.com" target="_blank"&gt;Silverlight
Contrib&lt;/a&gt; sont en cours de fusion : 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/SilverlightExtensions_11E88/image_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 15px 0px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/SilverlightExtensions_11E88/image_thumb.png" width="244" height="114" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
- &lt;a href="http://www.ucaya.com/blog/2009/04/17/SilverlightExtensionsEtSilverlightContrib.aspx" target="_blank"&gt;Silverlight
Extensions et Silverlight Contrib&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
- &lt;a href="http://www.pagebrooks.com/archive/2009/04/16/the-future-of-silverlight-contrib.aspx" target="_blank"&gt;The
Future of Silverlight Contrib&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
- &lt;a href="http://blogs.msdn.com/mvpawardprogram/archive/2009/04/23/mvps-shine-silverlight-together-at-mvp-global-summit.aspx"&gt;MVPs
Shine Silverlight Together at MVP Global Summit!&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&amp;#160;
&lt;/p&gt;
&lt;p&gt;
Pour l’occasion nous avons mis en place le nouveau site de &lt;a href="http://www.slextensions.net" target="_blank"&gt;Silverlight
Extensions&lt;/a&gt; sous &lt;a href="http://n2cms.com" target="_blank"&gt;N2 CMS&lt;/a&gt; et &lt;a href="http://blog.slextensions.net/post/2009/04/16/New-silverlight-Extensions-Blog.aspx" target="_blank"&gt;le
futur Blog de Silverlight Extensions&lt;/a&gt; sous &lt;a href="http://dotnetblogengine.net" target="_blank"&gt;BlogEngine.NET&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
* En attendant que la fusion avance, n’oubliez pas d’aller sur les sites des deux
projets &lt;a href="http://www.slextensions.net" target="_blank"&gt;Silverlight Extensions&lt;/a&gt; et &lt;a href="http://silverlightcontrib.org" target="_blank"&gt;Silverlight
Contrib&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ucaya.com/blog/aggbug.ashx?id=0b41d123-0508-4ded-9957-73d83477b6cc" /&gt;</description>
      <comments>http://www.ucaya.com/blog/CommentView,guid,0b41d123-0508-4ded-9957-73d83477b6cc.aspx</comments>
      <category>Dev</category>
      <category>Silverlight</category>
    </item>
    <item>
      <trackback:ping>http://www.ucaya.com/blog/Trackback.aspx?guid=7431b608-eb74-4751-b968-068aab18661c</trackback:ping>
      <pingback:server>http://www.ucaya.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.ucaya.com/blog/PermaLink,guid,7431b608-eb74-4751-b968-068aab18661c.aspx</pingback:target>
      <dc:creator>Romuald Boulanger</dc:creator>
      <georss:point>47.2108230807441 -1.62322998046875</georss:point>
      <wfw:comment>http://www.ucaya.com/blog/CommentView,guid,7431b608-eb74-4751-b968-068aab18661c.aspx</wfw:comment>
      <wfw:commentRss>http://www.ucaya.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=7431b608-eb74-4751-b968-068aab18661c</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Nouvelle version de l’application Silverlight <a href="http://info.francetelevisions.fr" target="_blank">L’info
en vidéo</a>. 
</p>
        <p>
Vous pouvez maintenant retrouver les vidéos des différentes émissions !
</p>
        <p>
          <a href="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/FranceTlvisionLinfoenvido_1463A/image_2.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/FranceTlvisionLinfoenvido_1463A/image_thumb.png" width="488" height="367" />
          </a>
        </p>
        <p>
          <a href="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/FranceTlvisionLinfoenvido_1463A/image_4.png">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/FranceTlvisionLinfoenvido_1463A/image_thumb_1.png" width="491" height="365" />
          </a>
        </p>
        <img width="0" height="0" src="http://www.ucaya.com/blog/aggbug.ashx?id=7431b608-eb74-4751-b968-068aab18661c" />
      </body>
      <title>France Télévisions – L’info en vidéo</title>
      <guid isPermaLink="false">http://www.ucaya.com/blog/PermaLink,guid,7431b608-eb74-4751-b968-068aab18661c.aspx</guid>
      <link>http://www.ucaya.com/blog/2009/04/21/FranceT%c3%a9l%c3%a9visionsLinfoEnVid%c3%a9o.aspx</link>
      <pubDate>Tue, 21 Apr 2009 21:18:26 GMT</pubDate>
      <description>&lt;p&gt;
Nouvelle version de l’application Silverlight &lt;a href="http://info.francetelevisions.fr" target="_blank"&gt;L’info
en vidéo&lt;/a&gt;. 
&lt;/p&gt;
&lt;p&gt;
Vous pouvez maintenant retrouver les vidéos des différentes émissions !
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/FranceTlvisionLinfoenvido_1463A/image_2.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/FranceTlvisionLinfoenvido_1463A/image_thumb.png" width="488" height="367" /&gt;&lt;/a&gt; 
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/FranceTlvisionLinfoenvido_1463A/image_4.png"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/FranceTlvisionLinfoenvido_1463A/image_thumb_1.png" width="491" height="365" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ucaya.com/blog/aggbug.ashx?id=7431b608-eb74-4751-b968-068aab18661c" /&gt;</description>
      <comments>http://www.ucaya.com/blog/CommentView,guid,7431b608-eb74-4751-b968-068aab18661c.aspx</comments>
      <category>Silverlight</category>
    </item>
    <item>
      <trackback:ping>http://www.ucaya.com/blog/Trackback.aspx?guid=557ce4e8-4424-4c98-84e9-f24345e09a89</trackback:ping>
      <pingback:server>http://www.ucaya.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.ucaya.com/blog/PermaLink,guid,557ce4e8-4424-4c98-84e9-f24345e09a89.aspx</pingback:target>
      <dc:creator>Romuald Boulanger</dc:creator>
      <georss:point>47.2108230807441 -1.62322998046875</georss:point>
      <wfw:comment>http://www.ucaya.com/blog/CommentView,guid,557ce4e8-4424-4c98-84e9-f24345e09a89.aspx</wfw:comment>
      <wfw:commentRss>http://www.ucaya.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=557ce4e8-4424-4c98-84e9-f24345e09a89</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
::Au Sénégal::
</p>
        <p>
          <a href="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/UCAYATourNext7_B9D9/Ucaya%20au%20s%C3%A9n%C3%A9gal.jpg" target="_blank">
            <img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Ucaya au sénégal" border="0" alt="Ucaya au sénégal" src="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/UCAYATourNext7_B9D9/Ucaya%20au%20s%C3%A9n%C3%A9gal_thumb.jpg" width="404" height="304" />
          </a>
        </p>
        <p>
Encore le Sénégal :-)
</p>
        <img width="0" height="0" src="http://www.ucaya.com/blog/aggbug.ashx?id=557ce4e8-4424-4c98-84e9-f24345e09a89" />
      </body>
      <title>UCAYA Tour Next 7</title>
      <guid isPermaLink="false">http://www.ucaya.com/blog/PermaLink,guid,557ce4e8-4424-4c98-84e9-f24345e09a89.aspx</guid>
      <link>http://www.ucaya.com/blog/2009/04/21/UCAYATourNext7.aspx</link>
      <pubDate>Tue, 21 Apr 2009 11:13:21 GMT</pubDate>
      <description>&lt;p&gt;
::Au Sénégal::
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/UCAYATourNext7_B9D9/Ucaya%20au%20s%C3%A9n%C3%A9gal.jpg" target="_blank"&gt;&lt;img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="Ucaya au sénégal" border="0" alt="Ucaya au sénégal" src="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/UCAYATourNext7_B9D9/Ucaya%20au%20s%C3%A9n%C3%A9gal_thumb.jpg" width="404" height="304" /&gt;&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Encore le Sénégal :-)
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ucaya.com/blog/aggbug.ashx?id=557ce4e8-4424-4c98-84e9-f24345e09a89" /&gt;</description>
      <comments>http://www.ucaya.com/blog/CommentView,guid,557ce4e8-4424-4c98-84e9-f24345e09a89.aspx</comments>
      <category>Divers</category>
      <category>Ucaya</category>
    </item>
    <item>
      <trackback:ping>http://www.ucaya.com/blog/Trackback.aspx?guid=cfe0a29f-b78f-446b-85ad-c4156d4fa05a</trackback:ping>
      <pingback:server>http://www.ucaya.com/blog/pingback.aspx</pingback:server>
      <pingback:target>http://www.ucaya.com/blog/PermaLink,guid,cfe0a29f-b78f-446b-85ad-c4156d4fa05a.aspx</pingback:target>
      <dc:creator>Thierry Bouquain</dc:creator>
      <georss:point>47.2108230807441 -1.62322998046875</georss:point>
      <wfw:comment>http://www.ucaya.com/blog/CommentView,guid,cfe0a29f-b78f-446b-85ad-c4156d4fa05a.aspx</wfw:comment>
      <wfw:commentRss>http://www.ucaya.com/blog/SyndicationService.asmx/GetEntryCommentsRss?guid=cfe0a29f-b78f-446b-85ad-c4156d4fa05a</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
Comme nous vous le disions dans un précédent post et comme vous avez pu le voir sur
les sites respectifs des deux projets, les 2 projets sont en cours de fusion. Le nom
du projet résultant de cette fusion a été publié par Page Brooks sur un son blog.
Un vote était organisé et c’est le nom silverlight extensions qui a remporté la majorité
des voix. Retrouvez le post de <a href="http://pagebrooks.com/archive/2009/04/16/the-future-of-silverlight-contrib.aspx" target="_blank">Page
Brooks</a></p>
        <p>
          <a href="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/SilverlightExtensionsetSilverlightContri_C9E6/image%5B1%5D_2.png">
            <img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image[1]" border="0" alt="image[1]" src="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/SilverlightExtensionsetSilverlightContri_C9E6/image%5B1%5D_thumb.png" width="496" height="307" />
          </a>  
</p>
        <p>
En attendant que la fusion avance, n’oubliez pas d’aller sur le site web des deux
projets. <a href="http://www.slextensions.net" target="_blank">slextensions</a> et <a href="http://silverlightcontrib.org" target="_blank">silverlight
contrib</a></p>
        <img width="0" height="0" src="http://www.ucaya.com/blog/aggbug.ashx?id=cfe0a29f-b78f-446b-85ad-c4156d4fa05a" />
      </body>
      <title>Silverlight Extensions et Silverlight Contrib</title>
      <guid isPermaLink="false">http://www.ucaya.com/blog/PermaLink,guid,cfe0a29f-b78f-446b-85ad-c4156d4fa05a.aspx</guid>
      <link>http://www.ucaya.com/blog/2009/04/17/SilverlightExtensionsEtSilverlightContrib.aspx</link>
      <pubDate>Fri, 17 Apr 2009 12:21:29 GMT</pubDate>
      <description>&lt;p&gt;
Comme nous vous le disions dans un précédent post et comme vous avez pu le voir sur
les sites respectifs des deux projets, les 2 projets sont en cours de fusion. Le nom
du projet résultant de cette fusion a été publié par Page Brooks sur un son blog.
Un vote était organisé et c’est le nom silverlight extensions qui a remporté la majorité
des voix. Retrouvez le post de &lt;a href="http://pagebrooks.com/archive/2009/04/16/the-future-of-silverlight-contrib.aspx" target="_blank"&gt;Page
Brooks&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/SilverlightExtensionsetSilverlightContri_C9E6/image%5B1%5D_2.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image[1]" border="0" alt="image[1]" src="http://www.ucaya.com/blog/content/binary/WindowsLiveWriter/SilverlightExtensionsetSilverlightContri_C9E6/image%5B1%5D_thumb.png" width="496" height="307" /&gt;&lt;/a&gt;&amp;#160; 
&lt;/p&gt;
&lt;p&gt;
En attendant que la fusion avance, n’oubliez pas d’aller sur le site web des deux
projets. &lt;a href="http://www.slextensions.net" target="_blank"&gt;slextensions&lt;/a&gt; et &lt;a href="http://silverlightcontrib.org" target="_blank"&gt;silverlight
contrib&lt;/a&gt;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.ucaya.com/blog/aggbug.ashx?id=cfe0a29f-b78f-446b-85ad-c4156d4fa05a" /&gt;</description>
      <comments>http://www.ucaya.com/blog/CommentView,guid,cfe0a29f-b78f-446b-85ad-c4156d4fa05a.aspx</comments>
      <category>Dev</category>
      <category>Silverlight</category>
    </item>
  </channel>
</rss>