Magazine Internet

[WPF] Sélection de couleurs via ColorBox

Publié le 08 juillet 2009 par Jeremy.jeanson

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.

Vb
Namespace 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 Namespace
C#
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.


Retour à La Une de Logo Paperblog

A propos de l’auteur


Jeremy.jeanson 1573 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte

Dossier Paperblog