首先,我查看了所有建议的问题,但没有一个问题能真正回答我的问题。我看到了WinRT或WPF的解决方案,但没有与UWP一起使用的解决方案。
话虽如此,我正在寻找一种方法来做这样的事情:
private void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
var pageName = ((ListViewItem)((ListView)sender).SelectedItem).Name;
var pageObj = ???? //Some way to ref MyNamespace.MyPage.xaml
MyFrame.Navigate(typeof(pageObj));
}
我尝试使用以下所有组合:
var pageObj = FindName(pageName);
---
var pageObj = System.Type.GetType(this.GetType().Namespace + "." + pageName);
---
MyFrame.Navigate(typeof(pageObj));
---
MyFrame.Navigate(pageObj);
---
MyFrame.Navigate(typeof(pageName));
---
MyFrame.Navigate(pageName);
还有其他我不记得的事情。充其量我会得到一个NullReferenceException。
我对C#和UWP还是陌生的,因此,如果这不可能,我很抱歉浪费您的时间。只是,如果我决定在某个时候添加新页面,我就不需要编辑一些switch语句;我只想添加一个新的ListViewItem并完成它。
对我来说,这也是一次学习经历。我已经知道如何进行切换语句。现在,我想做些更优雅的事情。
在此先感谢您提供的帮助!
答案 0 :(得分:0)
如果您只想通过listviewitem字符串值获取页面类型,那是不可能的。您必须手动指定用于导航的页面类型。
例如,如您所说,您可以使用Switch
语句。
或者,如果您熟悉WindowsTemplateStudio,则可以创建一个附加属性(NavigateTo)和一个NavigationService助手类。您可以在XAML上使用附加属性,并通过附加属性值获取页面类型,例如this:
var pageType = menuItem.GetValue(NavHelper.NavigateToProperty) as Type;
如果您不了解这段代码在做什么,我建议您使用WindowsTemplateStudio创建一个简单的代码项目,并添加一些断点来调试其代码并了解整个导航过程。
答案 1 :(得分:0)
我认为您已经接近解决这个问题。包含类型名称的字符串很可能不正确。您将需要包括页面名称在内的整个名称空间。
为了对此进行测试,我创建了一个名为TestPage
的页面,该页面对我有用:
Type type = Type.GetType("Sample.Pages.TestPage");
Frame.Navigate(type);
我建议您先在没有ListView的情况下尝试一下,看看是否可以使它工作。