WPF n’incluent pas de ColorBox il nous faut utiliser celle qui se trouve dans System.Windows.Forms et procéder à des conversions de couleurs. Car comme de bien entendu une couleur de Winform n’est pas une couleur de WPF.
Pour ne pas avoir a faire et refaire ce genre de codes des centaines de fois j’ai réalisé une petite classe qui reprend les actions communément réalisés avec la ColorBox. Afin de ne pas se retrouver à manipuler des DialogResult de System.Windows.Forms, le retour de la méthode ShowDialog() est un nullable qui ne contient une couleur que se l’utilisateur en a choisi une.
VbNamespace MyLib.WPF ''' <summary> ''' Boite de dialogue de selection de couleurs ''' </summary> ''' <remarks></remarks> Public Class ColorBox ''' <summary> ''' Afficher la boite de dialogue ''' </summary> ''' <returns></returns> Public Function ShowDialog() As Nullable(Of System.Windows.Media.Color) Return Me.ShowDialog(Nothing) End Function ''' <summary> ''' Afficher la boite de dialogue en choisissant une couleur ''' </summary> ''' <param name="color"></param> ''' <returns></returns> Public Function ShowDialog(ByVal color As Nullable(Of System.Windows.Media.Color)) As Nullable(Of System.Windows.Media.Color) ' Instancier une boite de dilogue de Winform Dim dialogBox As New System.Windows.Forms.ColorDialog() ' Configurer cette boite If color.HasValue Then dialogBox.Color = System.Drawing.Color.FromArgb(color.Value.A, color.Value.R, color.Value.G, color.Value.B) End If ' Affichage de la boite de dialogue If dialogBox.ShowDialog() = System.Windows.Forms.DialogResult.OK Then ' Retourner la couleur choisie Return System.Windows.Media.Color.FromArgb(dialogBox.Color.A, dialogBox.Color.R, dialogBox.Color.G, dialogBox.Color.B) Else ' Selection annulée Return Nothing End If End Function End Class End NamespaceC#
namespace MyLib.WPF { /// <summary> /// Boite de dialogue de selection de couleurs /// </summary> public class ColorBox { /// <summary> /// Afficher la boite de dialogue /// </summary> /// <returns></returns> public Nullable<System.Windows.Media.Color> ShowDialog() { return this.ShowDialog(null); } /// <summary> /// Afficher la boite de dialogue en choisissant une couleur /// </summary> /// <param name="color"></param> /// <returns></returns> public Nullable<System.Windows.Media.Color> ShowDialog(Nullable<System.Windows.Media.Color> color) { // Instancier une boite de dilogue de Winform System.Windows.Forms.ColorDialog dialogBox = new System.Windows.Forms.ColorDialog(); // Configurer cette boite if (color.HasValue) { dialogBox.Color = System.Drawing.Color.FromArgb(color.Value.A, color.Value.R, color.Value.G, color.Value.B); } // Affichage de la boite de dialogue if (dialogBox.ShowDialog() == System.Windows.Forms.DialogResult.OK) { // Retourner la couleur choisie return System.Windows.Media.Color.FromArgb(dialogBox.Color.A, dialogBox.Color.R, dialogBox.Color.G, dialogBox.Color.B); } else { // Selection annulée return null; } } } }
Votre projet doit référencer System.Windows.Forms et System.Drawing pour fonctionner.