我已经派生了ComboBox类,以便具有列表项的自定义布局。这是一个Dropdown列表样式的Combobox,具有漂亮的外观,而自定义样式则类似于旧样式。
在仍然具有自定义设计的情况下,是否可以模拟或强制控件绘制“ 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版本的变化而变化。
答案 0 :(得分:0)
我无法在Internet上找到有关此信息,因此我想不可能使用系统默认样式自动绘制背景。
目前,解决方案是通过重写Paint方法完全手动绘制它,但这需要考虑正在执行的Windows版本,并使用不同的设计绘制控件。
>如果有人有不同的解决方案或建议,请告诉我。