You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中完成认证后直接在新窗口显示指定XAML页面(基于MahApps.Metro HamburgerMenu)

解决MahApps.Metro HamburgerMenu默认显示指定XAML页面的问题

看起来你已经搭好登录流程,但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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.28 18:42:40