简介
我很压抑发现的CAB(复合应用程序块)不支持一个更高的水平,在其基本落实的ToolStrip。我决心解决这个问题,我添加了一个适配器和ToolStripPanel的最初的工厂,但我一直有与ToolStripContainer的麻烦。因此,作为我的第一篇文章,这里是ToolStripPanel的代码。
这有两个部分。两种方法可以做到这一点。首先是要编辑现有的ToolStrip UI工厂,包括新的代码。但我不喜欢这样做,我可能会在未来更新的CAB和不想依靠再次实施的适应化修改。
二是从目前在自己的汇编类继承和适应类,同时支持。这样,您正在扩大,而不是取代。
这里是新的ToolStripUIAdapterFactory工厂代码:Public Class ToolStripPanelUIAdapter : _
Inherits UIElementAdapter(Of ToolStrip)
Private innerToolStripPanel As ToolStripPanel
Public Sub New(ByVal objToolStripPanel As ToolStripPanel)
Guard.ArgumentNotNull(objToolStripPanel, "objToolStripPanel")
Me.innerToolStripPanel = objToolStripPanel
End Sub
Protected Overrides Function Add(ByVal uiElement As ToolStrip) _
As ToolStrip
If Me.innerToolStripPanel Is Nothing Then
Throw New InvalidOperationException()
End If
Me.innerToolStripPanel.Join(uiElement, 3)
Return uiElement
End Function
Protected Overrides Sub Remove(ByVal uiElement As ToolStrip)
If Me.innerToolStripPanel.Controls.Contains(uiElement) Then
Me.innerToolStripPanel.Controls.Remove(uiElement)
End If
End Sub
End Class
正如你可以看到,它从同一个名字的CAB类继承和覆盖相同的方法,它并,并添加ToolStripPanel的新适配器的支持。
你现在可以添加工厂AfterShellCreated部分主要的外壳应用程序的UI元素适配器厂目录:{C}
的CAB框架现在适当的工厂处理UI扩展网站ToolStripPanels。现在我们需要的是适配器... ...
下面是ToolStripPanel的适配器代码:Public Class ToolStripPanelUIAdapter : Inherits UIElementAdapter(Of ToolStrip)
Private innerToolStripPanel As ToolStripPanel
Public Sub New(ByVal objToolStripPanel As ToolStripPanel)
Guard.ArgumentNotNull(objToolStripPanel, "objToolStripPanel")
Me.innerToolStripPanel = objToolStripPanel
End Sub
Protected Overrides Function Add(ByVal uiElement As ToolStrip) _
As ToolStrip
If Me.innerToolStripPanel Is Nothing Then
Throw New InvalidOperationException()
End If
Me.innerToolStripPanel.Join(uiElement, 3)
Return uiElement
End Function
Protected Overrides Sub Remove(ByVal uiElement As ToolStrip)
If Me.innerToolStripPanel.Controls.Contains(uiElement) Then
Me.innerToolStripPanel.Controls.Remove(uiElement)
End If
End Sub
End Class
这让你注册类型ToolStripPanel的是一个网站,提供的功能:RootWorkItem.UIExtensionSites.RegisterSite("MainToolStripPanelSiteName",
Me.Shell.InnerToolStripContainer.TopToolStripPanel)
这段代码寄存器的顶部面板,但你可以注册,但只能在另一个单独的网站或全部,。一旦你已经注册的网站,你可以创建和ToolStrips添加到它:Dim objToolStip As New System.Windows.Forms.ToolStrip
LocalWorkItem.UIExtensionSites("MainToolStripPanelSiteName").Add(objToolStip)
LocalWorkItem.UIExtensionSites.RegisterSite("MyCustomToolStripSitename", _
objToolStip)
不要忘记第二次登记,允许您添加一个按钮的ToolStrip。
全部完成... ...您现在应该能够创造出动态的工具条和填充它们。如果你想自定义命令,您将需要创建一个ToolStripPanel的命令适配器,并把它添加到的CAB。