Académique Documents
Professionnel Documents
Culture Documents
U 2020-2021
1. Introduction
Les contrôles utilisateur permettent de créer ses propres contrôles composites, basés sur les
éléments de la plateforme (ici WPF, mais ce concept existe également avec ASP ou Windows
Form). Nous verrons également par l'exemple un concept important de l'interaction
vue/code-behind, les propriétés de dépendance, ou Dependency Properties).
3. Création de l’application
Pour réaliser un contrôle utilisateur, il suffit d'ajouter un nouvel élément "User Control" dans
le projet Visual Studio.
3.1. Créer un projet WPF
- Créez un nouveau projet WPF.
- Donnez le nom « PortableBoutique» a votre projet
3.2. Créer l’interface avec XAML
Avant de nous lancer dans le XAML, nous allons expliquez notre application,
PortableBoutique est une application de vente des Smartphones.
Pour notre application nous allons utiliser les contrôles suivants :
Listbox : c'est un ItemsControl , ce qui signifie qu’il peut contenir une collection
d’objets de n’importe quel type (par exemple, une chaîne, une image ou un panneau).
Border : dessine une bordure, un arrière-plan ou les deux autour d'un autre
élément.
StackPanel : dispose des éléments enfants sur une seule ligne orientée
horizontalement ou verticalement.
2 Boutons dans le StackPanel
Contrôle Utilisateur
1/10
Module : Programmation .NET / C# 2ATEL A.U 2020-2021
XAML :
<Window x:Class="PortableBoutique.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:PortableBoutique"
mc:Ignorable="d"
Title="Boutique Farah" Height="350" Width="525">
<Grid Background="#FF1D456F">
<ListBox x:Name="L_prod" Margin="0,0,324,0"/>
</StackPanel>
</Grid>
</Window>
2/10
Module : Programmation .NET / C# 2ATEL A.U 2020-2021
WPF introduit un concept très pratique : La possibilité de sauvegarder des données en tant que
ressource, aussi bien localement pour un contrôle, que localement pour la fenêtre entière ou encore
globalement pour l'application entière. Ce concept est beaucoup utilisé pour les styles et les
modèles.
- Regardez l’interface après avoir appliqué les propriétés du style :
3/10
Module : Programmation .NET / C# 2ATEL A.U 2020-2021
Maintenant, nous allons désactivez le bouton qui permet de réduire, et agrandir notre
fenêtre :
- Ajoutez ce code à l’intérieur de la balise Window, après la propriété Width :
WindowStartupLocation="CenterScreen" WindowStyle="ToolWindow"
4/10
Module : Programmation .NET / C# 2ATEL A.U 2020-2021
- Créez un contrôle utilisateur TelPortable ayant une interface contenant les contrôles
suivants :
Label
Image
Pour créer un contrôle utilisateur aller sur le menu projet cliquer sur Add>User Control..
5/10
Module : Programmation .NET / C# 2ATEL A.U 2020-2021
6/10
Module : Programmation .NET / C# 2ATEL A.U 2020-2021
XAML :
<UserControl x:Class="PortableBoutique.TelPortable"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:PortableBoutique"
mc:Ignorable="d"
d:DesignHeight="450" Loaded="UserControl_Loaded"
SizeChanged="UserControl_SizeChanged" Width="350">
<Grid Height="170" Width="100">
<Grid>
<Label Content="{Binding Path=Prix}" Height="30" Foreground="White"
HorizontalAlignment="Center" Margin="25,140,20,0" Name="label1"
VerticalAlignment="Top" Width="55" FontSize="16" />
</Grid>
</Grid>
</UserControl>
7/10
Module : Programmation .NET / C# 2ATEL A.U 2020-2021
Pour que la valeur initiale du label1 et image1.Source du Contrôle soit effectivement prise
en compte dans le Prix et Photo, il faut simplement rafraîchir la valeur. Mais comme celle ci
est déjà dans sont état final et qu’elle ne bougera pas à moins d’avoir une valeur différente,
on va la forcer à prendre une valeur par défaut puis on lui réaffectera sa valeur initiale.
On effectuera ce changement dans l’évènement Loaded du contrôle utilisateur afin que les
valeurs initiales externes soit bien fixées.
8/10
Module : Programmation .NET / C# 2ATEL A.U 2020-2021
Enfin pour ne pas permettre le redimensionnement du user control Produit ajoutez le code
suivant :
Déboguez le projet, vous devez trouver le contrôle TelPortabe installé dans la boîte à outils.
9/10
Module : Programmation .NET / C# 2ATEL A.U 2020-2021
5.1.2. XALM
Dans XAML cible définir le Namespace:
xmlns:USERCONTROL="clr-namespace:Namespace"
Dans notre exemple :
10/10