初めてのWPF 5日目

起動時はHomeモジュール表示
BasicRegionNavigation 1


ハンバーガートグルボタンでメインメニュー表示
BasicRegionNavigation 2


ドロワー上のボタンをクリックしてモジュール切り替え
BasicRegionNavigation 3

モジュール間の切り替えをBasicRegionNavigationに変更

Prism6版を確認したら、NavigateCommandを親プロジェクトの既存のViewModelに移動しても問題なく動いたとあった(記憶には無かった)のでモジュール側のメニューはViewだけを残して他はバッサリ削除。
「動かん!?」と思ったらNavigate先のRegion名を間違えてました(Typo)。
エラー出してよ、と思いました。

Viewもテンプレート化すれば重複減らせそうですが、それは次の課題。

メインメニューをMaterialDesignのDrawerに変更

デスクトップアプリでメインメニューにDrawer使うとか他人様にやられると「はぁ?」という感じですが、ものは試しで(^^;)。

MainWindowViewModelにメニュー開閉用のプロパティを追加

setの見慣れない書き方はよく分かってませんが、Titleの真似で。
private bool _mainMenuIsOpen = false;
public bool MainMenuIsOpen
{
    get { return _mainMenuIsOpen; }
    set { SetProperty(ref _mainMenuIsOpen, value); }
}

MainWindow.xamlのトグルボタンにバインド

2箇所あるので要注意
<materialDesign:DrawerHost IsLeftDrawerOpen="{Binding ElementName=MenuToggleButton, Path=IsChecked}">
    <materialDesign:DrawerHost.LeftDrawerContent>
        <DockPanel MinWidth="212">
            <ToggleButton Style="{StaticResource MaterialDesignHamburgerToggleButton}" 
                                DockPanel.Dock="Top"
                                HorizontalAlignment="Right" Margin="16"
                                IsChecked="{Binding MainMenuIsOpen}" />
            <StackPanel Margin="0">
                <ItemsControl x:Name="NavigationItemsControl" prism:RegionManager.RegionName="MainNavigationRegion" Margin="0" Padding="0" />
            </StackPanel>
        </DockPanel>
    </materialDesign:DrawerHost.LeftDrawerContent>
    <DockPanel>
        <materialDesign:ColorZone Padding="16" materialDesign:ShadowAssist.ShadowDepth="Depth2"
                                Mode="PrimaryMid" DockPanel.Dock="Top">
            <DockPanel>
                <ToggleButton Style="{StaticResource MaterialDesignHamburgerToggleButton}" IsChecked="{Binding MainMenuIsOpen}"
                                    x:Name="MenuToggleButton"/>
                <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" FontSize="22" Text="{Binding Title}"></TextBlock>
            </DockPanel>
        </materialDesign:ColorZone>
・・・・

NavigateCommandで遷移時にfalseに

private void Navigate(string navigatePath)
{
    MainMenuIsOpen = false;

    if (navigatePath != null)
      _regionManager.RequestNavigate("ContentRegion", navigatePath);
       
}
OK キャンセル 確認 その他