protected virtual void OnPaintForeground(PaintEventArgs e) { base.ItemHeight = GetPreferredSize(Size.Empty).Height; Color borderColor, foreColor; if (isHovered && !isPressed && Enabled) { foreColor = WellsMetroPaint.ForeColor.ComboBox.Hover(Theme); borderColor = WellsMetroPaint.BorderColor.ComboBox.Hover(Theme); } else if (isHovered && isPressed && Enabled) { foreColor = WellsMetroPaint.ForeColor.ComboBox.Press(Theme); borderColor = WellsMetroPaint.BorderColor.ComboBox.Press(Theme); } else if (!Enabled) { foreColor = WellsMetroPaint.ForeColor.ComboBox.Disabled(Theme); borderColor = WellsMetroPaint.BorderColor.ComboBox.Disabled(Theme); } else { //foreColor = WellsMetroPaint.ForeColor.ComboBox.Hover(Theme); //borderColor = WellsMetroPaint.BorderColor.ComboBox.Hover(Theme); foreColor = WellsMetroPaint.ForeColor.ComboBox.Normal(Theme);//normal是有个渐隐效果,感觉没必要,一直是黑的就行 borderColor = WellsMetroPaint.BorderColor.ComboBox.Normal(Theme); } using (Pen p = new Pen(borderColor)) { Rectangle boxRect = new Rectangle(0, 0, Width - 1, Height - 1); e.Graphics.DrawRectangle(p, boxRect); } using (SolidBrush b = new SolidBrush(foreColor)) { e.Graphics.FillPolygon(b, new Point[] { new Point(Width - 20, (Height / 2) - 2), new Point(Width - 9, (Height / 2) - 2), new Point(Width - 15, (Height / 2) + 4) }); } Rectangle textRect = new Rectangle(2, 2, Width - 20, Height - 4); TextRenderer.DrawText(e.Graphics, Text, WellsMetroFonts.ComboBox(metroComboBoxSize, metroComboBoxWeight), textRect, foreColor, TextFormatFlags.Left | TextFormatFlags.VerticalCenter); OnCustomPaintForeground(new WellsMetroPaintEventArgs(Color.Empty, foreColor, e.Graphics)); if (displayFocusRectangle && isFocused) { ControlPaint.DrawFocusRectangle(e.Graphics, ClientRectangle); } if (drawPrompt) { DrawTextPrompt(e.Graphics); } }
private void DrawTextPrompt(Graphics g) { Color backColor = BackColor; if (!useCustomBackColor) { backColor = WellsMetroPaint.BackColor.Form(Theme); } Rectangle textRect = new Rectangle(2, 2, Width - 20, Height - 4); TextRenderer.DrawText(g, promptText, WellsMetroFonts.ComboBox(metroComboBoxSize, metroComboBoxWeight), textRect, SystemColors.GrayText, backColor, TextFormatFlags.Left | TextFormatFlags.VerticalCenter | TextFormatFlags.EndEllipsis); }
public override Size GetPreferredSize(Size proposedSize) { Size preferredSize; base.GetPreferredSize(proposedSize); using (var g = CreateGraphics()) { string measureText = Text.Length > 0 ? Text : "MeasureText"; proposedSize = new Size(int.MaxValue, int.MaxValue); preferredSize = TextRenderer.MeasureText(g, measureText, WellsMetroFonts.ComboBox(metroComboBoxSize, metroComboBoxWeight), proposedSize, TextFormatFlags.Left | TextFormatFlags.LeftAndRightPadding | TextFormatFlags.VerticalCenter); preferredSize.Height += 4; } return(preferredSize); }
protected override void OnDrawItem(DrawItemEventArgs e) { if (e.Index >= 0) { Color foreColor; Color backColor = BackColor; if (!useCustomBackColor) { backColor = WellsMetroPaint.BackColor.Form(Theme); } if (e.State == (DrawItemState.NoAccelerator | DrawItemState.NoFocusRect) || e.State == DrawItemState.None) { using (SolidBrush b = new SolidBrush(backColor)) { e.Graphics.FillRectangle(b, new Rectangle(e.Bounds.Left, e.Bounds.Top, e.Bounds.Width, e.Bounds.Height)); } foreColor = WellsMetroPaint.ForeColor.Link.Normal(Theme); } else { using (SolidBrush b = new SolidBrush(WellsMetroPaint.GetStyleColor(Style))) { e.Graphics.FillRectangle(b, new Rectangle(e.Bounds.Left, e.Bounds.Top, e.Bounds.Width, e.Bounds.Height)); } foreColor = WellsMetroPaint.ForeColor.Tile.Normal(Theme); } Rectangle textRect = new Rectangle(0, e.Bounds.Top, e.Bounds.Width, e.Bounds.Height); TextRenderer.DrawText(e.Graphics, GetItemText(Items[e.Index]), WellsMetroFonts.ComboBox(metroComboBoxSize, metroComboBoxWeight), textRect, foreColor, TextFormatFlags.Left | TextFormatFlags.VerticalCenter); } else { base.OnDrawItem(e); } }