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

如何在ModernUI WPF应用程序中嵌套ModernMenu控件?

解决ModernUI嵌套ModernMenu无法分配源内容的问题

我之前在开发ModernUI的WPF应用时,也踩过这个嵌套ModernMenu的坑,给你几个实用的排查和解决方向:

1. 确保子菜单关联正确的导航服务

主窗口的ModernMenu能正常工作,是因为它默认和ModernWindow的NavigationService绑定了导航上下文,但子页面(SourcePage1)里的ModernMenu并没有自动继承这个上下文。你可以手动在XAML里绑定到窗口的导航服务:

<mui:ModernMenu x:Name="SubModernMenu"
                NavigationService="{Binding RelativeSource={RelativeSource AncestorType={x:Type mui:ModernWindow}}, Path=NavigationService}" />

这样子菜单就能获取到正确的导航上下文,点击链接时才能正常跳转。

2. 检查源内容的URI路径与绑定逻辑

如果是静态定义菜单链接,要确保Source的URI路径是正确的(注意相对路径的斜杠格式):

<mui:ModernMenu.Links>
    <mui:Link DisplayName="二级页面1" Source="/Views/SubPage1.xaml" />
    <mui:Link DisplayName="二级页面2" Source="/Views/SubPage2.xaml" />
</mui:ModernMenu.Links>

如果是MVVM绑定方式,要确认子页面的ViewModel里的数据源(比如ObservableCollection<Link>)已经正确初始化,并且绑定路径没有错误:

<mui:ModernMenu Links="{Binding SubMenuLinks}" />

3. 避免不必要的嵌套,用原生二级菜单替代

其实ModernUI的Link本身支持SubLinks属性,完全可以在主菜单里直接定义二级导航,不需要在子页面里再嵌套一个ModernMenu,这样更符合框架的设计逻辑,也能避免上下文冲突:

<!-- 主窗口的ModernMenu -->
<mui:ModernMenu.Links>
    <mui:Link DisplayName="主页面1" Source="/Views/SourcePage1.xaml">
        <mui:Link.SubLinks>
            <mui:Link DisplayName="二级子页面1" Source="/Views/SubPage1.xaml" />
            <mui:Link DisplayName="二级子页面2" Source="/Views/SubPage2.xaml" />
        </mui:Link.SubLinks>
    </mui:Link>
</mui:ModernMenu.Links>

4. 后台代码赋值时机要正确

如果是在后台代码里给子菜单添加链接,要确保在页面加载完成后再操作,比如在Loaded事件里初始化:

private void SourcePage1_Loaded(object sender, RoutedEventArgs e)
{
    var subLinks = new ObservableCollection<Link>
    {
        new Link { DisplayName = "动态二级页面", Source = new Uri("/Views/DynamicSubPage.xaml", UriKind.Relative) }
    };
    SubModernMenu.Links = subLinks;
}

内容的提问来源于stack exchange,提问作者LKeene

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 04:31:23