<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Jérôme Lambert &#187; Xaml</title>
	<atom:link href="https://blog.developpez.com/jerome/pcategory/net/xaml/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/jerome</link>
	<description>My Microsoft Development World</description>
	<lastBuildDate>Mon, 17 Dec 2012 11:34:42 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.42</generator>
	<item>
		<title>Manga Reader, le lecteur de book Manga en WPF</title>
		<link>https://blog.developpez.com/jerome/p4802/net/manga_reader_le_lecteur_de_book_manga_en</link>
		<comments>https://blog.developpez.com/jerome/p4802/net/manga_reader_le_lecteur_de_book_manga_en#comments</comments>
		<pubDate>Wed, 16 Jan 2008 23:00:05 +0000</pubDate>
		<dc:creator><![CDATA[Jérôme Lambert]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[Logiciels]]></category>
		<category><![CDATA[WPF]]></category>
		<category><![CDATA[Xaml]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Fan de Manga, je ne pouvais pas passer à côté de cette actualité que j&#8217;ai eu le plaisir de lire sur le blog de Mitsu. Souvenez-vous de WPFBookControl que Mitsu avait développé afin de mettre en oeuvre les possibités de Windows Presentation Foundation. Cette application était vraiment impressionnante et quelqu&#8217;un a eu l&#8217;idée de s&#8217;en servir de base pour développer un lecteur de book Manga appelé Manga Reader. Le résultat est impressionnant : http://mangareader.wordpress.com/ Bonne [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><font face="Tahoma" size="2">Fan de Manga, je ne pouvais pas passer à côté de cette actualité que j&rsquo;ai eu le plaisir de lire sur <a href="http://blogs.msdn.com/mitsu/default.aspx">le blog de <strong>Mitsu</strong></a>.</font></p>
<p><center><img src="http://blog.developpez.com/media/bleachmangareader_04.png" width="600" height="180" alt="" /></center></p>
<p><font face="Tahoma" size="2">Souvenez-vous de <strong><a href="http://blogs.msdn.com/mitsu/archive/2007/04/18/wpf-book-control.aspx">WPFBookControl</a></strong> que Mitsu avait développé afin de mettre en oeuvre les possibités de Windows Presentation Foundation. Cette application était vraiment impressionnante et quelqu&rsquo;un a eu l&rsquo;idée de s&rsquo;en servir de base pour développer un lecteur de book Manga appelé <strong>Manga Reader</strong>. Le résultat est impressionnant : http://mangareader.wordpress.com/</font></p>
<p><font face="Tahoma" size="2">Bonne lecture <img src="https://blog.developpez.com/jerome/wp-includes/images/smilies/icon_smile.gif" alt=":)" class="wp-smiley" /></font></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>A la découverte de Silverlight : Le curseur</title>
		<link>https://blog.developpez.com/jerome/p4469/net/title_78</link>
		<comments>https://blog.developpez.com/jerome/p4469/net/title_78#comments</comments>
		<pubDate>Wed, 07 Nov 2007 00:00:14 +0000</pubDate>
		<dc:creator><![CDATA[Jérôme Lambert]]></dc:creator>
				<category><![CDATA[.NET]]></category>
		<category><![CDATA[C#]]></category>
		<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[Xaml]]></category>

		<guid isPermaLink="false"></guid>
		<description><![CDATA[Tout a commencé bêtement en regardant la liste des curseurs disponibles pour une application Silverlight… Quelle surprise en découvrant ce qu’il m’était proposé : Une simple énumération ! Quelle déception quand même… Impossible donc de créer son propre curseur à partir d’un objet Image. Enfin quoique car si on regarde les évènements d’un Canvas ou de tout autre contrôles Silverlight, il est possible d’être notifié lorsque la souris entre dans la zone, se déplace et [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><font face="Tahoma">Tout a commencé bêtement en regardant la liste des curseurs disponibles pour une application Silverlight… Quelle surprise en découvrant ce qu’il m’était proposé :</font></p>
<p><img src="http://jlambert.developpez.com/tutoriels/silverlight/decouvertes/images/curseur/enumcurseurs.PNG" /></p>
<p><font face="Tahoma">Une simple énumération ! Quelle déception quand même… Impossible donc de créer son propre curseur à partir d’un objet <strong>Image</strong>. Enfin quoique car si on regarde les évènements d’un <strong>Canvas</strong> ou de tout autre contrôles Silverlight, il est possible d’être notifié lorsque la souris entre dans la zone, se déplace et quitte cette zone. Alors pourquoi ne pas créer son propre curseur et réagir correctement aux évènements ? On retrousse ses manches et c’est parti !</font></p>
<p><span id="more-125"></span></p>
<p><font face="Tahoma">Dans un premier temps, il nous faut un nouveau curseur et on va faire simple avec une simple petite bulle mais rien n’empêche les plus courageux à utiliser une image, ça revient au même. On crée donc une simple méthode qui va nous retourner une instance du contrôle Ellipse :</font></p>
<blockquote>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">private Ellipse CreateCursor() <br />
{ <br />
&nbsp; &nbsp; Ellipse objEllipse = new Ellipse(); <br />
&nbsp;<br />
&nbsp; &nbsp; objEllipse.Height = 24; <br />
&nbsp; &nbsp; objEllipse.Width = 24; <br />
&nbsp; &nbsp; objEllipse.Opacity = 0.7; <br />
&nbsp; &nbsp; RadialGradientBrush objRadialGradientBrush = new RadialGradientBrush(); <br />
&nbsp; &nbsp; GradientStop objGradientStop1 = new GradientStop(); <br />
&nbsp; &nbsp; GradientStop objGradientStop2 = new GradientStop(); <br />
&nbsp; &nbsp; objGradientStop1.Color = Color.FromArgb(244, 255, 214, 227); <br />
&nbsp; &nbsp; objGradientStop1.Offset = 0; <br />
&nbsp; &nbsp; objGradientStop2.Color = Color.FromArgb(255, 193, 62, 150); <br />
&nbsp; &nbsp; objGradientStop2.Offset = 1; <br />
&nbsp; &nbsp; objRadialGradientBrush.GradientStops.Add(objGradientStop1); <br />
&nbsp; &nbsp; objRadialGradientBrush.GradientStops.Add(objGradientStop2); <br />
&nbsp; &nbsp; objEllipse.Fill = objRadialGradientBrush; <br />
&nbsp;<br />
&nbsp; &nbsp; return objEllipse; <br />
}</div></div>
</blockquote>
<p><font face="Tahoma">A chaque fois qu’on aura besoin d’une nouvelle instance de notre curseur personnalisé, il nous suffira d’appeler la méthode <strong>CreateCursor</strong>.</font></p>
<p><font face="Tahoma">A présent, prenons notre <strong>Canvas</strong> dans notre code <em>Xaml</em> et insérons le code nécessaire pour qu’il appelle les bonnes méthodes lors des évènements <strong>MouseMove</strong>, <strong>MouseMove</strong> et <strong>MouseLeave</strong> :</font></p>
<p><img src="http://jlambert.developpez.com/tutoriels/silverlight/decouvertes/images/curseur/canvasxaml.PNG" /></p>
<p><font face="Tahoma">Pour le code qui va intervenir lors du déclenchement de ces évènements, ce n’est pas sorcier :</font></p>
<ul>
<li><font face="Tahoma">MouseEnter : On désactive le curseur pour placer notre curseur personnalisé.</font></li>
<li><font face="Tahoma">MouseMove : A chaque déplacement de la souris, on replace notre curseur personnalisé.</font></li>
<li><font face="Tahoma">MouseLeave : On retire notre curseur personnalisé et on réactive le curseur par défaut.</font></li>
</ul>
<blockquote>
<div class="codecolorer-container text default" style="overflow:auto;white-space:nowrap;border:1px solid #9F9F9F;width:435px;height:300px;"><div class="text codecolorer" style="padding:5px;font:normal 12px/1.4em Monaco, Lucida Console, monospace;white-space:nowrap">private Ellipse m_Cursor2 = null; <br />
private void canvasCase2_MouseEnter(object sender, MouseEventArgs e) <br />
{ <br />
&nbsp; &nbsp; // Le rectangle ayant le curseur au dessus de lui <br />
&nbsp; &nbsp; // On désactive le curseur qui sera remplacé par après par un curseur personnalisé <br />
&nbsp; &nbsp; Cursor = Cursors.None; <br />
&nbsp;<br />
&nbsp; &nbsp; // Création du curseur personnalisé <br />
&nbsp; &nbsp; if (m_Cursor2 == null) <br />
&nbsp; &nbsp; { <br />
&nbsp; &nbsp; &nbsp; &nbsp; m_Cursor2 = CreateCursor(); <br />
&nbsp; &nbsp; &nbsp; &nbsp; // Ajout du curseur personnalisé à la liste des contrôles enfants de la fenêtre <br />
&nbsp; &nbsp; &nbsp; &nbsp; canvasCase2.Children.Add(m_Cursor2); <br />
&nbsp; &nbsp; } <br />
&nbsp;<br />
&nbsp; &nbsp; canvasCase2_MouseMove(sender, e); <br />
} <br />
private void canvasCase2_MouseMove(object sender, MouseEventArgs e) <br />
{ <br />
&nbsp; &nbsp; // On place le curseur personnalisé <br />
&nbsp; &nbsp; m_Cursor2.SetValue&lt;double&gt;(Canvas.LeftProperty, e.GetPosition(canvasCase2).X - m_Cursor2.Width / 2); <br />
&nbsp; &nbsp; m_Cursor2.SetValue&lt;double&gt;(Canvas.TopProperty, e.GetPosition(canvasCase2).Y - m_Cursor2.Height / 2); <br />
} <br />
private void canvasCase2_MouseLeave(object sender, EventArgs e) <br />
{ <br />
&nbsp; &nbsp; // On remet le curseur par defaut <br />
&nbsp; &nbsp; Cursor = Cursors.Default; <br />
&nbsp;<br />
&nbsp; &nbsp; // On retire le curseur personnalisé <br />
&nbsp; &nbsp; canvasCase2.Children.Remove(m_Cursor2); <br />
&nbsp;<br />
&nbsp; &nbsp; m_Cursor2 = null; <br />
}</div></div>
</blockquote>
<p><font face="Tahoma">En fait, rien de bien méchant pour le résultat suivant :</font></p>
<p><img src="http://jlambert.developpez.com/tutoriels/silverlight/decouvertes/images/curseur/curseurpersonnalise.PNG" /></p>
<p><font face="Tahoma">Après ce petit essai, je suis parti sur quelques petites variantes plutôt amusantes qu’utiles, comme par exemple un curseur qui laisse des traces par où il passe :</font></p>
<p><img src="http://jlambert.developpez.com/tutoriels/silverlight/decouvertes/images/curseur/curseurtraces.PNG" /></p>
<p><font face="Tahoma">Ou encore un système de tampon, c&rsquo;est-à-dire qu’à chaque clique de souris, on laisse une empreinte du curseur. Pour cela, il suffit d’intercepter l’évènement <strong>MouseLeftButtonDown</strong> :</font></p>
<p><img src="http://jlambert.developpez.com/tutoriels/silverlight/decouvertes/images/curseur/curseurtampon.PNG" /></p>
<p><font face="Tahoma">Comme je l’ai dit précédemment, les possibilités sont nombreuses et rien ne vous empêche d’utiliser vos propres images qui donneront une meilleure impression d’icône qui se déplace. Par contre, ne me jetez pas la pierre si il y a une technique plus évidente pour personnaliser son curseur, je vous avoue que tout ceci a été fait à l’intuition sans trop savoir si plus évident il y a.</font></p>
<p><font face="Tahoma">Je vous laisse suivre votre imagination pour la suite&#8230;</font></p>
<p><font face="Tahoma">Le projet complet avec les sources en C# est disponible ici : <a href="http://jlambert.developpez.com/tutoriels/silverlight/decouvertes/fichiers/Curseur.zip">Version Zip</a> – <a href="http://jlambert.developpez.com/tutoriels/silverlight/decouvertes/fichiers/Curseur.rar">Version Rar</a></font></p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
