/// <summary> /// 绘制项的边框 /// </summary> /// <param name="g"></param> /// <param name="bounds"></param> internal virtual void DrawItemBorder(Graphics g, Rectangle bounds, SEListViewItem item) { if (item.Hovered || item.Selected) { using (Pen pWhite128 = new Pen(Color.FromArgb(128, Theme.ItemBorderColor))) { ImageListViewUtility.DrawRoundedRectangle(g, pWhite128, bounds.Left, bounds.Top, bounds.Width - 1, bounds.Height - 1, _radius); } } }
/// <summary> /// 绘制项 /// </summary> /// <param name="g"></param> /// <param name="item"></param> /// <param name="state"></param> /// <param name="bounds"></param> internal virtual void DrawItem(Graphics g, SEListViewItem item) { Rectangle bounds = LayoutManager.GetItemBounds(item); g.SetClip(bounds); DrawItemBackground(g, bounds); // Paint background Selected if ((LayoutManager.Focused && ((item.State & ListViewItemState.Selected) == ListViewItemState.Selected)) || (LayoutManager.Focused == false && ((item.State & ListViewItemState.Selected) == ListViewItemState.Selected) && ((item.State & ListViewItemState.Hovered) == ListViewItemState.Hovered))) { using (Brush bSelected = new LinearGradientBrush(bounds, Theme.SelectedColorStart, Theme.SelectedColorEnd, LinearGradientMode.Vertical)) { ImageListViewUtility.FillRoundedRectangle(g, bSelected, bounds, 4); } } // Paint background unfocused else if (LayoutManager.Focused == false && ((item.State & ListViewItemState.Selected) == ListViewItemState.Selected)) { using (Brush bGray64 = new LinearGradientBrush(bounds, Theme.UnFocusedColorStart, Theme.UnFocusedColorEnd, LinearGradientMode.Vertical)) { ImageListViewUtility.FillRoundedRectangle(g, bGray64, bounds, 4); } } // Paint background Hovered //如果正处于框选状态,不绘制Hover状态,减小闪烁 if (LayoutManager.MouseSelecting == false && (item.State & ListViewItemState.Hovered) == ListViewItemState.Hovered) { using (Brush bHovered = new LinearGradientBrush(bounds, Theme.HoverColorStart, Theme.HoverColorEnd, LinearGradientMode.Vertical)) { ImageListViewUtility.FillRoundedRectangle(g, bHovered, bounds, 4); } } DrawItemBorder(g, bounds, item); // Focus rectangle if (LayoutManager.Focused && ((item.State & ListViewItemState.Focused) == ListViewItemState.Focused)) { ControlPaint.DrawFocusRectangle(g, bounds); } DrawItemContent(g, bounds, item); }