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