Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何按颜色值或亮度对预定义的颜色进行排序,就像在google drive的调色板上一样?_C#_Wpf_Sorting_Colors - Fatal编程技术网

C# 如何按颜色值或亮度对预定义的颜色进行排序,就像在google drive的调色板上一样?

C# 如何按颜色值或亮度对预定义的颜色进行排序,就像在google drive的调色板上一样?,c#,wpf,sorting,colors,C#,Wpf,Sorting,Colors,我将我的列表框的项目资源绑定为: <ObjectDataProvider MethodName="GetType" ObjectType="{x:Type sys:Type}" x:Key="colorsTypeOdp"> <ObjectDataProvider.MethodParameters> <sys:String>System.Windows.Media.Colors, PresentationCore,

我将我的
列表框的
项目资源
绑定为:

<ObjectDataProvider MethodName="GetType" ObjectType="{x:Type sys:Type}" x:Key="colorsTypeOdp">
    <ObjectDataProvider.MethodParameters>
        <sys:String>System.Windows.Media.Colors, PresentationCore,
                Version=3.0.0.0, Culture=neutral,
                PublicKeyToken=31bf3856ad364e35</sys:String>
    </ObjectDataProvider.MethodParameters>
</ObjectDataProvider>

<ObjectDataProvider ObjectInstance="{StaticResource colorsTypeOdp}"
    MethodName="GetProperties" x:Key="colorPropertiesOdp">
</ObjectDataProvider>

如何在转换器中对数组进行排序,以便按照十六进制值或亮度对颜色进行排序?

十六进制值

根据需要,您可以使用
System.Windows.Media.ColorConverter
获取颜色的十六进制值

var colorConverter = new ColorConverter();
string hexColorValue = colorConverter.ConvertToString(myColor);
当你有一个颜色列表,你可以简单地做

List<Color> SortByHex(List<Color> colors)
{
    var colorConverter = new ColorConverter();
    return color.OrderBy(c => colorConverter.ConvertToString(c)).ToList();
}
比照

List SortByBrightness(列表颜色)
{
返回color.OrderBy(GetBrightness.ToList();
}

请注意:建议的选项在您的开箱即用代码中不起作用,但您必须弄清楚如何在代码中使用它们。无论如何,它们应该足够作为一个起点。

简单地绑定到一个排序的集合不是更容易吗?而且您可以通过调用
(Color)info.GetValue(null)
,从属性信息中获取颜色,所以您基本上可以调用
result.OrderBy(x=>((Color)x.GetValue(null)).GetBrightness()).ToList()根据Paul的帖子,假设您创建了颜色的扩展方法GetBrightness。
var colorConverter = new ColorConverter();
string hexColorValue = colorConverter.ConvertToString(myColor);
List<Color> SortByHex(List<Color> colors)
{
    var colorConverter = new ColorConverter();
    return color.OrderBy(c => colorConverter.ConvertToString(c)).ToList();
}
public static float GetBrightness(System.Windows.Media.Color c)
{
    return System.Drawing.Color.FromArgb(c.A, c.R, c.G, c.B).GetBrightness();
}
List<Color> SortByBrightness(List<Color> colors)
{
    return color.OrderBy(GetBrightness).ToList();
}