【发布时间】:2016-01-15 18:05:22
【问题描述】:
我正在开发一个非常简单的桌面应用程序,但我在执行一些基本任务时遇到了问题。我正在使用 Visual Studio 2013。
我从空白 WPF 模板创建了一个项目。我创建了一个名为 Page1.xaml 的新页面,与默认的 MainWindow.xaml 窗口一起使用。
在我的 MainWindow.xaml 窗口中,我有 Grid 并且在网格内是一个图像。
<Grid MouseDown="Grid_MouseDown_1" Cursor="Hand" >
<Image Name="ImageIntro" Source="images/Stories-intro.jpg" Stretch="None" />
</Grid>
Grid 有一个 MouseDown 事件,因此我可以检测用户何时单击 Grid 内的任何位置。
private void Grid_MouseDown_1(object sender, MouseButtonEventArgs e)
{
}
非常基本,一切都按预期工作和编译。
我遇到的问题是我无法在 MainWindow.xaml 上的窗口中加载 Page1.xaml。我不想单独打开一个窗口,我只是想让 Page1.xaml 上的内容显示在 MainWindow.xaml 的可见窗口内。
我尝试使用以下内容,但在单击链接时出现错误:发生“System.NullReferenceException”类型的未处理异常
private void Grid_MouseDown_1(object sender, MouseButtonEventArgs e)
{
Uri uri = new Uri("Page1.xaml", UriKind.Relative);
NavigationService ns = NavigationService.GetNavigationService(this);
ns.Navigate(uri);
}
这不是一个浏览器应用程序,它只是一个桌面应用程序。第一个屏幕 (MainWindow.xaml) 只需单击即可显示第二个屏幕 (Page1.xaml)。
我希望 Page1.xaml 内容占据 MainWindow.xaml 的整个窗口(抱歉,我不能强调这一点,我不希望 MainWindow.xaml 中的框架或任何内容在用户显示时显示位于 Page1.xaml)。
我对桌面应用程序很陌生,但我对用于 Web 应用程序的 .Net C# 有广泛的了解。如果有更好的方法来实现这一点,我并不反对改变我所拥有的流量。例如,也许我不应该使用 Window to Page 导航,而应该使用 Window to Window 或其他方式。
我想这将是一个相对简单的任务,但我还没有找到任何可行的方法,所以希望这里有人可以解释一下。
【问题讨论】:
-
我不记得 GetNavigationService() 需要任何参数
-
如果我从 GetNavigationService() 中删除“this”,则代码无法编译。
-
@FilippoB msdn.microsoft.com/en-us/library/… 将
DependencyObject作为参数。 -
这对我没有帮助,是否有任何示例代码仅显示导航到正在运行的页面?当然,我似乎缺少像框架或导航窗口这样的关键元素,但我不知道如何实现它。就像我说的,从窗口导航到新页面应该不是一项复杂的任务,但我在该页面上没有看到任何示例说明如何做到这一点。
-
我想我现在更了解这一点了,我的 NavigationService ns 正在返回 null ......但究竟为什么呢?我是否缺少页面上的元素?
标签: c# wpf xaml visual-studio-2013