How to programmatically dock the XPMenus bar in WinForms CommandBar?
Dock the XPMenus bar
The XPMenus bar cannot be docked directly since it is not of the type control. So first, get the CommandBar that hosts this bar using the MainFrameBarManager’s GetBarControl method and then dock this CommandBar like any other dockable control. Please refer the below code snippet which illustrates this:
C#
CommandBar cmdbar = this.mainFrameBarManager1.GetBarControl(this.bar1);
cmdbar.DockState = CommandBarDockState.Left;
this.RecalcBarLayout(cmdbar);
Private void RecalcBarLayout(CommandBar cmdbar)
{
// Call method RedockIfNeeded
MethodInfo mInfo = typeof(CommandBar).GetMethod("RedockIfNeeded", BindingFlags.Instance | BindingFlags.InvokeMethod | BindingFlags.NonPublic);
if (mInfo != null)
{
mInfo.Invoke(cmdbar, new object[] { });
}
// Call method OnCommandBarStateChanged
mInfo = typeof(CommandBar).GetMethod("OnCommandBarStateChanged", BindingFlags.Instance | BindingFlags.InvokeMethod | BindingFlags.NonPublic);
if (mInfo != null)
{
mInfo.Invoke(cmdbar, new object[] { EventArgs.Empty });
}
}
VB
Dim cmdbar As CommandBar = MainFrameBarManager1.GetBarControl(Bar1)
cmdbar.DockState = CommandBarDockState.Left
Me.RecalcBarLayout(cmdbar)
Private Sub RecalcBarLayout(ByVal cmdbar As CommandBar)
' Call method RedockIfNeeded
Dim mInfo As MethodInfo = GetType(CommandBar).GetMethod("RedockIfNeeded", BindingFlags.Instance Or BindingFlags.InvokeMethod Or BindingFlags.NonPublic)
If Not mInfo Is Nothing Then
mInfo.Invoke(cmdbar, New Object() {})
End If
' Call method OnCommandBarStateChanged
mInfo = GetType(CommandBar).GetMethod("OnCommandBarStateChanged", BindingFlags.Instance Or BindingFlags.InvokeMethod Or BindingFlags.NonPublic)
If Not mInfo Is Nothing Then
mInfo.Invoke(cmdbar, New Object() {EventArgs.Empty})
End If
End Sub