Infragistics Windows Forms 製品には、UIElement レベルでコントロールをカスタマイズすることのできる、フィルター機能が実装されています。
ここでは、描画フィルター (DrawFilter) を使用して UltraGrid の任意のセルに斜線を引く方法をご紹介します。
IUIElementDrawFilter インタフェースには GetPhasesToFilter と DrawElement の2つのメソッドがあります。GetPhasesToFilter では変更を行うフェーズ (DrawPhase) を返し、DrawElement では UIElement の変更内容を記述します。
今回は、GetPhasesToFilter では対象の UIElement が CellUIElement の場合にDrawPhase.AfterDrawElement を返すようにし、DrawElement では任意の CellUIElement の Rectangle に対してUIElementDrawParams.Graphics.DrawLine() メソッドを使用して右上から左下へ 斜線を描画します。
public class CrossOutCellDrawFilter : IUIElementDrawFilter { List<CellInfo> cellsInfo; public CrossOutCellDrawFilter(List<CellInfo> list) { cellsInfo = list; } public bool DrawElement(DrawPhase drawPhase, ref UIElementDrawParams drawParams) { CellUIElement cue = drawParams.Element as CellUIElement; if (cue != null) { foreach (CellInfo info in cellsInfo) { if(cue.Cell.Row.Cells["col1"].Value.ToString() == info.rowKey.ToString() && cue.Cell.Column.Key == info.columnKey) { Rectangle elementRect = cue.Rect; drawParams.Graphics.DrawLine(new Pen(Color.Black), new Point(elementRect.Right, elementRect.Top - 1), new Point(elementRect.Left, elementRect.Bottom - 1)); } } } return false; } public DrawPhase GetPhasesToFilter(ref UIElementDrawParams drawParams) { if (drawParams.Element is CellUIElement) return DrawPhase.AfterDrawElement; else return DrawPhase.None; } }
