Я получил класс ComboBox для того, чтобы иметь собственный макет элементов списка.Это комбинированный список в стиле DropDown, который имеет приятный внешний вид, в то время как пользовательский выглядит как старый.
![Custom Combobox vs Default](https://i.stack.imgur.com/wxKK8.jpg)
Есть лиспособ эмулировать или заставить элемент управления рисовать макет "стиль по умолчанию Windows", сохраняя при этом собственный дизайн?Это стиль, подобный правому на изображении выше, с градиентным фоном (или чем угодно, в зависимости от версии windows).
Это то, что я сделал до сих пор:
public ComboBoxRGB()
{
this.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
this.DrawMode = System.Windows.Forms.DrawMode.OwnerDrawFixed;
}
protected override void OnDrawItem(System.Windows.Forms.DrawItemEventArgs e)
{
base.OnDrawItem(e);
if (Items.Count > 0)
{
if (e.Index > -1)
{
if (Items[e.Index] == null) return;
int BarWidth = 16;
int BarSpacing = 1;
int Spacing_Top = 2;
int Spacing_Left = 3;
int Spacing_Right = 4;
ComboBoxRGBItem item;
try
{
item = (ComboBoxRGBItem)Items[e.Index];
}
catch { return; }
e.DrawBackground();
e.DrawFocusRectangle();
//Draw color indicator
System.Drawing.SolidBrush bColor = new System.Drawing.SolidBrush(System.Drawing.Color.FromArgb(item.Red, item.Green, item.Blue));
e.Graphics.FillRectangle(bColor, Spacing_Left + e.Bounds.Left, e.Bounds.Top + Spacing_Top, 12, 12);
//Draw text
System.Drawing.SolidBrush sbText = (e.State == System.Windows.Forms.DrawItemState.Selected) ? new System.Drawing.SolidBrush(System.Drawing.Color.White) : new System.Drawing.SolidBrush(System.Drawing.Color.Black);
e.Graphics.DrawString(item.Text, e.Font, sbText, Spacing_Left + e.Bounds.Left + BarWidth + Spacing_Right, e.Bounds.Top);
} //IF_Index
} //IF_Items_Count
}
Я был бы очень рад, если бы кто-нибудь имел представление о том, как это сделать.Я хотел бы попытаться эмулировать внешний вид вручную, поскольку это изменяется от версии Windows к версии.