<ActivityDesignerTheme(GetType(CustomCompositeActivityDesignerTheme))> _
Public Class CustomActivityDesigner
Inherits ActivityDesigner
Public Overrides Function CanBeParentedTo(ByVal parentActivityDesigner As CompositeActivityDesigner) As Boolean
If parentActivityDesigner.GetType().ToString() = "System.Workflow.Activities.IfElseBranchDesigner" Then
Return False
End If
Return True
End Function
Private verbsValue As ActivityDesignerVerbCollection = Nothing
Protected Overrides ReadOnly Property Verbs() As ActivityDesignerVerbCollection
Get
If verbsValue Is Nothing Then
CreateActivityVerbs()
End If
Return Me.verbsValue
End Get
End Property
Private Sub CreateActivityVerbs()
Me.verbsValue = New ActivityDesignerVerbCollection()
Dim addBranchVerb As New ActivityDesignerVerb(Me, DesignerVerbGroup.View, "Add New Parallel Branch", AddressOf OnAddParallelBranch)
Me.verbsValue.Clear()
Me.verbsValue.Add(addBranchVerb)
End Sub
Protected Sub OnAddParallelBranch(ByVal sender As Object, ByVal e As EventArgs)
' Code for adding a new branch to the parallel activity goes here
End Sub
Protected Overrides ReadOnly Property ImageRectangle() As Rectangle
Get
Dim Bounds As Rectangle = Me.Bounds
Dim sz As New Size(24, 24)
Dim imageRect As New Rectangle()
imageRect.X = Bounds.Left + ((Bounds.Width - sz.Width) / 2)
imageRect.Y = Bounds.Top + 4
imageRect.Size = sz
Return imageRect
End Get
End Property
Protected Overrides ReadOnly Property TextRectangle() As Rectangle
Get
Return New Rectangle( _
Me.Bounds.Left + 2, _
Me.ImageRectangle.Bottom, _
Me.Bounds.Width - 4, _
Me.Bounds.Height - Me.ImageRectangle.Height - 1)
End Get
End Property
Protected Overrides Sub Initialize(ByVal activity As Activity)
MyBase.Initialize(activity)
Dim bmp As Bitmap = Resources.ToolboxImage
bmp.MakeTransparent()
Me.Image = bmp
End Sub
Shared ReadOnly BaseSize As New Size(64, 64)
Protected Overrides Function OnLayoutSize(ByVal e As ActivityDesignerLayoutEventArgs) As Size
Return BaseSize
End Function
Private expandedValue As Boolean = True
Private useBasePaintValue As Boolean = False
Public Property UseBasePaint() As Boolean
Get
Return Me.useBasePaintValue
End Get
Set(ByVal value As Boolean)
Me.useBasePaintValue = value
End Set
End Property
Public Property Expanded() As Boolean
Get
Return Me.expandedValue
End Get
Set(ByVal value As Boolean)
Me.expandedValue = value
End Set
End Property
Protected Overrides Sub OnPaint(ByVal e As ActivityDesignerPaintEventArgs)
If Me.UseBasePaint = True Then
MyBase.OnPaint(e)
Return
End If
DrawCustomActivity(e)
End Sub
Private Sub DrawCustomActivity(ByVal e As ActivityDesignerPaintEventArgs)
Dim graphics As Graphics = e.Graphics
Dim compositeDesignerTheme As CompositeDesignerTheme = CType(e.DesignerTheme, CompositeDesignerTheme)
ActivityDesignerPaint.DrawRoundedRectangle(graphics, compositeDesignerTheme.BorderPen, Me.Bounds, compositeDesignerTheme.BorderWidth)
Dim text As String = Me.Text
Dim TextRectangle As Rectangle = Me.TextRectangle
If Not String.IsNullOrEmpty(text) And Not TextRectangle.IsEmpty Then
ActivityDesignerPaint.DrawText(graphics, compositeDesignerTheme.Font, text, TextRectangle, StringAlignment.Center, e.AmbientTheme.TextQuality, compositeDesignerTheme.ForegroundBrush)
End If
Dim Image As System.Drawing.Image = Me.Image
Dim ImageRectangle As Rectangle = Me.ImageRectangle
If Image IsNot Nothing And Not ImageRectangle.IsEmpty Then
ActivityDesignerPaint.DrawImage(graphics, Image, ImageRectangle, DesignerContentAlignment.Fill)
End If
ActivityDesignerPaint.DrawExpandButton(graphics, _
New Rectangle(Me.Location.X, Me.Location.Y, 10, 10), _
Me.Expanded, _
compositeDesignerTheme)
End Sub
End Class
请发表评论