FirstFloor ModernUI使用LinkNavigator编程导航找不到ModernFrame目标报错
问题根因
- 你调用
LinkNavigator.Navigate的重载参数不符合要求:默认双参数重载只会在当前触发导航的控件的视觉树中查找无名称的ModernFrame作为目标,快捷键触发时上下文不在主窗口视觉树路径内,就会查找失败抛异常。 - 你将SettingsManager定义为ModernFrame的子类违反MUI的导航设计逻辑:MUI中ModernFrame是导航容器,导航加载的内容应该是UserControl,你之前把它改成UserControl能正常运行才是正确的结构,改为ModernFrame属于多余操作,还会导致嵌套Frame的导航栈混乱。
- TitleLink导航正常是因为MUI内置的TitleLink默认绑定了主ModernWindow的ContentFrame作为目标,自带目标上下文,不需要手动指定。
解决方案
方案一(最推荐)
将SettingsManager改回继承UserControl,直接操作主窗口的ContentFrame完成导航:
// 直接获取主窗口的内置ModernFrame进行导航 var mainWindow = Application.Current.MainWindow as ModernWindow; mainWindow?.ContentFrame.Navigate(new Uri("/Controls/SettingsManager.xaml", UriKind.Relative));
方案二
继续用LinkNavigator,指定目标ModernFrame的名称,MUI默认ModernWindow的内容Frame名称为ContentFrame:
// 第三个参数为目标ModernFrame的x:Name LinkNavigator.Navigate(new Uri("/Controls/SettingsManager.xaml", UriKind.Relative), this, "ContentFrame");
方案三(不推荐,仅兼容你现有继承ModernFrame的写法)
给你页面中引用的SettingsManager实例设置x:Name="SettingsFrame",导航时指定该名称即可:
LinkNavigator.Navigate(new Uri("/Controls/SettingsManager.xaml", UriKind.Relative), this, "SettingsFrame");
内容的提问来源于stack exchange,提问作者FatalSleep
相关产品推荐
相关产品推荐

