Я пытаюсь инкапсулировать разные панели инструментов в разные элементы управления, чтобы элементы управления, относящиеся к одному действию, находились на одной панели инструментов, а элементы управления, относящиеся к другому, - на другой панели инструментов. Это очень распространенная практика.
Моей первой попыткой инкапсуляции было создание пользовательского элемента управления для каждой панели инструментов. Таким образом, панель инструментов типа A будет выглядеть так:
<ToolBarTray Name="toolBarTray1" >
<ToolBar Name="toolBar1">
Type A Control elements and event handler attributes
</ToolBar>
</ToolBarTray>
Панель инструментов типа B выглядит следующим образом:
<ToolBarTray Name="toolBarTray1" >
<ToolBar Name="toolBar1">
Type B Control elements and event handler attributes
</ToolBar>
</ToolBarTray>
Основные окна выглядят так:
<DockPanel Name="dockPanel1" LastChildFill="True">
<local:TypeAToolBar x:Name="loggingToolbar" DockPanel.Dock="Top" />
<local:TypeBToolBar x:Name="combinationsToolbar" DockPanel.Dock="Top" />
...
Это работает, но панели инструментов "чужие" друг для друга: например, я не могу перетащить нижнюю, чтобы она находилась на одной линии с первой - я думаю, это потому, что они не разделяют тот же ToolBarTray.
Попытка «вынести» элемент ToolBarTray в главное окно и оставить элементы ToolBar в качестве корней пользовательских элементов управления, однако вызывает исключение, поскольку ToolBarTray ожидает дочерние элементы панели инструментов, тогда как TypeAToolbar и TypeBToolBar являются пользовательскими элементами управления.
Итак, мой вопрос: Как мне добиться обычной функциональности панелей инструментов при сохранении реализации каждой отдельной части?