Private _theFocusPen As Pen = Nothing
Private _xOffset As Integer = 0
Private _yOffset As Integer = 0
Private _wOffset As Integer = 0
Private _hOffset As Integer = 0
Public Sub New(ByVal theFocusPen As Pen, ByVal xOffset As Integer, ByVal yOffset As Integer, ByVal wOffset As Integer, ByVal hOffset As Integer)
_theFocusPen = theFocusPen
_xOffset = xOffset
_yOffset = yOffset
_wOffset = wOffset
_hOffset = hOffset
End Sub
Public Function DrawElement(ByVal drawPhase As Infragistics.Win.DrawPhase, ByRef drawParams As Infragistics.Win.UIElementDrawParams) As Boolean Implements Infragistics.Win.IUIElementDrawFilter.DrawElement
Dim retVal As Boolean = False
'FALSE を返す場合、
'このカスタム コードはこの Draw Filter のユーザーによって一切使用されなくなります。
'True を返す場合にはこのカスタム コードが使用されることを保証します。
'どの DrawPhase がこのメソッドを呼び出すのかをテストするのは
'賢明です。複数の DrawPhase で使用されるように
'この DrawFilter を構成してあるかもしれません。
If drawPhase = Infragistics.Win.DrawPhase.BeforeDrawFocus Then
Dim regularRect As Rectangle = drawParams.Element.Rect
'これは Element の完全な矩形です
Dim clippedRect As Rectangle = drawParams.Element.ClipRect
'エレメントがその他のエレメントによってクリップされる場合、これは矩形からクリップされる部分です
Dim theFocusRectangle As Rectangle
'エレメントがその他のエレメントによってクリップされるかどうかを
'確認するためにテストします
If (clippedRect.Width < regularRect.Width) OrElse (clippedRect.Height < regularRect.Height) Then
theFocusRectangle = clippedRect
Else
theFocusRectangle = regularRect
End If
'これによって実際の矩形を変更して、そのサイズを調整することができます。調整できるようにするには
'これが必要です
theFocusRectangle = New Rectangle(theFocusRectangle.X + _xOffset, theFocusRectangle.Y + _yOffset, theFocusRectangle.Width + _wOffset, theFocusRectangle.Height + _hOffset)
'この時点でその上部にフォーカスを示す矩形を
'描画するエレメントの輪郭を描く矩形を
'取得します。
drawParams.Graphics.DrawRectangle(_theFocusPen, theFocusRectangle)
retVal = True
'このカスタム コードが適用されることを保証します。
End If
Return retVal
End Function