初めてのWPF 5日目
2019/01/13
ハンバーガートグルボタンでメインメニュー表示
ドロワー上のボタンをクリックしてモジュール切り替え
モジュール間の切り替えを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); }