我将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值或亮度对颜色进行排序?
答案 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();
}
请注意:建议的选项不适用于您的代码开箱即用,但您必须弄清楚如何使用它们在你的代码中。无论如何,它们应该足以作为起点。