Спасибо, я это посмотрю. Хотя эта разметка выглядит как-то очень незнакомо. Как ее к коду прикручивать - совершенно непонятно. Может, со временем разберусь.
...
В целом процесс создания кнопок я стырил из доклада Mike Tuersley "Creating a Ribbon Bar for AutoCAD® with VB.NET". Оно работает, вопросов нет. И вообще примеров в Сети куча.
Но как-то хотелось бы знать, что этот код делает. Потому что просто из костылей все вязать - это как-то очень печально.
Вот кусок кода, который там приведен:
Imports System
Imports Autodesk.AutoCAD.EditorInput
Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.Windows
Imports Autodesk.Windows
Public Class Class1 Implements IExtensionApplication
	Public Sub Initialize() Implements IExtensionApplication.Initialize
		createRibbon()
	End Sub
	Public Sub Terminate() Implements IExtensionApplication.Terminate
	End Sub
	Private Sub CreateRibbon()
		'declare a ribboncontrol object
		Dim ribCntrl As RibbonControl = ComponentManager.Ribbon
		'create a ribbontab
		Dim ribTab As New RibbonTab()
		'set a few properties
		ribTab.Title = "AU2009"
		ribTab.Id = "AU2009"
		'add the tab to the ribbon
		ribCntrl.Tabs.Add(ribTab)
		'set as active tab
		ribTab.IsActive = True
	End Sub
End Class
Private Sub addContent(ByVal ribTab As RibbonTab)
	'create the panel source
	Dim ribSourcePanel As RibbonPanelSource = New RibbonPanelSource()
	ribSourcePanel.Title = "Dev Tools"
	'now the panel
	Dim ribPanel As New RibbonPanel()
	ribPanel.Source = ribSourcePanel
	ribTab.Panels.Add(ribPanel)
	'create a button
	Dim ribButton1 As RibbonButton = New RibbonButton()
	ribButton1.Text = "Net load"
	ribButton1.CommandParameter = "NETLOAD "
	ribButton1.ShowText = True
	ribButton1.CommandHandler = New AdskCommandHandler()
	'add the button
	ribSourcePanel.Items.Add(ribButton1)
End Sub
Public Class AdskCommandHandler	Implements System.Windows.Input.ICommand
	Public Function CanExecute(ByVal parameter As Object) As Boolean _ Implements System.Windows.Input.ICommand.CanExecute
		Return True
	End Function
	Public Event CanExecuteChanged As EventHandler Implements _ System.Windows.Input.ICommand.CanExecuteChanged
	Public Sub Execute(ByVal parameter As Object) Implements _ System.Windows.Input.ICommand.Execute
		Dim ribBtn As RibbonButton = TryCast(parameter, RibbonButton)
		If ribBtn IsNot Nothing Then
			Autodesk.AutoCAD.ApplicationServices.Application. DocumentManager.MdiActiveDocument. SendStringToExecute(_ ribBtn.CommandParameter, True, False, True)
		End If
	End Sub
End Class
Во-первых, откуда-то взялся класс IExtensionApplication. Видимо, именно благодаря ему можно использовать Initialize() и Terminate(). (Уже потом я наткнулся на запись в ивестном блоге 
http://through-the-interface.typepad.com/through_the_interface/2006/09/initialization_.html).
Во-вторых, объявляются всяческие Ribbon и RibbonTab. То, что это лента и вкладка на ленте, понятно на интуитивном уровне. Пока неважно - все равно они не главную роль играют в коде.
Потом на сцену выступают RibbonPanelSource и RibbonPanel. Не знаю, не понимаю, в чем отличие. Это, похоже, тоже разработка Autodesk (по крайней мере, находится оно в Autodesk.Window namespace).
После всего этого в коде появляется КНОПКА RibbonButton. У нее используются параметры Text, CommandParameter (это, видимо, команда AutoCAD, которая запускается при нажатии кнопки), ShowText (булевская переменная, видимо, отвечающая за отображение текста) и CommandHandler (обработчик, который будет исполняться при нажатии кнопки).
Затем определяется этот самый обработчик, причем отдельным классом. Отдельным классом он определен, как я понимаю, потому, что он должен реализовывать интерфейс System.Windows.Input.ICommand. В рамках класса AdskCommandHandler определены: функция CanExecute(), событие CanExecuteChanged и функция Execute() (все это просто для реализации интерфейса ICommand - так, CanExecute() в этом примере всегда возвращает true, а событие CanExecuteChanged вроде бы нигде не используется).
В итоге я добавил кнопку (с картинкой, там дальше в примере это было) и в Execute() поместил логику. Работает.
При этом я понятия не имею, какие еще у кнопки есть методы (то есть поля и методы я могу просмотреть в IDE, но что они делают - черт их знает).
Аналогичная ситуация и со многими другими объектами. И что делать?