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 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.
