使用 Alpha 混合技术,可以增强控件的外观。 这包括把背景图像指派到网格,并使用透明画笔和画刷绘制视图元素。 请参阅 Alpha 混合概述 主题获得关于此项技术的细节,以及实现方式的一个列表。 本主题描述如何通过自定义绘制实现 Alpha 混合。
自定义绘制和 Alpha 混合
XtraGrid 提供了多种方式来定制其元素的外观和内容。 其中一种方式是人工绘制视图元素。 为了达到此目的,特别设计了一些事件,必须接管这些被列示在 可以被自定义绘制的元素 文档中的事件。 自定义绘制事件提供了许多参数,这些参数可以用于获取绘制界面、元素的边界矩形、外观设置等。 每个自定义绘制事件都有一个 Handled 参数,此参数指明是否执行默认的绘制。 可以接管这些事件来实现 Alpha 混合功能。
自定义绘制视图脚注 —— 示例
下面的示例代码接管了 GridView.CustomDrawFooter 事件,来自定义绘制视图的脚注。 它使用透明画刷填充脚注的背景,然后绘制“The XtraGrid Suite”字符串。 下面的插图展示了运行结果 (假设已经为网格指派了一幅背景图像)。
C# | 复制代码 |
---|---|
using DevExpress.XtraGrid.Views.Base; private void gridView1_CustomDrawFooter(object sender, RowObjectCustomDrawEventArgs e) { Color colorLeft = Color.FromArgb(150, Color.Gold); Color colorCenter = Color.FromArgb(100, Color.Blue); Color colorRight = Color.FromArgb(100, Color.Green); Rectangle leftRect = new Rectangle(e.Bounds.X, e.Bounds.Y, e.Bounds.Width / 2, e.Bounds.Height); Rectangle rightRect = new Rectangle(e.Bounds.X + e.Bounds.Width / 2, e.Bounds.Y, e.Bounds.Width / 2, e.Bounds.Height); // Fills the footer's background. using(LinearGradientBrush leftBrush = new LinearGradientBrush(leftRect, colorLeft, colorCenter, LinearGradientMode.Horizontal), rightBrush = new LinearGradientBrush(rightRect, colorCenter, colorRight, LinearGradientMode.Horizontal)) { e.Graphics.FillRectangle(leftBrush, leftRect); e.Graphics.FillRectangle(rightBrush, rightRect); } // Draws the border. ControlPaint.DrawBorder3D(e.Graphics, e.Bounds, Border3DStyle.Raised); StringFormat sf = new StringFormat(); sf.LineAlignment = StringAlignment.Center; sf.Alignment = StringAlignment.Near; sf.Trimming = StringTrimming.EllipsisCharacter; Font font = new Font("Tahoma", 8, FontStyle.Bold); // Draws the text. e.Graphics.DrawString("The XtraGrid Suite", font, new SolidBrush(Color.Navy), e.Bounds, sf); // Prohibit default painting. e.Handled = true; } |
Visual Basic | 复制代码 |
---|---|
Imports DevExpress.XtraGrid.Views.Base Private Sub GridView1_CustomDrawFooter(ByVal sender As Object, _ ByVal e As DevExpress.XtraGrid.Views.Base.RowObjectCustomDrawEventArgs) _ Handles GridView1.CustomDrawFooter Dim ColorLeft As Color = Color.FromArgb(150, Color.Gold) Dim ColorCenter As Color = Color.FromArgb(100, Color.Blue) Dim ColorRight As Color = Color.FromArgb(100, Color.Green) Dim LeftRect As Rectangle = New Rectangle(e.Bounds.X, e.Bounds.Y, _ e.Bounds.Width / 2, e.Bounds.Height) Dim RightRect As Rectangle = New Rectangle(e.Bounds.X + e.Bounds.Width / 2, _ e.Bounds.Y, e.Bounds.Width / 2, e.Bounds.Height) Dim LeftBrush As LinearGradientBrush = New LinearGradientBrush(LeftRect, ColorLeft, _ ColorCenter, LinearGradientMode.Horizontal) Dim RightBrush As LinearGradientBrush = New LinearGradientBrush(RightRect, _ ColorCenter, ColorRight, LinearGradientMode.Horizontal) ' Fills the footer's background. e.Graphics.FillRectangle(LeftBrush, LeftRect) e.Graphics.FillRectangle(RightBrush, RightRect) LeftBrush.Dispose() RightBrush.Dispose() ' Draws the border. ControlPaint.DrawBorder3D(e.Graphics, e.Bounds, Border3DStyle.Raised) Dim Sf As StringFormat = New StringFormat Sf.LineAlignment = StringAlignment.Center Sf.Alignment = StringAlignment.Near Sf.Trimming = StringTrimming.EllipsisCharacter Dim font As Font = New Font("Tahoma", 8, FontStyle.Bold) ' Draws the text. e.Graphics.DrawString("The XtraGrid Suite", font, New SolidBrush(Color.Navy), _ e.Bounds.X, e.Bounds.Y, Sf) ' Prohibit default painting. e.Handled = True End Sub |