如何在C#中完成认证后直接在新窗口显示指定XAML页面(基于MahApps.Metro HamburgerMenu)
看起来你已经搭好登录流程,但ShellWindow打开后没法默认展示指定页面对吧?这是MahApps.Metro的HamburgerMenu常见的小问题——默认它不会自动选中任何菜单项,所以内容区域是空的。下面是两种简单实用的解决方案:
方案一:直接在ShellWindow构造函数中设置默认选中项
步骤1:给HamburgerMenu添加命名并绑定内容
首先修改你的ShellWindow.xaml,给HamburgerMenu加上x:Name属性,同时配置Content绑定,确保选中项的Tag(也就是你的View)能显示在内容区域:
<mah:HamburgerMenu x:Name="MainHamburgerMenu" Content="{Binding ElementName=MainHamburgerMenu, Path=SelectedItem.Tag}"> <!-- 你原有的ItemsSource内容保持不变 --> <mah:HamburgerMenu.ItemsSource> <mah:HamburgerMenuItemCollection> <mah:HamburgerMenuGlyphItem IsEnabled="True" Glyph="Car" Label="Gestion des véhicules"> <mah:HamburgerMenuGlyphItem.Tag> <views:VehicleManagementView IsEnabled="True"/> </mah:HamburgerMenuGlyphItem.Tag> </mah:HamburgerMenuGlyphItem> <mah:HamburgerMenuGlyphItem Glyph="Book" Label="Tableau de bord"> <mah:HamburgerMenuGlyphItem.Tag> <views:BookingView/> </mah:HamburgerMenuGlyphItem.Tag> </mah:HamburgerMenuGlyphItem> <!-- 其他菜单项... --> </mah:HamburgerMenuItemCollection> </mah:HamburgerMenu.ItemsSource> </mah:HamburgerMenu>
步骤2:在ShellWindow后台设置默认选中项
打开ShellWindow.xaml.cs,在构造函数里添加代码,指定默认选中的菜单项:
using MahApps.Metro.Controls; using System.Linq; public ShellWindow() { InitializeComponent(); // 方法1:默认选中第一个菜单项(Gestion des véhicules) MainHamburgerMenu.SelectedItem = MainHamburgerMenu.ItemsSource.Cast<HamburgerMenuItem>().FirstOrDefault(); // 方法2:根据Label精准指定(比如要默认显示"Tableau de bord") // MainHamburgerMenu.SelectedItem = MainHamburgerMenu.ItemsSource.Cast<HamburgerMenuItem>() // .FirstOrDefault(item => item.Label == "Tableau de bord"); }
方案二:从登录页传递参数动态指定(更灵活)
如果想根据登录用户的角色或其他条件,动态切换默认显示的页面,可以给ShellWindow添加带参数的构造函数:
步骤1:修改ShellWindow构造函数
public ShellWindow(string defaultPageLabel) { InitializeComponent(); // 根据传入的Label找到对应菜单项并选中 MainHamburgerMenu.SelectedItem = MainHamburgerMenu.ItemsSource.Cast<HamburgerMenuItem>() .FirstOrDefault(item => item.Label == defaultPageLabel); }
步骤2:在登录页调用时传递参数
修改AuthenticateWindow.xaml.cs里的登录成功逻辑:
private void btn_signin_Click(object sender, RoutedEventArgs e) { String message = Login.Connect(tbx_email.Text, pbx_pwd.Password); if (message == "Success") { // 指定默认显示"Gestion des véhicules"页面 ShellWindow mainWindow = new ShellWindow("Gestion des véhicules"); mainWindow.Show(); this.Close(); } else { tbx_message.Text = message; } }
这样就能实现登录后打开ShellWindow时,直接展示你指定的XAML页面了。
内容的提问来源于stack exchange,提问作者Endeur
相关产品推荐
相关产品推荐

