Here is a WinForms version:
DataItemCollection layers = Autodesk.AutoCAD.ApplicationServices.Application.UIBindings.Collections.Layers;
var bs = new BindingSource(layers, null);
comboBox1.DataSource = bs;
comboBox1.DrawMode = DrawMode.OwnerDrawFixed;
comboBox1.DrawItem += (o, args) =>
{
ICustomTypeDescriptor dataItem = layers[args.Index];
PropertyDescriptorCollection properties = dataItem.GetProperties();
var color = (Autodesk.AutoCAD.Colors.Color) properties["Color"].GetValue(dataItem);
Rectangle bounds = args.Bounds;
int itemHeight = bounds.Height;
Graphics graphics = args.Graphics;
args.DrawBackground();
var rect = new Rectangle(bounds.Left + 1, bounds.Top + 1, itemHeight - 2, itemHeight - 2);
graphics.FillRectangle(new SolidBrush(color.ColorValue), rect);
graphics.DrawRectangle(new Pen(Color.Black), rect);
graphics.DrawString((string) properties["Name"].GetValue(dataItem), args.Font,
new SolidBrush(args.ForeColor), bounds.Left + itemHeight + 6, bounds.Top + 1);
args.DrawFocusRectangle();
};

Unfortunately, I haven't found a way to sort the layers by their name and I'm running out of time. You should iterate the layer table to construct your list and then sort it.
Maxence DELANNOY
Manager
Add-ins development for Autodesk software products
http://wiip.fr