<?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>Inside .Net &#187; WPF</title>
	<atom:link href="https://blog.developpez.com/yoboue-kouamej/pcategory/wpf/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.developpez.com/yoboue-kouamej</link>
	<description></description>
	<lastBuildDate>Sat, 29 Sep 2012 15:31:19 +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>WPF : Pourquoi créer un data binding par code ?</title>
		<link>https://blog.developpez.com/yoboue-kouamej/p11352/wpf/wpf-pourquoi-creer-un-data-binding-par-code</link>
		<comments>https://blog.developpez.com/yoboue-kouamej/p11352/wpf/wpf-pourquoi-creer-un-data-binding-par-code#comments</comments>
		<pubDate>Sat, 29 Sep 2012 15:12:23 +0000</pubDate>
		<dc:creator><![CDATA[labgate]]></dc:creator>
				<category><![CDATA[Data Binding]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://blog.developpez.com/yoboue-kouamej/?p=74</guid>
		<description><![CDATA[Introduction Le data binding en WPF est un processus qui permet de lier une propriété d&#8217;un objet source à une propriété d&#8217;un objet cible. Cela se fait aisément avec le langage XAML. Mais il y a des cas où le code XAML ne suffit pas. C&#8217;est le cas par exemple où l&#8217;on doit pouvoir ajouter ou supprimer dynamiquement le binding. Préparation Pour cet exercice nous allons créer un projet WPF et y ajouter quelques contrôles [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><strong>Introduction</strong><br />
Le data binding en WPF est un processus qui permet de lier une propriété d&rsquo;un objet source à une propriété d&rsquo;un objet cible. Cela se fait aisément avec le langage XAML. Mais il y a des cas où le code XAML ne suffit pas. C&rsquo;est le cas par exemple où l&rsquo;on doit pouvoir ajouter ou supprimer dynamiquement le binding.</p>
<p><strong>Préparation</strong><br />
Pour cet exercice nous allons créer un projet WPF et y ajouter quelques contrôles de la façon suivante : </p>
<ul>
<li>Lancer Visual Studio et Créer un projet de type <em>WPF Application</em>.</li>
<li>Dans l&rsquo;explorateur de solution (Solution Explorer), double cliquer sur<em> MainWindow.xaml</em> pour ouvrir le designer XAML.</li>
<li>Ajouter un contrôle Slider nommé <em>slider1</em>.</li>
<li>Ajouter un contrôle Label nommé <em>label1</em>.</li>
<li>Ajouter un contrôle CheckBox nommé <em>checkBox1</em>.</li>
</ul>
<p><strong>Binding par XAML</strong><br />
Dans cette partie, nous allons faire le binding avec du XAML. Le but ici est de lier la propriété <em>Value</em> du Slider à la propriété <em>Content</em> du Label.<br />
Pour réaliser cela, il faut remplacer la valeur de la propriété Content du Label, ce qui donne :</p>
<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">&nbsp;Content=&quot;{Binding ElementName=slider1,Path=Value}&quot;</div></div>
<p>Compiler et exécuter l&rsquo;application, changer la valeur du Slider et vous allez voir le contenu du Label changé automatiquement.</p>
<p><strong>Binding par code C#</strong><br />
Ici ce que nous allons faire, c&rsquo;est d&rsquo;ajouter le data binding seulement si la CheckBox est coché et sinon supprimer le data binding.<br />
D&rsquo;où l&rsquo;importance du binding par code car cela nous permet d&rsquo;ajouter ou supprimer dynamiquement le binding entre deux éléments.</p>
<p>Pour réaliser cela, commencer par supprimer la propriété Content du Label et double cliquer sur le contrôle Window (là où le texte MainWindow est écrit dans le designer) pour implémenter la méthode Loaded.<br />
Juste au dessus de la ligne <em>private void Window_Loaded(object sender, RoutedEventArgs e)</em> ajouter un attribut de type Binding à la classe MainWindow avec la ligne suivante :</p>
<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 Binding MyBinding;</div></div>
<p>Dans le code de la méthode Window_Loaded ajouter les lignes suivantes :</p>
<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">MyBinding = new Binding();<br />
MyBinding.ElementName = &quot;slider1&quot;;<br />
MyBinding.Path = new PropertyPath(&quot;Value&quot;);<br />
// On ajoute le binding au lancement de la fenêtre<br />
// en ajoutant la ligne suivante<br />
label1.SetBinding(ContentProperty, MyBinding);</div></div>
<p>Compiler et exécuter votre application et vous allez retrouver les même fonctionnalités que dans la partie précédente.</p>
<p>Pour la gestion de notre CheckBox nous allons ajouter ces deux lignes dans la méthode Window_Loaded</p>
<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">checkBox1.Checked += new RoutedEventHandler(checkBox1_Checked);<br />
checkBox1.Unchecked += new RoutedEventHandler(checkBox1_Unchecked);</div></div>
<p>Ajouter ces deux méthodes après la méthode Window_Loaded :</p>
<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">void checkBox1_Unchecked(object sender, RoutedEventArgs e)<br />
{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
}<br />
<br />
void checkBox1_Checked(object sender, RoutedEventArgs e)<br />
{<br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <br />
}</div></div>
<p>Maintenant à quoi servent ces deux méthodes ?<br />
La première (<em>checkBox1_Unchecked</em>) sera exécutée quand vous cliquez sur la CheckBox pour la décocher et la seconde (<em>checkBox1_Checked</em>) sera executée quand vous cliquez sur la CheckBox pour la cocher.</p>
<p>Pour la première méthode nous allons supprimer le binding. Pour cela, nous allons faire appel à la méthode BindingOperations.ClearBinding comme ceci :</p>
<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">BindingOperations.ClearBinding(label1, ContentProperty);</div></div>
<p>Ajouter cette ligne dans la méthode <em>checkBox1_Unchecked</em>.</p>
<p>Pour la méthode <em>checkBox1_Checked</em> nous allons ajouter cette ligne :</p>
<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">BindingOperations.SetBinding(label1, ContentProperty, MyBinding);</div></div>
<p>Compiler et exécuter la solution (vous pouvez mettre en commentaire la ligne <em>label1.SetBinding(ContentProperty, MyBinding); </em> dans la méthode Window_Loaded pour ne pas ajouter de binding au chargement de la fenêtre), Cocher, Décocher la CheckBox, Changer la valeur du Slider et voilà.</p>
<p><strong>Conclusion</strong><br />
Utiliser le XAML pour spécifier le binding est fort utile, mais il y a des cas où le faire par code reste une bien meilleure solution. Il faut donc être à l&rsquo;aise avec le binding par XAML et par code.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Récupérer la liste des polices installées en WPF</title>
		<link>https://blog.developpez.com/yoboue-kouamej/p11324/wpf/recuperer-la-liste-des-polices-installees-en-wpf</link>
		<comments>https://blog.developpez.com/yoboue-kouamej/p11324/wpf/recuperer-la-liste-des-polices-installees-en-wpf#comments</comments>
		<pubDate>Tue, 18 Sep 2012 16:53:12 +0000</pubDate>
		<dc:creator><![CDATA[labgate]]></dc:creator>
				<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://blog.developpez.com/yoboue-kouamej/?p=43</guid>
		<description><![CDATA[Introduction Ajourd&#8217;hui, nous allons apprendre à récupérer la liste des polices installées sur l&#8217;ordinateur et les afficher dans un contrôle ListBox. Préparation Créer un projet de type WPF Application avec Visual Studio Ajouter un contrôle ListBox et nommez-le listBox1 Manipulations Dans le constructeur de MainWindow, après la ligne InitializeComponent(), ajouter le code suivant : foreach (FontFamily fontFamily in Fonts.SystemFontFamilies) { &#160; &#160; ListBoxItem lbi = new ListBoxItem(); &#160; &#160; lbi.Content = fontFamily.ToString(); &#160; &#160; lbi.FontFamily [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><strong>Introduction</strong><br />
Ajourd&rsquo;hui, nous allons apprendre à récupérer la liste des polices installées sur l&rsquo;ordinateur et les afficher dans un contrôle <em>ListBox</em>.</p>
<p><strong>Préparation</strong></p>
<ul>
<li>Créer un projet de type WPF Application avec Visual Studio</li>
<li>Ajouter un contrôle <em>ListBox</em> et nommez-le <em>listBox1</em></li>
</ul>
<p><strong>Manipulations</strong><br />
Dans le constructeur de <em>MainWindow</em>, après la ligne <em>InitializeComponent()</em>, ajouter le code suivant :</p>
<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">foreach (FontFamily fontFamily in Fonts.SystemFontFamilies)<br />
{<br />
&nbsp; &nbsp; ListBoxItem lbi = new ListBoxItem();<br />
&nbsp; &nbsp; lbi.Content = fontFamily.ToString();<br />
&nbsp; &nbsp; lbi.FontFamily = fontFamily;<br />
&nbsp; &nbsp; listBox1.Items.Add(lbi);<br />
}</div></div>
<p>Exécuter votre projet et voilà, vous savez récupérer la liste des polices installées sur votre ordinateur.</p>
<p>Pour montrer l&rsquo;intérêt de cette manipulation, nous allons compléter notre projet avec un contrôle RichTextBox, et changer la police du texte sélectionné.</p>
<p><strong>Application</strong><br />
Nous allons ajouter un contrôle <em>RichTextBox</em> (nommé <em>richTextBox1</em>). Je vous laisse positionner les éléments comme vous le voulez.<br />
Double cliquez sur le contrôle <em>ListBox</em> pour implémenter l&rsquo;évènement <em>SelectionChanged</em>. </p>
<p>Inserer le code suivant:</p>
<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">richTextBox1.Selection.ApplyPropertyValue<br />
(<br />
FontFamilyProperty, <br />
((ListBoxItem)listBox1.SelectedItem).FontFamily<br />
);</div></div>
<p>Et voilà, il suffit de taper quelque chose dans le contrôle <em>RichTextBox</em>, sélectionnez et choisissez la police que vous voulez affecter au texte.</p>
<p><strong>Conclusion</strong><br />
Le framework .Net met à notre disposition un ensemble d&rsquo;outils nous permettant de de manipuler les polices installées sur notre machine.</p>
]]></content:encoded>
			<wfw:commentRss></wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
