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;
	}
}
Tagged:

製品について

Ultimate UI for Windows Forms