Непосредственно перед загрузкой содержимого функциональной единицы в главное окно диспетчер документов позволяет размещать элементы управления, специфичные для загружаемого представления, в панели инструментов и статуса главного окна. Для использования этих возможностей необходимо реализовать в презентере интерфейс IToolBarProvider – для размещения элементов в панели инструментов и IStatusBarProvider – для размещения элементов в панели статуса.
Рассмотрим на примере добавление элементов в панель инструментов (добавление элементов в панель статуса выполняется аналогично).
Сами элементы, которые планируется разместить в панели статуса главного окна мы разместим непосредственно в представлении функциональной единицы:
<UserControl x:Class="ModuleWithMenu.TestForm.TestFormView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
d:DesignHeight="300"
d:DesignWidth="300"
mc:Ignorable="d">
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition />
</Grid.RowDefinitions>
<ToolBar Name="MyToolBar" Visibility="Collapsed">
<Button Content="Test button" />
</ToolBar>
</Grid>
</UserControl>
Элементы панели статуса умышленно сделаны скрытыми в самом представлении (<ToolBar Name="MyToolBar" Visibility="Collapsed">), чтобы не дублировать панели инструментов главного окна и представления.
Код презентера функциональной единицы:
internal class TestFormPresenter : PresenterBase<TestFormView, TestFormViewModel>, IToolBarProvider
{
public ReadOnlyCollection<FrameworkElement> ToolBarItems { get; private set; }
protected override void OnViewSet()
{
base.OnViewSet();
ThreadHelper.SafeCall(() =>
{
ToolBarItems =
new ReadOnlyCollection<FrameworkElement>(View.MyToolBar.Items.Cast<FrameworkElement>().ToList());
});
}
В коде мы реализуем интерфейс IToolBarProvider и указываем в качестве значения его свойства ToolBarItems содержимое нашей панели инструментов в представлении.
Теперь при загрузке нашей функциональной единицы в панель инструментов будут добавляться элементы управления, расположенные в панели инструментов нашего представления (в данном случае добавляется Test Button):
В принципе, ничего не мешает нам создавать элементы управления для панели инструментов непосредственно в коде. Но проектировать его визуально немного приятней