WPF 自定义ColorDialog DropDownCustomColorPicker

摘要:
3、优化使用鼠标选取像素点的操作,代码逻辑更简洁、操作更流畅。

今天分享一个 WPF 版的ColorDialog,该控件源自 这里,不过笔者已经该控件做了大量的修改工作,以适应自己的产品需求,闲话少说,先看看效果图:

1、DropDownCustomColorPicker 效果图

先看原项目的(喜欢这种方式的,请到 这里下载源码 )

WPF 自定义ColorDialog DropDownCustomColorPicker第1张WPF 自定义ColorDialog DropDownCustomColorPicker第2张

被笔者修改之后的效果图:

WPF 自定义ColorDialog DropDownCustomColorPicker第3张WPF 自定义ColorDialog DropDownCustomColorPicker第4张

二、DropDownCustomColorPicker 四种颜色选择方式

第一种:单击任意一个预定义的颜色即可。

这些颜色通过反射Colors 中的属性获得的, 笔者 对这些颜色进行排序,视觉效果更美观了。

    /// <summary>
    ///反射预定义颜色
    /// </summary>
    public classCustomColors
    {
        List<Color> selectableColors = null;
        public List<Color>SelectableColors
        {
            get { returnselectableColors; }
            set { selectableColors =value; }
        }
        publicCustomColors()
        {
            var list = new List<Color>();
            Type ColorsType = typeof(Colors);
            PropertyInfo[] ColorsProperty =ColorsType.GetProperties();
            foreach (PropertyInfo property inColorsProperty)
            {
                list.Add((Color)ColorConverter.ConvertFromString(property.Name));
            }
            list.Sort(new Comparison<Color>((Color x, Color y) =>
            {
                var xtotal = x.R + x.G +x.B;
                var ytotal = y.R + y.G +y.B;
                return xtotal.CompareTo(ytotal); //升序排列
}));
            selectableColors =list;
        }
    }
反射 Colors 中的预定义颜色 并排序

第二种:使用鼠标选择图像中任意一个像素点的颜色

该控件原作者使用的是CroppedBitmap 来获取指定像素点的颜色值,还有一种方式WriteableBitmap,也可以达到类似的目的

        private Color GetColorFromImage(int i, intj)
        {
            CroppedBitmap cb = new CroppedBitmap(image.Source asBitmapSource,
                newInt32Rect(i,
                    j, 1, 1));
            byte[] color = new byte[4];
            cb.CopyPixels(color, 4, 0);
            Color Colorfromimagepoint = Color.FromArgb((byte)SdA.Value, color[2], color[1], color[0]);
            returnColorfromimagepoint;
        }
使用 CroppedBitmap 获取指定像素点的颜色值

第三种:手动输入 十六进制数所表示的ARGB颜色值

第四种:手动滑动Slider 选择 ARGB颜色值

三、DropDownCustomColorPicker 中DropDown 的实现方式

原作者采用的 右键菜单,其实笔者更倾向于使用 Popup,不过这一点、笔者没有去做修改。

四、笔者的优化

1、预定义颜色的排序、视觉效果更美观

2、Expander 控件的自动折叠和展开、操作更方便。

3、优化使用鼠标选取像素点的操作,代码逻辑更简洁、操作更流畅。

4、增加了SelectedColorChangedEvent 、DropDownStateChangedEvent 事件

5、使用Slider 替代了 TextBox 来修改 RGB 颜色值

6、增加了几个配置属性,使用起来更方便。

7、该项目会继续进行扩展及优化,敬请期待。

五、完整的源码

完整的源码, 笔者已上传至Github, https://github.com/iqingyu/BlogsDemo:

DropDownCustomColorPicker

DropDownCustomColorPicker.Test

两个项目为完整的Demo

该项目会继续进行扩展及优化,敬请期待。

免责声明:文章转载自《WPF 自定义ColorDialog DropDownCustomColorPicker》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Java 定时任务基于kubernetes实现链路监控下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

VS编程,WPF中,关于TextBlock与TextBox 控件文本垂直居中或者水平居中的说明

有时为了显示的美观性,需要将文本控件中的文字垂直或者水平居中,这里说明一下需要注意的地方。 1、对于指定了长、宽的区域,用TextBox实现文本居中例如:一个长400,高100的文本框,要实现文字居中 <TextBox FontSize="36"Width=" 400"Height=" 100"HorizontalContentAlignment="...

学习WPF——了解WPF中的XAML

XAML的简单说明 XAML是用于实例化.NET对象的标记语言,主要用于构建WPF的用户界面 XAML中的每一个元素都映射为.NET类的一个实例,例如<Button>映射为WPF的Button对象 XAML可以在一个元素中嵌套另一个元素,例如Grid元素可以嵌套Button元素   了解XAML VisualStudio创建一个窗口,默认...

wpf prism加载独立模块实例

一、首先看看文件的组织架构 module1 module2生成dll某块。Shell来显示管理模块 二,看看关键bootstrapper类 using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tas...

WPF 设置全屏

public void setaa() { #region 设置全屏 this.WindowState = System.Windows.WindowState.Normal; this.WindowStyle = System.Windows.WindowStyle....

【WPF】2、美化控件

控件有默认样式,但是有时候默认样式并不够用,就需要美化。 1、常用的方法是美术出图,直接贴图进去,效果又好又简单(对程序来说)。 用图片有三种方式:设置控件背景图片、设置控件内容为图片和直接使用图片做控件三种。 <Window x:Class="战五渣之环游世界.WPF.Window1" xmlns="http://schemas....

WPF 创建桌面快捷方式

#region 创建桌面快捷方式 string deskTop = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Desktop); string dirPath = System.Environment.CurrentDirectory;...