如何按照谷歌驱动器中的调色板上的颜色值或亮度对预定义颜色进行排序?

时间:2017-09-20 09:50:03

标签: c# wpf sorting colors

我将ItemsSource的{​​{1}}绑定为:

ListBox

我的ListBoX Xaml:

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

转换器

<ListBox x:Name="coloListBox" Style="{x:Null}"
         ItemsSource="{Binding Source={StaticResource colorPropertiesOdp}, 
         Converter={StaticResource ColSortConverter}}"
         SelectedItem="{Binding SelectedColor,Mode=TwoWay,RelativeSource={RelativeSource TemplatedParent},Converter={StaticResource ColorToStringConverter}}">
     <ListBox.ItemTemplate>
         <DataTemplate>
             <Rectangle Fill="{Binding Name}" Width="15" Height="15" Stroke="#FF211E1E" OpacityMask="Black" StrokeThickness="1"/>
         </DataTemplate>
     </ListBox.ItemTemplate>
     <ListBox.ItemsPanel>
         <ItemsPanelTemplate>
             <WrapPanel Width="250" Orientation="Horizontal"/>
         </ItemsPanelTemplate>
     </ListBox.ItemsPanel>
</ListBox>

如何对转换器中的数组进行排序,以便根据HEX值或亮度对颜色进行排序?

1 个答案:

答案 0 :(得分:2)

<强>六角值

根据this answer,您可以使用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();
}

<强>亮度

See here了解如何将System.Windows.Media.Color转换为亮度。

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();
}

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